蓝桥杯HAL库LED流水灯
时间: 2025-02-11 17:06:28 浏览: 34
### 蓝桥杯 HAL库 LED流水灯 示例代码 教程
#### 使用STM32 HAL库实现LED流水灯效果
为了实现在蓝桥杯竞赛中的LED流水灯效果,可以利用STM32微控制器及其HAL库来编写程序。具体来说,通过控制GPIO端口的状态变化,可以让连接到这些端口上的LED按照预定顺序点亮和熄灭。
在初始化阶段,需要配置好用于驱动LED的GPIO引脚,并设置它们的工作模式为输出。对于具体的硬件平台而言,假设使用的是基于STM32系列MCU开发板,则可以通过如下方式完成基本配置:
```c
// 初始化 GPIO 引脚作为输出
void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOC_CLK_ENABLE(); // 启用 GPIOC 时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 配置 PC0 到 PC7 为输出 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 |
GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
```
接下来,在主循环中定义一个函数用来执行实际的流水灯光效逻辑。这里采用简单的延时方法来模拟不同LED之间的切换时间间隔。每次只有一位有效(即只有一个LED处于导通状态),其余均为高阻态或关闭状态。
```c
#include "stm32f1xx_hal.h"
#define DELAY_MS(x) HAL_Delay(x)
int main(void)
{
HAL_Init();
MX_GPIO_Init();
uint8_t i;
while (1)
{
for(i=0;i<8;i++)
{
// 设置PC[i] 输出低电平使对应的LED亮起
HAL_GPIO_WritePin(GPIOC, GPIO_Pin_All^(1<<i), GPIO_PIN_RESET);
// 延迟一段时间让肉眼可见光的变化
DELAY_MS(200);
// 清除当前位并准备下一个周期
HAL_GPIO_WritePin(GPIOC, GPIO_Pin_All^(1<<i), GPIO_PIN_SET);
}
}
return 0;
}
```
上述代码片段展示了如何借助于STM32 HAL库创建一个基础版本的LED流水灯应用程序[^1]。此程序会依次点亮八个LED,形成流动的效果;当所有LED都已遍历完毕后重新回到起点继续下一轮操作。
阅读全文
相关推荐


















