[STM32F0] 实现us延时的方法

[复制链接]
iyoum 发表于 2020-9-9 17:16 | 显示全部楼层
一般对时间要求高的都用计时器中断来做了
一路向北lm 发表于 2020-9-10 08:49 | 显示全部楼层
uytyu 发表于 2020-9-9 17:15
通过循环做减法来实现延时

用systick比较好
brucewoo 发表于 2020-9-10 09:00 | 显示全部楼层
本帖最后由 brucewoo 于 2020-9-10 09:01 编辑

给你个参考思路,这是我自己使用的代码


  1. #define SYSTICK_PerUs        (SystemCoreClock / 1000000)                                                                //每us多少Tick (72M)

  2. void Duino_DelayUs(uint32_t us)
  3. {
  4.         u32 count = 0;
  5.     u32 ticks = SYSTICK_PerUs * us;                                                                //要经历多少tick
  6.     u32 oldVal = SysTick->VAL;                                                                        //记录开始计数器VAL        
  7.     u32 now = oldVal;

  8.         while(1)
  9.         {
  10.                 now = SysTick->VAL;
  11.                 if(oldVal>= now)
  12.                 {
  13.                         count += (oldVal - now);                                                        //可能没倒数完过
  14.                 }
  15.                 else
  16.                 {
  17.                         count += (oldVal + SYSTICK_DEFAULT_RELOAD- now);        //肯定倒数完过
  18.                 }
  19.                 if(count >= ticks)
  20.                 {
  21.                         return;
  22.                 }
  23.                 oldVal = now;                                                                                        //更新oldVal值
  24.     }
  25.         
  26. }
勇敢的大白菜 发表于 2020-9-10 14:46 | 显示全部楼层
为什么systick函数来做呢?
 楼主| 734774645 发表于 2020-9-22 19:20 | 显示全部楼层
勇敢的大白菜 发表于 2020-9-10 14:46
为什么systick函数来做呢?

这个定时器就是为时间节奏用的。
观海 发表于 2020-10-10 12:03 | 显示全部楼层
非常实用的办法
guanjiaer 发表于 2020-10-10 12:04 | 显示全部楼层
感谢楼主的分享
heimaojingzhang 发表于 2020-10-10 12:06 | 显示全部楼层
brucewoo 发表于 2020-9-10 09:00
给你个参考思路,这是我自己使用的代码

代码非常不错啊
keaibukelian 发表于 2020-10-10 12:07 | 显示全部楼层
精确度如何确认呢
labasi 发表于 2020-10-10 12:08 | 显示全部楼层
正好拿来用一用
 楼主| 734774645 发表于 2020-10-10 19:18 | 显示全部楼层
这样就中断太频繁,使用完,可以恢复设置。
小灵通2018 发表于 2020-10-10 19:20 | 显示全部楼层
简单的可以用for循环,或者while循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部