stm32f407流水灯,keli5实现代码
时间: 2025-06-04 13:25:56 浏览: 18
### STM32F407 Keil5 流水灯 示例代码
以下是基于STM32F407和Keil5实现流水灯功能的代码示例。该代码使用了HAL库,适用于基于标准外设库SPL的开发环境[^1]。
```c
#include "stm32f4xx_hal.h"
// 定义LED引脚
#define LED_PIN GPIO_PIN_5
#define LED_PORT GPIOA
// 初始化GPIO
void GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8; // 配置多个LED引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上拉/下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 设置输出速度为低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO
}
int main(void) {
HAL_Init(); // 初始化HAL库
GPIO_Init(); // 调用GPIO初始化函数
uint8_t sta = 0x01; // 初始状态为0x01
while (1) {
HAL_GPIO_WritePin(LED_PORT, sta, GPIO_PIN_SET); // 点亮当前LED
HAL_Delay(500); // 延时500ms
if (sta < 0x80) { // 如果当前状态小于0x80,则左移一位
sta <<= 1;
} else { // 否则重置为0x01
sta = 0x01;
}
}
}
```
上述代码实现了以下功能:
- 使用`HAL_GPIO_Init`函数初始化GPIO引脚[^2]。
- 在`main`函数中通过循环不断改变LED的状态,实现流水灯效果[^3]。
- 每次点亮一个LED后延时500毫秒,然后切换到下一个LED[^4]。
### 注意事项
- 在实际开发中,需要确保开发板的硬件连接正确,并根据具体的LED连接方式调整代码中的引脚定义。
- 如果使用其他开发环境或库(如标准外设库),需要相应修改代码结构和函数调用。
阅读全文
相关推荐


















