SysTick—系统定时器是属于ARM内核中的一个外设,内嵌在NVIC中,
一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK。
SysTick—系统定时有4个寄存器,如下图,详细参考CM4内核编程手册(英文)
有的时候程序需要用比较精确的延时,所以编写一个精确的延时程序非常有必要,特别是在写一些对时序要求比较高的程序,比如模拟的SPI、IIC,STM32的硬件IIC和SPI 我用的不多,没怎么搞过。
一般的延时有纯软件延时、定时器延时、定时器中断延时。
1、软件延时由于ARM内核多级流水线的指令执行方式,比较难算出精确的延时时间。
以下两种较为精确
2、定时器延时
3、定时器中断延时
这次用了SysTick定时器分别尝试了定时器和定时器中断两种定时方法。效果差不多,感觉误差比想象中大了那么一点点。
定时器延时10us,IO口波形如下:
定时器延时1s,IO口波形如下:
定时器中断延时10us,IO口波形如下:
定时器中断延时1s,IO口波形如下:
看波形感觉都差不多,定时器中断延时和定时器延时。都可以用,效果么就是闪灯咯,blinking blinking blinking |