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 日

STM32 学习 Day01:开发环境配置与面包板接线踩坑

STM32 学习第一天:配置开发环境、熟悉 ST-Link 调试器、学面包板接线。技术内容不多,但接线的两个坑值得记下来。 一、完成内容 配置 STM32 开发环境 熟悉 ST-Link 调试器使用 学习面包板接线基础 二、挫折与踩坑 挫折 1:供电原理不懂 不知道最小系统板如何为面包板供电 浪费大量时间在接线上,LED 一直不亮 教训:先搞清楚供电回路,再动手接线 挫折 2:接线思维误区 误认为面包板格子位置是唯一的对应关系 反复检查接线,始终找不到问题 顿悟:接线要看最小系统板引脚图,不是看面包板格子 这个错误卡了很长时间,一度怀疑开发板坏了 三、收获 ST-Link 调试器接线已熟练掌握 开发板接线基本熟悉 第一天的核心体会:接线问题比想象中更消耗时间——供电回路和引脚对应关系没搞清楚之前,LED 不亮根本无从判断是哪里的问题。

2026 年 9 月 7 日