SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断。控制工程代码中随处可见形如delay_ms()之函数。但是一直不清楚其内在机制。今天花时间研究了一下。
首先还是在数据手册上看一下SysTick寄存器的配置,如图:
寄存器说明
stm32的时钟源
选择外部时钟源时,则Systick时钟为HCLK /8
选择内核时钟源时,则Systick时钟为HCLK
延时编程原理
systick定时器是24位的递减计数器,设定初值并使能它后,它会把每个系统时钟周期计数器减1,
计数到0 时,将从RELOAD 寄存器中自动重装载定时器初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.
延时编程步骤
1.计算出产生1us 需要多少个时钟周期 fac_us
2.计算出RELOAD寄存器的值
也就是产生相应延时所需要的时钟周期数
RELOAD=fac_us * nus
3.开启计数
4.循环检测计数到0的标志位
5.清空计数器,关闭定时器
SysTick异常配置步骤
1对CTRL/LOAD/VAL三个寄存器进行配置
2初始化SysTick使用的时钟
3清除系统当前值,装入重装值
4使能SysTick,使