GD32STM32的一个好用的微秒延时函数
void DelayUs(unsigned int nus)
{
unsigned int time_sum = 0; /* 当前已经累计的时间 /
unsigned int time_exp; / 预期的累计时间 /
unsigned int time_old;
unsigned int time_now;
unsigned int reload = SysTick->LOAD; / 得到SysTick的自动重装载值 */
time_old = SysTick->VAL; /* 获取当前的计数器计数值 */
time_exp = nus * (SystemCoreClock / 1000000U);
while(1)
{
time_now = SysTick->VAL; /* 获取当前的计数器计数值 */
if(time_now != time_old)
{
if(time_now < time_old)
{
time_sum += time_old - time_now;/* 计算当前已经计时的时间 */
}
else/* 计数器重装载了 */
{
time_sum += reload - time_now + time_old;/* 计算当前已经计时的时间 */
}
time_old = time_now; /* 更新当前的时间节点 */
if(time_sum >= time_exp)
{
break;/* 延时结束 */
}
}
}
}