stm32 SysTick定时器
0x01 SysTick定时器简介
SysTick定时器实际上是一个24位递减定时器。
SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常。定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。
SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。
0x02 SysTick寄存器配置
有4个寄存器控制SysTick定时器。
- SysTick control and status register (STK_CTRL)
- SysTick reload value register (STK_LOAD)
- SysTick current value register (STK_VAL)
- SysTick calibration value register (STK_CALIB)
SysTick配置代码
SysTick配置函数在core_cm3.h里面有定义。(库函数手册里面的函数有的已经失效了)
#include "bsp_systick.h"
unsigned int TimingDelay; //在头文件声明 extern unsigned int TimingDelay;
void SysTick_Configuration(void)
{
while (SysTick_Config(72)); //72为重装载值,72*(1/72Mhz)=1us,每隔1us进入异常中断
SysTick->CTRL &= ~(1<<0); //暂时初始化后关闭SysTick,使用前开启
}
void Delay_us(unsigned int n)
{
TimingDelay = n;
SysTick->CTRL |= (1<<0); //开启SysTick
while (TimingDelay); //当TimingDelay减为0时,延时结束
SysTick->CTRL &= ~(1<<0); //关闭SysTick
}
SysTick中断函数
void SysTick_Handler(void)
{
if (TimingDelay != 0) //每进一次中断TimingDelay减1,相对于减1us
TimingDelay--;
}