历史上的今天
返回首页

历史上的今天

今天是:2024年11月05日(星期二)

正在发生

2021年11月05日 | STM32F103ZET6 — TIM6/TIM7

2021-11-05 来源:eefocus

介绍

STM32F103ZET6 定时器资源非常丰富,根据 datasheet 描述,涵盖如下几种类型:


高级定时器 TIM1 / TIM8

通用定时器 TIM2 / TIM3 / TIM4 / TIM5 

基本定时器 TIM6/ TIM7

本次描述的重点是基本定时器 TIM6/ TIM7


基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源。


时钟

可以看到来自 APB1 的低频时钟经过频率x2供给了 TIM2~TIM7,其中包含了 TIM6/ TIM7,所以供给此部分的时钟为 72MHz


在 TIM6 / TIM7 中存在一个预分频器,支持输入的时钟进行预分频,计数器使用预分频后的时钟进行计数:

预分频的参数配置支持 1~65536


模式

TIM6 / TIM7 支持基本的循环计数,计数方式是从小到大。并且可以支持在任何时间内进行预分频系数的配置,配置在下一个UEV产生后生效。(UEV指的是一个更新时间,即一次计数溢出,当然,也可以支持软件进行主动触发)


可以支持 auto reload 和 one shot 的模式,即计数器完成一次计数之后,是自动重载之前的值,继续计数,还是完成一次计数任务后,停止计数。通过配置 TIMx_CR1 的 OPM单脉冲模式 (One-pulse mode) 来选择:

中断

可以通过配置中断,来达到计数器上溢出时刻产生对应的中断


配置过程

1. 打开 TIM6 / TIM7 的时钟


2. 配置中断优先级 NVIC 并使能中断


3. 配置分频系数和计数器的达到溢出的上限数值


4. 启用自动重装载预装载


5. 选择auto reload模式


6. 选择更新源(全开)


7. 开启溢出中断


8. 使能定时器


代码

初始化部分

这里 72MHz 的时钟输入,预分频为 7200(7200 - 1,这里是 datasheet中描述的预分频计算方法),计数为10000次溢出,故产生的是 1s 的定时器:


#define TIM6_CNT    (10000 - 1)

#define TIM6_PSC    (7200 - 1)

static SK_TIM6_NVICConifg(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

 

 

    /* PE5/PE6 */

    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

 

void SK_TIM6_Init(void)

{   

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

 

    SK_TIM6_NVICConifg();

 

    /// Step 1 : Open TIM6&TIM7 Clock

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

 

    /// Step 2 : Set basic settings

    // Input CLOCK = 72MHz

    TIM_TimeBaseStructure.TIM_Period = TIM6_CNT;

    TIM_TimeBaseStructure.TIM_Prescaler = TIM6_PSC;

    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

 

    TIM_ARRPreloadConfig(TIM6, ENABLE);

 

    TIM_SelectOnePulseMode(TIM6, TIM_OPMode_Repetitive);

 

    TIM_UpdateRequestConfig(TIM6, TIM_UpdateSource_Global);

 

    TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);

 

    TIM_Cmd(TIM6, ENABLE);

}


中断处理部分

void TIM6_IRQHandler(void)

{

    static uint8_t cnt = 0;

    if (TIM_GetITStatus(TIM6, TIM_IT_Update))

    {

        TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

        if (!cnt)

        {

            SK_SetLedStatus(SK_LED_1, SK_LED_ON);

            cnt++;

        }

        else

        {

            SK_SetLedStatus(SK_LED_1, SK_LED_OFF);

            cnt--;

        }

    }

}

推荐阅读

史海拾趣

HSMC公司的发展小趣事

HSMC的项目进展迅速,按照规划稳步推进。公司的一期项目设计产能为月产4.5万片晶圆,并计划于2019年底投产。二期项目则采用最新的制程工艺技术,设计月产能同样为4.5万片,预计于2021年第四季度投产。这些项目的顺利推进,不仅提升了HSMC的产能规模,也进一步巩固了其在行业内的地位。

Analog Microelectronics GmbH公司的发展小趣事

武汉弘芯半导体制造有限公司(HSMC)于2017年11月在武汉市东西湖区临空港经济技术开发区正式成立。公司自成立之初便立下了宏伟的愿景——成为全球领先的CIDM(委托代工与芯片设计整合制造)晶圆厂之一。HSMC汇聚了来自全球半导体晶圆研发与制造领域的顶尖专家团队,致力于集成电路产业先进晶圆与封装制造技术的自主化,为我国电子科技业与芯片设计业贡献力量。

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司自创立之初,就专注于电源管理芯片的研发与生产。公司初期面临资金紧张、技术储备不足等挑战,但凭借对技术的执着追求和对市场的敏锐洞察,东科逐步在行业中崭露头角。公司创始人带领团队夜以继日地研发,成功推出了一系列具有竞争力的电源管理芯片产品,赢得了市场的认可。

Advantech公司的发展小趣事

随着公司产品的不断升级和市场需求的不断增长,东科半导体(DK)公司开始积极拓展国内外市场。公司加强与全球知名企业的合作,产品成功进入苹果、华为、OPPO等一线品牌的供应链。同时,东科还积极参加国际电子展会和论坛,展示公司的最新技术和产品,提升了公司的品牌知名度和影响力。

General Instrument Corp公司的发展小趣事
确认串行接口连接正确,数据传输无误。
安纳森(AnaSem)公司的发展小趣事

随着技术的不断成熟和市场的逐步扩大,安纳森开始将目光投向更广阔的全球市场。公司积极与全球各地的合作伙伴建立战略合作关系,共同开拓市场。同时,安纳森还设立了多个海外研发中心和销售网点,以便更好地了解当地市场需求,提供更贴近用户的产品和服务。这一系列的全球化布局,不仅提升了安纳森的品牌影响力,也为其未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

绝对精品的硬件设计方面资料!!!

感觉好的给我顶一下...HE HE...…

查看全部问答>

卢二都

图中的闸门脉冲发生器我想用下面的压缩包中的电路图,但对它有点不明白,麻烦知道的给我分析一下 …

查看全部问答>

五一期间有个嵌入式Linux开发体验班(免费一天)

《嵌入式Linux免费体验班》(1天) 今年5.1放假干嘛去?参加嵌入式Linux免费体验活动! ————————名额有限,限定12人,先报先得! 课程目标: 本课程针对嵌入式Linux开发的初学人员,能快速了解嵌入式Linux系统,了解嵌入式Linux ...…

查看全部问答>

请问在WINCE中如何实现打印呢?

我现在用的是WINCE5.0,一般的FRAMEWORK中有PRINTDIALOG之类的打印类提供,但是在WINCE5.0的FRAMEWORK中没有,现在不知道该如何实现打印,或者是否也可以通过调用API来实现呢. 其中打印机驱动已经提供. 望高人给予指点.谢谢先.…

查看全部问答>

STM32低功耗问题

我写了一段STM32低功耗的程序,采用RTC唤醒,但是发现总是不会醒来。而我一旦只要打开了DEBUG,在KEIL 调试时,如果我设置一下或是停止一下断点,就能够醒过来,奇怪: 我的代码如下: /**   * @brief  Main program. ...…

查看全部问答>

能否将LAUNCHPAD变成现实产品的访真器

试了LAUCHPAD2~3天,请教如何将LAUCHPAD来仿真自己实际做的产品,比如我用其中莫个引脚来做ADC电压检测,…

查看全部问答>

传感器技术在汽车上的应用有哪些?

传感器技术在汽车上的应用都哪些?简单举例说明一下。…

查看全部问答>

多功能调试测试助手-完整PCB工程包

多功能调试测试助手-完整PCB工程包   格式说明:protel99se 需要的朋友可以直接拿去制版,不过要注意器件的封装哦! 一、交流信号发生器(DDS直接频率合成):频率,相位,幅度可控 二、16*64点阵屏人机面板 …

查看全部问答>

玩转MSP-EXP430FR5969 LaunchPad 实用问答!

下面汇总了部分网友在TI 首届低功耗大赛中出现的一些问题。用到FR5969开发板的你如果也遇到一些问题,同时已经解决,请将问题及解决方法跟帖与大家分享,我将会汇总到一楼。 5969的供电出现的一些奇怪现象 https://bbs.eeworld.com.cn/thread-452 ...…

查看全部问答>

ADC0809可以不接二分频吗

求助求助,ADC0809的CLOCK引脚可以直接和51单片机的ALE脚相连,不接二分频吗…

查看全部问答>