美文网首页
STM32使用SysTick实现us/ms级延时

STM32使用SysTick实现us/ms级延时

作者: imMazda | 来源:发表于2019-11-07 19:32 被阅读0次
    void udelay(uint32_t nus)
    {
      uint32_t tickStart, tickCur, tickCnt;
      uint32_t tickMax = SysTick->LOAD;
      uint32_t udelay_value = (SysTick->LOAD/1000)*nus;
    
      tickStart = SysTick->VAL;
      while(1)
      {
        tickCur = SysTick->VAL;
        tickCnt = (tickStart < tickCur) ? (tickMax+tickStart-tickCur) : (tickStart-tickCur);
        if (tickCnt > udelay_value)
          break;
      }
    }
    
    void mdelay(uint32_t nms)
    {
      uint32_t tickStart = HAL_GetTick();
      uint32_t wait = nms;
    
      if (wait < HAL_MAX_DELAY)
      {
        wait += (uint32_t)(uwTickFreq);
      }
      
      while ( (HAL_GetTick() - tickStart )< wait)
      {
    
      }
    }
    

    相关文章

      网友评论

          本文标题:STM32使用SysTick实现us/ms级延时

          本文链接:https://www.haomeiwen.com/subject/llzvbctx.html