在使用单片机时,经常要使用到一定时间的延时,而对于像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仿真时,仿真界面中时间不能正确反应延时的时间。