美文网首页
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