STM32一个简单有效精确的延时方法

2019-12-14 12:19发布

           看到有些人延时还整定时器,for循环里面放__NOP()就好了,一个__NOP()就是一个时钟周期,比如72MHZ的时钟,要放72个__NOP();延时一次就是1us,精确可靠简单
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
lionliu
1楼-- · 2019-12-15 23:02
void delay_us(uint32_t t)
   {uint32_t i;
    for(i=0;i<t;i++)
      {__NOP();....}
  }; 实际最长可延时4千多秒,算算就知道了,我试验过18b20,dht11,延时越长越不精确,但是一般最长也就几个毫秒吧,精度绝对够用了,具体误差多少,就要研究汇编代码了
lionliu
2楼-- · 2019-12-16 03:28
     中断的话,用定时器也有中断的问题啊,因为有抢占的问题
lionliu
3楼-- · 2019-12-16 03:42
 精彩回答 2  元偷偷看……
w282529350
4楼-- · 2019-12-16 07:42
lionliu 发表于 2018-9-25 15:43
中断的话,用定时器也有中断的问题啊,因为有抢占的问题

定时器的中断不会产生累积误差
wctmdgcd
5楼-- · 2019-12-16 09:41
不同的应用场景有不同的写法,像达拉斯协议的延时,还用定时器来延时,是不是麻烦了点。
carefree1986
6楼-- · 2019-12-16 10:46
1US的话用nop还可以,大于50us还是计算systick的计数值比较靠谱

一周热门 更多>