STM32 GPIO 入门三连:点亮 LED、流水灯与蜂鸣器

环境配好、接线踩坑之后,接下来就是让外设动起来。这组实验全部围绕 GPIO 输出:先点亮一颗 LED,再扩展成八路流水灯,最后用同样的思路驱动蜂鸣器。三个实验的代码都在工程的 User\main.c 里(如 3-1点亮LED灯、3-2流水灯、3-3蜂鸣器)。 一、点亮第一颗 LED 之前两天都在跟接线较劲,怀疑人生;当 LED 终于亮起来的时候,成就感爆棚。核心教训:嵌入式开发,硬件接线和软件一样重要。 // PA0 配置为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 低电平点亮 LED GPIO_ResetBits(GPIOA, GPIO_Pin_0); 关键理解: GPIO 配置:推挽输出模式,速度 50MHz LED 驱动:低电平有效,GPIO_ResetBits 拉低点亮 当前状态:常亮,while(1) 为空 二、流水灯:PA0-PA7 八个 LED 在单颗 LED 的基础上,实现 PA0-PA7 八个 LED 流水灯效果。 // 配置 GPIOA 所有引脚为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // 一次性配置所有引脚 GPIO_Init(GPIOA, &GPIO_InitStructure); // 流水灯核心:GPIO_Write 一次写入 16 位数据 while(1) { GPIO_Write(GPIOA, ~0x0001); // 0x0001取反=0xFFFE,PA0低电平点亮 Delay_ms(300); GPIO_Write(GPIOA, ~0x0002); // PA1点亮 Delay_ms(300); GPIO_Write(GPIOA, ~0x0004); // PA2点亮 // ... 依次类推到 PA7 } GPIO 操作函数对比 函数 作用 使用场景 GPIO_ResetBits 单引脚拉低 单个LED控制 GPIO_SetBits 单引脚拉高 单个LED控制 GPIO_WriteBit 按位设置 单引脚精确控制 GPIO_Write 16位整体写入 多引脚同时控制 位操作技巧 ~0x0001 = 0xFFFE → PA0 低电平(点亮),其余高电平(熄灭) ~0x0002 = 0xFFFD → PA1 低电平(点亮) 位左移:0x0001 << n 可以简化代码 优化思路 当前代码是 8 行重复,可以用循环 + 移位简化: ...

2026 年 9 月 8 日