郞性人生

导航

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定时器的最大计数值时要考滤计数器溢出前计数值,和溢出后计数值;

 

posted on 2019-01-29 14:34  郞性人生  阅读(700)  评论(0)    收藏  举报