1. 课程导学与环境搭建:从零开始点亮第一盏灯
大家好,欢迎来到这门实战课。我是你们的讲师,一个在嵌入式圈子里摸爬滚打了十几年的老工程师。
这一章,我们不急着写代码。先把吃饭的家伙准备好,再点个灯庆祝一下。你想想看,环境没搭好,后面再牛的代码也跑不起来,对吧?
1.1 STM32 与 HAL 库:为什么选它们?
STM32 是意法半导体的王牌产品线。从简单的 Cortex-M0 到高性能的 M7,覆盖了你能想到的大部分嵌入式场景。我个人习惯把 STM32 比作瑞士军刀——型号多、外设全、生态好。
那 HAL 库是什么?说白了,就是官方帮你封装好的外设驱动层。你不需要对着寄存器手册一页页翻,调用几个 API 就能把外设用起来。
我记得刚入行那会儿,用的是标准外设库。每次换芯片型号,代码得重写一大半。HAL 库的硬件抽象层设计,让代码在不同型号间的移植变得轻松很多。
1.2 开发板介绍:我们用什么硬件?
本课程以 STM32F103C8T6(蓝色 pill 板)和 STM32F407VGT6(探索者板)为主。为什么选这两款?
- F103:经典中的经典,资料多,适合入门。
- F407:带 FPU 和 DSP 指令,适合进阶和 ADC 高速采集。
| 参数 | STM32F103C8T6 | STM32F407VGT6 |
|---|---|---|
| 内核 | Cortex-M3 | Cortex-M4F |
| 主频 | 72 MHz | 168 MHz |
| Flash | 64 KB | 1 MB |
| SRAM | 20 KB | 192 KB |
| ADC 通道 | 10 通道 | 24 通道 |
1.3 STM32CubeMX 安装与配置
CubeMX 是 ST 官方推出的图形化配置工具。它能帮你生成初始化代码,省去手写配置的繁琐。
安装步骤很简单,但我还是踩过坑。曾经有一次,我装了个旧版本,结果生成的代码跟 HAL 库版本不匹配,编译报错一堆。嗯,这里要注意:
- 去 ST 官网下载最新版 CubeMX(需要注册账号)。
- 安装时选择 Java 运行环境(JRE),CubeMX 依赖它。
- 安装完成后,打开 CubeMX,进入 Help → Manage embedded software packages,下载你需要的芯片包。
1.4 MDK-ARM / IAR IDE 安装
IDE 的选择,看个人习惯。我用 MDK-ARM 多一些,因为它的调试器跟 ST-Link 配合得很好。IAR 的编译优化更强,但上手门槛稍高。
| 对比项 | MDK-ARM | IAR EWARM |
|---|---|---|
| 编译器 | ARMCC / AC6 | IAR C/C++ |
| 调试器支持 | ST-Link, J-Link | ST-Link, J-Link |
| 代码大小限制 | 32KB(免费版) | 无限制(评估版有天数限制) |
| 个人推荐 | 入门首选 | 产品级开发 |
安装时记得勾选 添加环境变量,不然命令行编译会找不到工具链。我见过不少新手卡在这一步。
1.5 第一个 HAL 库工程:点灯
点灯是嵌入式界的 Hello World。别小看它,这里面包含了时钟配置、GPIO 初始化、HAL 库调用等核心流程。
我们一步步来:
- 打开 CubeMX,新建工程,选择你的芯片型号。
- 配置时钟源:选择 HSE(外部晶振),在 Clock Configuration 页面把 HCLK 设为 72MHz(F103)或 168MHz(F407)。
- 配置 GPIO:找到 PC13(板载 LED 引脚),设置为 Output 模式,推挽输出,无上拉。
- 生成代码:Project → Generate Code,选择 MDK-ARM 或 IAR 版本。
- 编写主函数:
int main(void)
{
HAL_Init(); // 初始化 HAL 库
SystemClock_Config(); // 配置系统时钟
MX_GPIO_Init(); // 初始化 GPIO
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻转 LED
HAL_Delay(500); // 延时 500ms
}
}
编译、下载,你应该能看到板载 LED 以 1 秒的频率闪烁。如果没亮,别慌,检查这几项:
- LED 引脚是不是 PC13?有些板子用的是 PA5 或 PB2。
- 时钟配置对不对?HSE 起振了吗?
- 下载器连接是否正常?ST-Link 的驱动装了没?
1.6 本章知识体系
下面这张图,帮你把本章的核心脉络理清楚:
环境搭好了,灯也亮了,恭喜你迈出了第一步。后面的章节,我们会深入 GPIO、定时器、串口、ADC 等外设,每一章都会有实战案例和故障排查经验。准备好了吗?我们继续。