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)
{
}
}
网友评论