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

stm32单片机,怎么精确延时,微秒级。

846ed4e9e9f1a3e1 2018-08-31 浏览量:3733
stm32单片机,怎么精确延时,微秒级。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • /*******************************************************************************
    * 函 数 名         : delay_us
    * 函数功能           : 延时函数,延时us
    * 输    入         : i
    * 输    出         : 无
    *******************************************************************************/
    void delay_us(u32 i)
    {
        u32 temp;
        SysTick->LOAD=9*i;         //设置重装数值 72MHZ时
        SysTick->CTRL=0X01;         //使能,减到零是无动作,采用外部时钟源
        SysTick->VAL=0;                //清零计数器
        do
        {
            temp=SysTick->CTRL;           //读取当前倒计数值
        }
        while((temp&0x01)&&(!(temp&(1<<16))));     //等待时间到达
        SysTick->CTRL=0;    //关闭计数器
        SysTick->VAL=0;        //清空计数器
    }
    • 发布于 2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:17
  • 定时器啊,使用for延时是不准确的。
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • us的延时也没有意义啊。你可以用定时器产生可是人家滴答定时器在HAL库里都是以毫秒为单位。如果不太重要的地方还是用循环语句吧
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 微秒级精确延时可能要用汇编指令操作了。
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 要求比较高就只能用定时器了!软件延时不准,特别是循环语句!
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • stm32微秒级精确延时有两种方法,systick定时器或者直接用系统的timer定时器,systick定时器在原子的例程中非常常用,那个的delay_us就是。

    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 1、systick定时器

    2、汇编延时_NOP_() 

    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 定时可以到微秒级,通过systick定时器
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 微秒最好用定时器,timer 或者systick 定时器都行。最好调用库函数的延时,这样切换平台或者升级方便。

    最好不要用空循环,因为太依赖代码了,优化就可能把延时破坏掉

    • 发布于2018-09-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 用定时器进行延时会比较准确,可以参考正点原子的延时函数,

    正点原子里用了滴答定时器,可以帮你省下一个定时器

    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 用那种通用定时器,它的最小时间单位可以到us的,但是中断处理那里要额外花费一点时间
    • 发布于2018-09-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 用定时器来进行定时,根据定时器的中断来延时
    • 发布于2018-09-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 微妙可以使用定时器,利用定时器中断可以实现微妙级别,再低则可以使用cpld进行延迟
    • 发布于2018-09-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 用定时器来定时会精准一点,你可以使用定时器中断
    • 发布于2018-09-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议你用定时器来定时,这样定时比较精确
    • 发布于2018-09-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以使用定时器来做。也可以使用循环做
    • 发布于2018-09-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 微妙级别的延时通常使用定时器来实现,根据主频计算重装载值,定时产生中断
    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32单片机,怎么精确延时,微秒级。