用stm32编写LED闪烁实验,为什么写完以后它不闪烁只是亮,如何来对延时函数初始化呢
时间: 2024-02-13 07:07:35 浏览: 38
LED不闪烁只是亮,可能是因为你的程序没有进行延时操作。在初始化延时函数时,你可以使用STM32提供的SysTick定时器来实现。具体操作步骤如下:
1. 在初始化函数中开启SysTick定时器,设置定时周期为1ms:
```
if (SysTick_Config(SystemCoreClock / 1000)) { // SystemCoreClock是系统时钟频率,这里设置定时周期为1ms
while (1);
}
```
2. 在延时函数中使用SysTick定时器实现延时:
```
void delay_ms(uint32_t ms) {
uint32_t tickstart = HAL_GetTick(); // 获取当前的系统时钟计数
while ((HAL_GetTick() - tickstart) < ms); // 等待直到时间到达
}
```
在上述代码中,`HAL_GetTick()`函数可以获取当前的系统时钟计数,通过计算时间差实现延时。
3. 在LED闪烁程序中调用延时函数:
```
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); // 点亮LED
delay_ms(500); // 延时500ms
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // 熄灭LED
delay_ms(500); // 延时500ms
```
在上述代码中,先点亮LED,然后延时500ms,再熄灭LED,再延时500ms,实现LED的闪烁效果。
注意:在使用SysTick定时器时,需要开启中断,并在中断处理函数中更新系统时钟计数。具体实现可以参考STM32提供的HAL库。