一、定时器分类
1、滴答(系统)定时器:systick -- 内核提供
2、基本定时器:定时 --STM32
3、通用定时器:定时+PWM+输入捕获+编码 --STM32
4、高级定时器:通用定时器+死区+刹车(电机) --STM32
5、窗口看门狗,独立看门狗本质上也是定时器
二、系统定时器实现精准计时/定时
举个例子:
定时炸弹 300
什么时候减到0
更新一次数据的时间 t 300--299需要多长时间
1S更新多少次数据 f
t=1/f
重装载值 300
留给我跑的时间 : T=重装载值*t=重装载值/f
定时器重要概念:
重装载值, 计数频率 更新一次数周期
怎么配置能够延时是1ms呢?
ARM+Cortex-M3与Cortex-M4权威指南 -- 9.5章
三、 系统滴答定时器讲解 – 内核
处理器有一个24bit的定时器—SysTick,它从重装载值向下计数到0,然后在新的时钟边沿上,加载装载值到计数器,然后继续计数。
四、SysTick使用步骤
1. 选择时钟源
72M时钟
2、配置中断
寄存器
3、设置重装载值
定时器频率 f=72M=72000000HZ
更新一次数据的时间t=1/f=1/72000000s
(1)需要一个1ms的定时,重装载值填啥?
T=1ms=ARR*t
解出来 ARR=T/t=0.001s/(1/72000000s)=0.001*72000000=72000
(2)需要一个2ms的定时,重装载值填啥?
解出来 ARR=T/t=0.002s/(1/72000000s)=0.002*72000000=144000
(3)系统定时器最大定时周期:
T=2^24/f=2^24/72000000=0.23s (最多是24位)
五、使用SysTick定时器
若只想产生周期性的SysTick中断,最简单的方法就是使用CMSIS-Core函数SysTick_Config:
uint32_t SysTick_Confing(uint32_t ticks);
该函数将SysTick中断间隔设置为ticks,使能计数器使用处理器时钟(如果是72M就是72M,是30M就是30M)然后设置SysTick异常为最低优先级。
例如:(1)若要在30MHz的时钟频率下产生1KHz的SysTick异常(即产生1ms中断)则可以使用
SysTick_Confing(SystemCoreClock / 1000);
变量SystemCoreClock 是一个宏,系统内核时钟频率。
中断服务函数 SysTick_Handler(void)的触发频率就变成了1kHz(即1ms)。