方式一:系统滴答定时器
优点:全系列通用,只需要将宏定义CPU_FREQUENCY_MHZ根据时钟主频修改即可。
缺点:系统滴答定时器是HAL库初始化的,且必须有HAL库初始化。
- #define CPU_FREQUENCY_MHZ 72 // STM32时钟主频
- void delay_us(__IO uint32_t delay)
- {
- int last, curr, val;
- int temp;
- while (delay != 0)
- {
- temp = delay > 900 ? 900 : delay;
- last = SysTick->VAL;
- curr = last - CPU_FREQUENCY_MHZ * temp;
- if (curr >= 0)
- {
- do
- {
- val = SysTick->VAL;
- }
- while ((val < last) && (val >= curr));
- }
- else
- {
- curr += CPU_FREQUENCY_MHZ * 1000;
- do
- {
- val = SysTick->VAL;
- }
- while ((val <= last) || (val > curr));
- }
- delay -= temp;
- }
- }
|