首先感谢
首先感谢江科大老师的STM32视频教程,真的简单易懂!十分推荐!
TIM定时器中断和EXTI外部中断的区别
EXTI是外部中断,是通过外部情况作为触发,当产生高低电平变化时就执行中断;
TIM定时器是靠内部中断,当计数器计到一定值后,就发送高电平,然后执行中断。
时基单元
以通用定时器举例,如上图所示。
什么是预分频器
将72Mhz的主频进行分频,因为72Mhz意味着1秒通过72000000个波形,即有72000000个上升沿通过,而计数器的最大计数值为65535,每一个上升沿记一次数,最大计数65535,若寄存器没有设置值,则默认计数到65535计数清零。所以为了让计数值变慢,就要对主频进行分频,预分频器的分频原则如下:
0 | 不分频 |
1 | 分成两个频为:36MHZ |
2 | 分成三个频为:12MHZ |
自动重装载寄存器
自动重装载寄存器的作用是给计数器一个计数终点值,如果计数器计到了终点值,则计数器清零
分频器是怎么分频的
CK_CNT是分频后的频率,CK_PSC是主频时钟,PSC是预分频值,这里+1是因为算法。预分频器的工作本质是如果预分频器的值为0,则主频时钟怎么变,就怎么变,如果预分频器的值设为1,则意味着在相邻的0之间插入个1,是0则有波形,不是0就没有波形。预分频值为2,则意味着在相邻的0之前插入1、2,是0则有波形,不是0就没有波形,所以就相当于通过在0与0之间加入非0数字从而实现延时。关系如下:
0 | 0000000000 |
1 | 0101010101 |
2 | 0120120120 |
如何计算自己要计数的间隔
这是官方的计算方法:
这是我的计算方法:
ARR表示自动重装值,预分频器减1是因为当值为0时,预分频器不分频,而ARR为什么要减1呢?因为ARR是从0开始计数的,从0计到10要计数11次,所以为了便于理解,所以减1。就比如,当预分频系数为7200,要1s计一次数的话,就要让ARR为10000,但此时ARR其实是计数了10001次的,实际上只要计到9999就可以了。