1. 从零开始:认识你的玄武F103开发板与LED控制
大家好,我是老张,一个在嵌入式领域摸爬滚打了十多年的工程师。今天咱们不聊那些高深的理论,就来点实实在在的干货——用一块非常经典且性价比极高的玄武F103开发板,实现一个既好玩又实用的功能:让四个小LED灯听我们的话,既能像跑马灯一样顺序点亮,又能像小太阳一样同时全亮,而且只需要按下一个按键,就能在这两种酷炫模式之间自由切换。
如果你刚拿到开发板,看着一堆引脚和芯片有点发懵,别担心,这太正常了。我记得我第一次接触STM32的时候,感觉就像面对一个陌生的城市,不知道从哪条路开始走。但请相信我,一旦你点亮了第一个LED,那种“我掌控了硬件”的成就感,会让你立刻爱上嵌入式开发。我们今天要做的这个项目,就是带你走进这个城市的第一条主干道。
那么,这个项目到底能做什么呢?简单说,就是多模式LED控制与按键切换。听起来是不是有点像你家里那种可以切换不同闪烁模式的智能彩灯?没错,原理是相通的。我们通过编程,让微控制器(MCU)的GPIO(通用输入输出)引脚输出不同的电平信号,来控制LED的亮灭。再通过读取另一个GPIO引脚(连接着按键)的状态,来判断我们的指令,从而实现模式的切换。这几乎是所有嵌入式设备的“基本功”,从智能台灯到工业控制面板,底层逻辑都离不开它。
这个实战案例非常适合正在学习STM32的初学者,或者任何想从单片机(比如51、Arduino)过渡到更强大ARM Cortex-M3内核MCU的朋友。你不需要有深厚的电子电路基础,只要跟着我的步骤,准备好开发板、一根USB线、几根杜邦线,还有一颗愿意动手的心,就足够了。我会把每一步的原理、可能踩的坑、以及我调试时的“土办法”都分享给你,保证你不仅能做出来,还能真正理解背后的“为什么”。
2. 硬件连接:给开发板“接上线”
动手之前,我们得先搞清楚硬件怎么连。很多新手朋友代码写得挺溜,一上硬件就傻眼,问题往往就出在连接上。咱们一步步来,把电路理清楚。
玄武F103开发板的核心是一颗STM32F103系列的微控制器,它上面有好多组GPIO口,比如GPIOA, GPIOB, GPIOC等等。我们今天主要用到的是GPIOB口来控制LED,以及GPIOE口来读取按键。为什么选这两个?一方面是开发板设计时通常把这些外设引到了方便连接的排针上,另一方面也是个人习惯,B口和E口足够我们完成这个实验了。
先看LED部分。根据原始文章的提示,我们要控制的是PB5、PB6、PB7、PB10这四个引脚。在开发板上,找到标有“PB5”、“PB6”等字样的排针孔。LED电路一般是这样的:开发板上的LED,阴极(负极)已经通过一个限流电阻接到了GND(地),阳极(正极)则接到了我们的GPIO引脚上。所以,当我们让GPIO引脚输出一个高电平(比如3.3V)时,LED两端没有电压差,灯就灭了;当我们输出低电平(0V)时,电流从3.3V电源经限流电阻、LED、流入我们的引脚到地,灯就亮了。这种连接方式叫做“低电平点亮”。接线时,你只需要用杜邦线,将这四个引脚分别连接到LED模块对应的信号输入端即可,如果开发板已经集成了LED,那这一步甚至都可以省了,直接查原理图确认引脚对应关系就行。
然后是按键部分。我们用到的是KEY1,它连接在PE3引脚上。按键的电路需要特别注意:原始文章里提到了,KEY1的一端接在了GND上,另一端接到了PE3。如果我们将PE3配置为“下拉输入”(内部电阻拉到地),那么不按按键时,PE3读到的是低电平;按下按键时,PE3直接接到GND,读到的还是低电平——这就无法区分按下和松开了!所以,我们需要将PE3配置为“上拉输入”。这样,不按按键时,内部上拉电阻将PE3拉到高电平(约3.3V);按下按键时,PE3被强行拉到GND,变为低电平。我们就通过检测这个从高到低的变化,来判断按键是否被按下。
硬件连接总结一下:
- LED控制线:确保PB5, PB6, PB7, PB10正确连接到你的LED电路(或确认板载LED对应这些引脚)。
- 按键检测线:确保KEY1(对应PE3)的电路是上拉输入模式,通常开发板已经设计好,我们只需在软件中配置即可。
- 电源:用USB线给开发板供电,一切准备就绪。
3. 软件环境搭建与第一个程序:点亮一颗LED
硬件连好了,接下来就是软件部分。我推荐使用Keil MDK(也就是大家常说的Keil5)作为集成开发环境,它对STM32的支持非常成熟,资料也多。当然,如果你喜欢用STM32CubeIDE或者VSCode+PlatformIO,也完全没问题,原理都是相通的。这里我以Keil为例,假设你已经新建好了工程,并正确添加了STM32F1的标准外设库(StdPeriph_Lib)。
万事开头难,咱们先从最简单的开始:只点亮PB5这一个LED。别小看这一步,它能帮你验证开发环境、下载流程、硬件连接全部是否正确。原始文章里给出的示
949



被折叠的 条评论
为什么被折叠?



