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

2019-11-07  本文已影响0人  imMazda
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)
  {

  }
}
上一篇下一篇

猜你喜欢

热点阅读