• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32 HAL库实现精确微秒级别延时?

91cadc4ef00cb4d9 2018-10-25 浏览量:3470

STM32 HAL库实现精确微秒级别延时?

1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 实现微秒延时,可以使用定时器。但这个定时器中断万万不可一直开启。否则频繁地进入中断会影响整体运行效率。可以选择在需要延时的时候开启定时器,延时结束关闭。

    更短的延时,只能靠执行空指令来实现了。知道MCU的主频,就可以计算出一个单指令周期耗费的时间。

    for(int i = n; i > 0; --i);

    类似这样的循环,只要选择恰当的n值,就能完成精确延时。

    • 发布于 2018-10-25
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:10
  • HAL库函数中有延时函数HAL_Delay();进行毫秒级别的延时,但是在实际的开发中编写时序时有时需要进行较为准确的微秒级别延时像SSI协议接口等,本文章采用一个通用定时器的方式实现微秒级别的延时,而不采用滴答定时器是由于HAL库函数中很多地方需要使用滴答定时器进行超时判断,更改滴答配置恐引发意外,另外传统的for循环延时不太准确。
    • 发布于2018-10-25
    • 举报
    • 评论 0
    • 1
    • 0

  • 建议你使用逻辑分析仪或者是示波器去检测一个引脚的电平,然后你在程序中调试出一个你所需要的频率。不过这样的情况比较繁琐,你的程序整体执行情况对这个延时有一定的影响。
    • 发布于2018-10-25
    • 举报
    • 评论 0
    • 1
    • 0

  • 用定时器可以精确控制延时,一般都用系统滴答定时器
    • 发布于2018-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • hal 库没有 us 级别延时,有 HAL_Delay,是毫秒级延时。

    hal 库是基于心跳为 1000 的 systick 延时,最小是1ms,可以自己启用timer实现 us 级

    • 发布于2018-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • HAL库里面的延时是毫秒级的,要想实现微秒级延时的自己用定时器写延时。只有准确性取决于定时器的准确性
    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 要精确就选用定时器,软件延时一般都会有比较大的误差的
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 用systick就可以了,不过前提是你要用外部高频时钟源(HSE),这样systick才准。

    • 发布于2018-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个只能用while --这种,但是那个数要慢慢算出来,因为微秒级别的延时需要考虑到代码执行需要消耗的时间
    • 发布于2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个要用你的系统滴答定时器,这个可以做到
    • 发布于2018-11-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32 HAL库实现精确微秒级别延时?