1. STM32开发环境搭建:工欲善其事,必先利其器

做嵌入式开发,第一关就是搭环境。很多人觉得这事简单,不就是装几个软件嘛。但我见过太多新手卡在这一步——装好了发现编译器报错、驱动不识别、下载器连不上。说白了,环境没搭对,后面全是坑。

这一章,我带你把 Keil MDK、STM32CubeMX、ST-Link 驱动挨个装好,再跑第一个 LED 工程。每一步我都会说清楚「为什么这么做」,顺便分享一些我踩过的坑。

1.1 工具链全景图

先搞清楚我们要装哪些东西,它们各自干什么活:

工具 作用 版本建议
Keil MDK-ARM 代码编辑、编译、调试一体 MDK 5.38 或更高
STM32CubeMX 图形化配置外设、生成初始化代码 6.10 或更高
ST-Link 驱动 让 PC 识别调试器/下载器 最新版即可
USB 转串口驱动 串口打印调试(可选但推荐) CH340/CP2102 对应驱动

核心关系:CubeMX 帮你生成工程框架 → Keil 负责编译和调试 → ST-Link 把固件烧进芯片。三个工具串成一条流水线。

1.2 Keil MDK 安装与配置

Keil 是我们写代码的主战场。我个人习惯用 MDK 5.38,稳定,对 STM32 全系列支持都不错。

安装步骤

  1. 从 ARM 官网或 Keil 官网下载 MDK-ARM 安装包
  2. 双击运行,一路 Next,注意安装路径不要有中文
  3. 安装完成后,打开 Keil,点击 File → License Management
  4. 输入你的 License(正版或评估版都可以)

注意:MDK 安装包默认不带器件支持包(Device Family Pack)。你需要单独下载对应芯片的 Pack。比如 STM32F1 系列,搜索 Keil.STM32F1xx_DFP 并安装。

我记得第一次装 MDK 时,没装 Pack,编译直接报错找不到芯片头文件。当时还以为是软件坏了,折腾了半天。嗯,后来才知道是少了这一步。

配置编译器

Keil 默认用 ARMCC v5,但新版本也支持 AC6(ARM Compiler 6)。我个人建议用 AC6,编译速度快,代码密度也更好。在 Project → Options for Target → Target 里切换:

ARM Compiler: Use default compiler version 6

1.3 STM32CubeMX 安装

CubeMX 是 ST 官方的图形化配置工具。你点点鼠标,它就能生成初始化代码。说白了,就是帮你省掉写寄存器配置的体力活。

安装要点

  • 需要 Java 运行环境(JRE),CubeMX 6.10 以上自带 JRE,不用额外装
  • 安装路径同样不要有中文
  • 首次启动会提示更新固件包,建议全选下载,后面用起来方便

小技巧:CubeMX 生成的代码默认放在 ./MDK-ARM 目录下。如果你和我一样喜欢把工程文件整理清楚,可以在生成前设置输出路径。

1.4 ST-Link 驱动安装

ST-Link 是 STM32 的调试下载器。很多开发板都集成了它,比如 STM32F103C8T6 最小系统板上的那个小芯片就是。

驱动安装其实很简单:

  1. 插上 ST-Link 到电脑 USB 口
  2. 打开设备管理器,如果看到黄色感叹号,说明没装驱动
  3. 下载 ST-Link 驱动(从 ST 官网或 Keil 安装目录找)
  4. 手动更新驱动,指向驱动文件夹即可

我曾经遇到过:ST-Link 驱动装好了,但 Keil 里死活识别不到。后来发现是 USB 线的问题——有些线只能充电,不能传数据。换了一根带屏蔽的数据线,立马好了。所以,别小看一根线。

1.5 第一个 LED 工程:从 CubeMX 到 Keil

环境搭好了,我们来跑一个真正的工程。目标很简单:让 STM32 板子上的 LED 闪烁。

步骤一:CubeMX 配置

  1. 打开 CubeMX,点击 New Project
  2. 选择芯片型号,比如 STM32F103C8
  3. 在 Pinout 视图里,找到 PC13(很多板子的 LED 接这个引脚)
  4. 右键设置为 GPIO_Output
  5. 配置时钟:HSE 8MHz,PLL 倍频到 72MHz
  6. 点击 Project → Generate Code,选择 MDK-ARM 工具链

步骤二:Keil 里写代码

生成后,用 Keil 打开工程。找到 main.c,在 while(1) 里加上:

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);

这两行代码的作用:翻转 PC13 的电平,然后等 500ms。循环执行,LED 就会一亮一灭。

步骤三:编译与下载

  1. 点击 Build 按钮(或按 F7),编译工程
  2. 确保 ST-Link 已连接,点击 Download(或按 F8)
  3. 如果一切正常,你会看到板子上的 LED 开始闪烁

常见错误:如果下载时报错 No ST-Link detected,检查驱动、USB 线、以及 Keil 的调试器设置(Options for Target → Debug → Use ST-Link)。

1.6 知识结构图:环境搭建与工程流程

下面这张图把整个流程串起来了,你可以对照着看:

STM32开发环境搭建与工程流程 STM32开发环境搭建与工程流程 Keil MDK 安装 STM32CubeMX 安装 ST-Link 驱动安装 CubeMX 创建工程:选芯片 → 配引脚 → 配时钟 → 生成代码 Keil 打开工程 → 编写代码 → 编译 ST-Link 下载 → 板子运行 → LED 闪烁 提示:三个工具安装不分先后,但 CubeMX 生成工程前必须先装好 Keil 和对应 Pack

1.7 避坑指南

最后,我把这些年遇到的环境问题整理了一下,你遇到了可以直接对照:

问题现象 可能原因 解决办法
编译报错找不到头文件 未安装对应 Device Pack 在 Keil 的 Pack Installer 中安装对应系列 Pack
下载时报 No ST-Link 驱动未装 / USB 线问题 / 调试器设置不对 重装驱动、换数据线、检查 Keil Debug 配置
CubeMX 生成代码后 Keil 打不开 Keil 版本过低或工程路径有中文 升级 Keil、移除中文路径
LED 不亮 引脚配置错误 / 时钟未使能 检查 CubeMX 引脚分配和时钟树配置

我的习惯:每搭好一个新环境,我都会先跑一个 LED 闪烁工程。这就像嵌入式世界的 "Hello World"——能亮,说明整个工具链通了。后面再复杂的项目,都是在这个基础上加东西。