首页 理论教育 STM32基本定时器使用

STM32基本定时器使用

时间:2023-10-21 理论教育 版权反馈
【摘要】:默认频率为42MHz,因此基本定时器的时钟频率最大为84MHz。若设置TIMPRE位为1,则基本定时器的时钟等于APB1时钟。图6-13基本定时器框图2.基本定时器的寄存器基本定时器计数过程主要涉及三个寄存器,分别是计数器寄存器、预分频器寄存器和自动重载寄存器。图6-14基本定理器工作时序图TIMx_PSC预分频数值是0时,代表1分频;是1时,代表2分频;以此类推。

STM32基本定时器使用

基本定时器的功能有限,用于基本定时或驱动数模转换器(DAC)。TIM6和TIM7为两个基本定时器,两者功能完全一样,所用资源彼此完全独立,且可以同时使用。

基本定时器(TIM6和TIM7)包含:16位自动重载递增计数器;16位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),预分频系数介于1和65536之间,可用于触发DAC的同步电路。

1.定时器基本时钟的确定

基本定时器的结构如图6-13所示。根据以往经验,使用定时器必须解决时钟源的问题。基本定时器时钟只能来自内部时钟,而高级控制定时器和通用定时器还可以选择外部时钟源,或者选择直接来自其他定时器等待模式。从表6-3查到基本定时器连接的是APB1总线时钟,而APB1总线时钟频率最大为42MHz。我们可以通过设置RCC专用时钟配置寄存器(RCC_DCKCFGR)的TIMPRE位来设置所有定时器的时钟频率,一般设置该位为默认值0,即TIM6CLK和TIM7CLK为APB1总线时钟的两倍。默认频率为42MHz,因此基本定时器的时钟频率最大为84MHz。若设置TIMPRE位为1,则基本定时器的时钟等于APB1时钟。基本时钟称为CK_PSC,是基本定时器的时钟源,如图6-13所示。

图6-13 基本定时器框图

2.基本定时器的寄存器

基本定时器计数过程主要涉及三个寄存器,分别是计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)和自动重载寄存器(TIMx_ARR)。这三个寄存器设置的值都是16位有效数字,即设置值的范围为0~65535。

在定时器使能(CEN置1)时,计数器COUNTER根据定时器脉冲频率向上计数,即每来一个计数脉冲,TIMx_CNT的值(TIMx_CNT的默认值为0)就加1。当TIMx_CNT的值与TIMx_ARR的设定值相等时,计数器则自动生成事件并自动将TIMx_CNT清0,然后再自动重新开始计数,重复以上过程,实现周期性定时。

与所有的定时器一样,定时时间由计数脉冲个数与计数时钟周期决定,基本定时器只要设置好定时器时钟(APB1、TIMPRE与预分频决定)和TIMx_ARR寄存器的值就可以设定定时时间了。TIMx_CNT的值递增至与TIMx_ARR的值相等,称为定时器上溢。

如图6-13所示,定时器的基本时钟要经过预分频才到达计数器。分频值由预分频器寄存器(TIMx_PSC)决定,分频系数范围为1~65536。最终到达定时计数器的时钟称为计数器时钟CK_CNT,这是定时器最终用以计数定时的时钟。(www.xing528.com)

由于TIMx_PSC有缓冲,因此我们可对其进行实时更改,随时得到不同的定时时间。而新的预分频比将在下一更新事件发生时被采用。例如,将预分频器PSC的值从1改为4,原来是1分频,CK_PSC和CK_CNT频率相同,向TIMx_PSC寄存器写入新值时,并不会马上更新CK_CNT输出频率,而是等到更新事件发生时,把TIMx_PSC寄存器的值更新到缓冲寄存器中,使其真正产生效果。更新为4分频后,在CK_PSC连续出现4个脉冲后CK_CNT才产生一个脉冲,图6-14所示为CK_PSC、CK_CNT、计数器寄存器、事件更新等的时序图。

图6-14 基本定理器工作时序图

TIMx_PSC预分频数值是0时,代表1分频;是1时,代表2分频;以此类推。

3.基本定时器定时周期的计算

基本定时器定时周期的计算公式如下:

定时周期=CK_CNT周期×计数值

从APB1时钟开始到预设分频后最终形成CK_CNT时钟,计算CK_CNK的周期,首先要看APB1时钟频率。假设默认时钟频率是42MHz。如果不改RCC_DCKCFGR的TIMPRE位,默认得到CK_PSC的时钟为84MHz。若要使CK_CNT的周期为1μs,时钟频率应该为1MHz。预分频数可以设置为84分频,即TIMx_PSC=(84-1)。为什么要设置得如此复杂呢?其实ST也是为了方便程序员,因为默认不改变设置,CK_PSC的时钟一般都是84MHz,如果要得到希望的CK_CNT周期,只需改变预分频数值即可,比如要得到1ms的CK_CNT周期,设置TIMx_PSC=(84000-1)。

有了计数周期,计算计数值就很简单了,即计数值=定时周期/CK_CNT周期。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈