代码的功能是 控制 HC32F10x 开发板上的 GPIOB 5 号引脚,模拟 LED 闪烁,每 1.5 秒切换一次状态。以下是代码的优化和问题分析:
代码优化与问题分析
1. delay(u16 n) 函数的低效性
delay 使用 双层 for 循环 来进行延时,这种方式不精确,并且受编译器优化影响,可能会导致时间不稳定。
下面将使用 SysTick 定时器 进行精准延时,而不是 for 循环。
SysTick 延时实现(精准 1ms 计时)
#include "hc32f10x.h"
void SysTick_DelayMs(uint32_t ms) {
SysTick->LOAD = SystemCoreClock / 1000 - 1; // 1ms
SysTick->VAL = 0; // 清空计数器
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
while (ms--) {
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待计数结束
}
SysTick->CTRL = 0; // 关闭 SysTick
}
使用方式
c
复制
编辑
SysTick_DelayMs(1500); // 延时 1500ms
|