stm32f103c8t6 在72m情况下还是比较准确的uS延时函数:
void delay_us(unsigned int Delay)
{
uint32_t tickstart = SysTick->VAL; //获取当前tick
uint32_t tickNum = 0;
uint32_t tickMax = SysTick->LOAD + 1;
uint32_t delay_usvalue = (tickMax / 1000) * Delay; //计算需要延时的tick
while(1)
{
uint32_t cur_tick = SysTick->VAL;
if (cur_tick > tickstart) //进行一次重载
{
tickNum = tickstart + (tickMax - cur_tick);
}
else //未进行过重载
{
tickNum = tickstart - cur_tick;
}
if (tickNum > delay_usvalue) //达到延时的tick数
{
return;
}
}
}