Freertos下微秒延时函数

 使用的是M0内核的芯片,没有DWT,定时器方法也不能使用,无法驱动一些靠硬件协议的传感器。

void delay_us(uint32_t nus)
{
    uint32_t ticks;
    uint32_t told,tnow,reload,tcnt=0;

    reload = SysTick->LOAD;                     //获取重装载寄存器值
    ticks = nus * (SystemCoreClock / 1000000);  //计数时间值   括号里的代表1us秒嘀嗒定时器的value会向下降多少值
    told=SysTick->VAL;                          //获取当前数值寄存器值(开始时数值)

    while(1)
    {
          tnow=SysTick->VAL;          //获取当前数值寄存器值
          if(tnow!=told)              //当前值不等于开始值说明已在计数
          {         

                 if(tnow<told)             //当前值小于开始数值,说明未计到0
                      tcnt+=told-tnow;     //计数值=开始值-当前值

                 else                  //当前值大于开始数值,说明已计到0并重新计数
                        tcnt+=reload-tnow+told;   //计数值=重装载值-当前值+开始值  (已
                                                  //从开始值计到0) 
                 told=tnow;                //更新开始值
                 if(tcnt>=ticks)break;     //时间超过/等于要延迟的时间,则退出.
          } 
    }     
}

有人使用的是滴答定时器,试验了下可行,故此记录一下。有没有别的方法,求教 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘零翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值