TIM定时中断
1. TIM定时器
TIM(Timer)定时器,定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。
16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。
不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
使用该外设前一定要看清楚片上是否存在这个外设!否则会不起作用!
对于STM32F103C8T6这款芯片,它内部拥有的定时器资源是TIM1到TIM4,也就是一个高级定时器和3个通用定时器,没有基本定时器。
通过使用主模式,可以将定时器的更新事件映射到触发输出(TRGO),直接触发DAC转换,避免频繁中断主程序,实现硬件自动化。
2. 定时器类型
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
3. 高级定时器
TIM1/TIM8。
4. 通用定时器
TIM2-5。
5. 基本定时器
基本定时器只能选择内部时钟,这根线可以认为是直接连到了输入端的CK_INT。而内部时钟的来源是RCC_TIMxCLK,这里的频率值一般都是系统的主频72MHz。所以通向时基单元的计数基准频率就是72兆。
首先是预分频器,他可以对这个72MHz的计数时钟进行预分频。
比如这个计算器写0,那就是不分频,或者说是一分频,这时候输出频率等于输入频率,等于72MHz。如果一分频器写一,那就是二分频;输出频率等于输入频率除以二等于36兆赫兹。如果写2就是3分频,输出,等于输入除以3,以此类推。
所以预分频器的值和实际的分频系数相差的一,即实际分频系数等于预分频器的值加1。这个预分泌器是16位的,所以最大值可以写65535,也就是65536分频。
预分频器的作用,就是对输入的基准频率提前进行分频。
计数器可以对预分屏后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1,这个计数器也是16位的,所以里面的值可以从0一直加到6535。如果再加的话,计数器就会回到零重新开始。
TIM6/TIM7。
6. 定时中断基本结构
7. 预分频器时序
计数器计数频率:
8. 计数器时序
计数器溢出频率:
8.1 计数器无预装时序
8.2 计数器有预装时序
9. RCC时钟树
高速时钟:一般供内部程序和主要外设使用。
低速时钟:一般供RTC、看门狗使用。
指向RTC的箭头,通往RTC,就是RTCCLK。RTCCLK有3个来源,第一个是OSC引脚接的HSE,外部高速晶振。
8MHz进来,通过128分频,可以产生RTCCLK信号。
8MHz的主晶振太快,所以需要分频!不提前分频,想要在后续分频,也分不到这么低的频率了。
OSC32的晶振是内部RTC的专用时钟,此晶振的值是指定为32.768kHz。
这个频率是比较合适的,基本上和RTC有关的晶振都是统一的数值。32768是2的15次方数,经过15位分频器的自然溢出,那就是1Hz的频率。
自然溢出,就不需要额外设计计数目标了。
第三路时钟源是LSI(内部低速RC振荡器),固定为40KHz,如果选择LSI当做RTCCLK,后续再经过40K的分频,得到1Hz的计数时钟。
但是,用这个时钟源做时钟只能作为一个备选方案,因为其精准度一般没有外部晶振高。
LSI还可以提供给看门狗。