MCU延时实现——时钟摘取法
当采用OS时,SysTick定时器(24位,向下计数)作为OS的系统时钟,SysTick定时器不能被修改,如果想用SysTick定时器实现精确延时只能读取SysTick定时器中的计数值:
例如:delayUs(100) 延时100us;
1.在进入delayUs函数时计算达到100us延时需要的SysTick计数值是多少;比如:当前SysTick计数值为2000,100us延时后SysTick的计数值为 2000+100*108=12800; 如SysTick计数时钟为108MHz,1个时钟的时间为1/108000000s,即1/108000ms,1/108us,1us需要的计数次数为108,1ms需要的计数次数为108000;100us=108*100次;
2.在delayUs函数中循环读取SysTick定时器的计数值,当计数值大于12800后,延时时间到退出循环;
注意:此法不适合长时间的延时;当超SysTick定时器的最大计数值时要考滤计数器溢出前计数值,和溢出后计数值;
浙公网安备 33010602011771号