在使用单片机时,经常要使用到一定时间的延时,而对于像STM32F405RG这种单片机而言,一方面,由于Cortex-M3/Cortex-M4的主频比较高,如果使用for循环或者while循环,循环的变量非常之大,另一方面,使用SysTick实现,延时比较准确。延时程序如下所示:
void DelayMs(unsigned short Time)
{
SysTick->LOAD=(unsigned long)Time*21000;
SysTick->CTRL|=0x01;
while(!(SysTick->CTRL&(1<<16)));
SysTick->CTRL=0x00000000;
SysTick->VAL=0x00000000;
}
//us
void DelayUs(unsigned long Time)
{
SysTick->LOAD=Time*21;
SysTick->CTRL|=0x01;
while(!(SysTick->CTRL&(1<<16)));
SysTick->CTRL=0x00000000;
SysTick->VAL=0x00000000;
}
注意:使用MDK仿真时,仿真界面中时间不能正确反应延时的时间。
转载于:https://blog.51cto.com/chasingdreams/2382169