100 篇文章精通 STM32F103(第 1 篇):入门须知与环境搭建,点亮你的第一盏 LED
这一篇我们完成了 3 件核心事:找到main.c中的main函数,定位到while (1)while (1)// 1. 点亮LED:PA5引脚输出高电平(GPIO_PIN_SET表示高电平)// 2. 延时500ms(HAL库自带延时函数,单位:毫秒)// 3. 熄灭LED:PA5引脚输出低电平(GPIO_PIN_RESET表示低电平)// 4. 延时500ms:控制 GPIO 引脚电平的函数;G
一、系列定位与整体规划
在正式开始前,先明确这个系列的核心目标:“用最落地的方式,让你从‘不会’到‘精通’”。整个系列会分为 5 个阶段,循序渐进:
- 基础入门阶段(第 1-20 篇):硬件认知、环境搭建、GPIO、时钟、中断等核心基础;
- 外设实战阶段(第 21-50 篇):UART、SPI、I2C、ADC、定时器、PWM 等常用外设的原理与实战;
- 进阶技能阶段(第 51-70 篇):RTOS(FreeRTOS)、DMA、低功耗、BootLoader 等进阶技术;
- 综合项目阶段(第 71-90 篇):温湿度监测、电机控制、物联网网关、小型仪器等完整项目开发;
- 优化与拓展阶段(第 91-100 篇):代码优化、调试技巧、STM32F103 与其他芯片的联动(如 ESP8266、OLED)。
每篇文章都会包含 “原理讲解 + 实操步骤 + 代码分析 + 常见问题”,确保你不仅 “会做”,更 “懂为什么这么做”。
二、STM32F103:为什么它是入门首选?
在开始实操前,我们先搞懂:STM32F103 到底是什么?为什么几乎所有嵌入式入门教程都绕不开它?
1. STM32F103 的核心参数
STM32F103 是 ST(意法半导体)推出的基于ARM Cortex-M3 内核的 32 位 MCU,主打 “高性价比” 和 “易上手”,核心参数如下(以最常用的STM32F103C8T6
为例):
- 内核:ARM Cortex-M3,最高主频 72MHz;
- 存储:64KB Flash(程序存储)、20KB RAM(数据临时存储);
- 引脚:48 脚(LQFP48 封装,面包板可直接焊接);
- 外设:2 个 UART、2 个 SPI、1 个 I2C、3 个定时器、1 个 ADC(12 位)、37 个 GPIO;
- 供电:2.0V-3.6V(可直接用 USB 5V 转 3.3V 供电)。
2. 为什么选它入门?
- 生态成熟:资料、教程、开源项目多到 “用不完”,遇到问题能快速找到解决方案;
- 成本低:核心板(如 STM32F103C8T6)价格仅 10-20 元,搭配下载器总预算不超过 50 元;
- 难度适中:既比 8 位 MCU(如 51 单片机)功能强,又比高性能 STM32(如 F4、H7 系列)简单,刚好适合入门;
- 应用广:工业控制、智能家居、消费电子等领域都有它的身影,学会后能快速落地项目。
三、学习 STM32F103 的软硬件准备
工欲善其事,必先利其器。这一部分我们直接搞定 “需要买什么” 和 “需要装什么”。
1. 硬件清单(新手入门版)
硬件名称 | 作用 | 推荐型号 / 规格 | 参考价格 |
---|---|---|---|
STM32F103 核心板 | 核心运算单元 | STM32F103C8T6(48 脚) | 10-20 元 |
ST-Link V2 下载器 | 给核心板烧录程序 + 调试 | 原版 / 兼容版均可 | 15-30 元 |
LED 灯 + 限流电阻 | 实操 “点亮 LED” 用 | LED(任意颜色)、1kΩ 电阻 | 5 元(100 个) |
杜邦线 | 连接硬件 | 公对公、公对母各 10 根 | 5 元 |
面包板(可选) | 临时搭建电路,避免焊接 | 400 孔基础款 | 10 元 |
万用表(可选) | 排查接线、电压问题 | 基础款数字万用表 | 30-50 元 |
注意:新手建议直接买 “STM32F103C8T6+ST-Link” 套装,价格更划算(约 30 元),还会送杜邦线和 LED。
2. 软件安装(官方免费工具)
我们用 ST 官方推荐的STM32CubeIDE(集成开发环境),它包含了 “代码生成 + 编译 + 烧录 + 调试” 全流程,无需额外安装其他工具,对新手最友好。
安装步骤(以 Windows 系统为例):
-
下载 STM32CubeIDE进入 ST 官网下载页(点击直达),选择 “Windows” 版本(如
stm32cubeide_1.14.0_win64.exe
),需要注册 ST 账号(免费); -
安装 STM32CubeIDE双击安装包,一路 “Next”,注意:
- 安装路径建议默认(或自定义到非 C 盘,如
D:\STM32CubeIDE
); - 勾选 “Add STM32CubeIDE to PATH”(方便后续调用);
- 等待安装完成(约 5-10 分钟,会自动安装 Java 运行环境和驱动);
- 安装路径建议默认(或自定义到非 C 盘,如
-
安装 ST-Link 驱动连接 ST-Link 到电脑 USB 口,Windows 会自动搜索驱动,若失败:
- 打开 STM32CubeIDE,点击 “Help”→“Install New Software”;
- 在 “Work with” 中选择 “STM32CubeIDE Updates”,勾选 “ST-Link Debugger Support”,安装后重启电脑,驱动即可生效。
-
验证安装打开 STM32CubeIDE,若能正常进入主界面,且连接 ST-Link 后,电脑设备管理器中 “端口” 显示 “ST-Link Debug”,则软件安装成功。
四、实操:点亮你的第一盏 LED(STM32 入门第一步)
学会 “点亮 LED”,相当于嵌入式的 “Hello World”—— 这一步能帮你打通 “写代码→烧录→看到效果” 的全流程,建立第一个成就感。
1. 硬件连接(核心板 + LED + 电阻)
我们用 STM32 的PA5 引脚控制 LED(PA5 是核心板上的常用引脚,也可自选其他 GPIO 引脚),接线方式如下:
- STM32 核心板的
3.3V
引脚 → 面包板的 “+” 极; - STM32 核心板的
GND
引脚 → 面包板的 “-” 极; - LED 的长脚(正极) → 1kΩ 电阻的一端;
- 1kΩ 电阻的另一端 → STM32 核心板的
PA5
引脚; - LED 的短脚(负极) → 面包板的 “-” 极(GND)。
接线图简化:STM32 PA5 → 1kΩ电阻 → LED正极 → LED负极 → GND
(若没有面包板,可直接用杜邦线连接:PA5→电阻→LED 正极,LED 负极→GND)
2. 用 STM32CubeIDE 生成代码并修改
STM32CubeIDE 的核心优势是 “图形化配置”—— 通过鼠标点击就能配置引脚和外设,无需手写底层代码,新手也能快速上手。
步骤 1:新建 STM32 工程
- 打开 STM32CubeIDE,点击 “File”→“New”→“STM32 Project”;
- 在 “Board Selector” 中,搜索 “STM32F103C8T6”,选择 “STM32F103C8T6”(或对应核心板型号),点击 “Next”;
- 输入项目名称(如 “LED_Blink”),选择项目保存路径(非中文),点击 “Finish”;
- 弹出 “Initialize all peripherals with their default Mode?”(是否初始化所有外设为默认模式),选择 “Yes”。
步骤 2:配置 GPIO 引脚(PA5 为输出模式)
- 进入 “Pinout & Configuration” 界面(左侧菜单栏);
- 在右侧 “MCU Pinout” 视图中,找到 “PA5” 引脚,鼠标点击它,在弹出的下拉菜单中选择 “GPIO_Output”(设置为输出模式);
- 点击左侧 “Configuration”→“GPIO”→“PA5”,配置引脚参数:
- GPIO mode:Output Push Pull(推挽输出,可输出高 / 低电平);
- GPIO Pull-up/Pull-down:No pull-up and no pull-down(无上下拉,因为 LED 有外部电阻);
- Maximum output speed:Low(低速模式,LED 不需要高速切换);
- 点击界面上方的 “Generate Code” 按钮(齿轮图标),弹出提示框点击 “Yes”,等待代码生成(约 10 秒)。
步骤 3:修改代码,实现 LED 闪烁
代码生成后,会自动打开main.c
文件,我们只需要在main
函数的while(1)
循环中添加 “点亮 LED→延时→熄灭 LED→延时” 的逻辑。
4. 验证效果
烧录完成后,你会看到 LED 开始每隔 500ms 闪烁一次(亮 500ms,灭 500ms)—— 恭喜你!你已经成功写出了第一份 STM32 程序,完成了入门的第一步。
常见问题排查(若 LED 不亮):
五、第 1 篇总结与下一篇预告
总结
这一篇我们完成了 3 件核心事:
-
找到
main.c
中的main
函数,定位到while (1)
循环:/* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ // 1. 点亮LED:PA5引脚输出高电平(GPIO_PIN_SET表示高电平) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 2. 延时500ms(HAL库自带延时函数,单位:毫秒) HAL_Delay(500); // 3. 熄灭LED:PA5引脚输出低电平(GPIO_PIN_RESET表示低电平) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 4. 延时500ms HAL_Delay(500); } /* USER CODE END 3 */
-
代码解释:
HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState)
:控制 GPIO 引脚电平的函数;GPIOx
:引脚所在的 GPIO 端口(如 GPIOA、GPIOB);GPIO_Pin
:引脚编号(如 GPIO_PIN_5);PinState
:电平状态(GPIO_PIN_SET = 高电平,GPIO_PIN_RESET = 低电平);
HAL_Delay(ms)
:延时函数,参数为毫秒数(如 500 表示延时 500ms)。
-
3. 烧录程序到 STM32 核心板
- 连接硬件:用 ST-Link 的 SWD 接口(4 根线:SWCLK、SWDIO、GND、3.3V)连接 STM32 核心板的 SWD 引脚(核心板上会标注 “SWCLK”“SWDIO”“GND”“3.3V”),然后将 ST-Link 的 USB 口连接电脑;
- 配置烧录参数:
- 点击 STM32CubeIDE 上方的 “Run”→“Run Configurations”;
- 在左侧选择 “STM32 Cortex-M C/C++ Application”,右键选择 “New”;
- 在 “Main” 标签页,“Application” 选择项目编译后的
LED_Blink.elf
文件(默认路径:项目文件夹/Debug/LED_Blink.elf
); - 在 “Debugger” 标签页,“Debug Probe” 选择 “ST-Link (OpenOCD)”,点击 “Apply”→“Close”;
- 烧录程序:
- 点击上方工具栏的 “Run” 按钮(绿色三角形),或按快捷键 “Ctrl+F11”;
- 此时会显示 “Programming Flash”(烧录进度),约 1-2 秒后显示 “Launching successful”,表示烧录完成。
- 接线问题:检查 LED 正负极是否接反、PA5 引脚是否接对、GND 是否连通;
- 电阻问题:确认限流电阻是 1kΩ 左右(若电阻太大,LED 亮度低;若没有电阻,可能烧坏引脚);
- 明确了系列规划,知道后续会学什么;
- 认识了 STM32F103,准备了入门所需的软硬件;
- 实操点亮了 LED,打通了 “代码→烧录→效果” 的全流程。
- 烧录问题:检查 ST-Link 是否连接正常、烧录配置是否正确(是否选择了 “ST-Link”);
- 代码问题:确认
HAL_GPIO_WritePin
的参数是否正确(如 GPIOA、GPIO_PIN_5 是否写对)。 -
下一篇预告
第 2 篇我们会深入讲解GPIO(通用输入输出口) —— 这是 STM32 最基础也最常用的外设。我们会学习:GPIO 的工作模式(输入 / 输出 / 复用 / 模拟)、上下拉电阻的作用、如何用 GPIO 读取按键状态(输入模式实操),以及 GPIO 的底层寄存器原理(帮你理解 HAL 库背后的逻辑)。
如果你在实操中遇到任何问题,欢迎在评论区留言,我们一起解决!也别忘了点赞收藏,跟着系列持续学习~
编辑分享
更多推荐
所有评论(0)