第二章 开发环境搭建:工欲善其事,必先利其器
做嵌入式开发,说白了就是跟工具打交道。我见过不少新手,代码写得挺溜,结果卡在环境搭建上,一卡就是半天。这一章咱们就把 Keil MDK-ARM、STM32CubeMX、ST-Link 驱动这三个核心工具装好,再建一个干干净净的工程模板。跟着我的节奏来,半小时内搞定。
本章目标:完成 Keil MDK-ARM、STM32CubeMX、ST-Link 驱动的安装与验证,并创建第一个可编译通过的 STM32 工程模板。
2.1 工具链全景图
先看看这三样东西各管什么,免得装完了还不知道谁是谁。
2.2 Keil MDK-ARM 安装
Keil 是 ARM 生态里最主流的 IDE,没有之一。我最早用 Keil 还是大学做 51 单片机的时候,后来转到 STM32,发现界面几乎没变——嗯,这算是好事,上手快。
2.2.1 下载与安装步骤
- 获取安装包:去 Keil 官网(www.keil.com)下载 MDK-ARM 最新版本。目前稳定版是 V5.38,建议用这个。
- 运行安装程序:双击 .exe,一路 Next。安装路径我建议保持默认,别往中文目录里塞。
- 选择组件:安装过程中会提示选择器件支持包(Device Family Pack)。如果你网络好,可以勾上在线下载;网络不好就跳过,后面用 CubeMX 装也一样。
- 完成安装:装完后桌面会有 uVision 图标,先别急着打开。
我的习惯:装完 Keil 后第一件事,去 File → License Management 里看一眼 CID 码。后面装 Pack 或者激活 License 都会用到这个。
2.2.2 安装器件支持包
Keil 本身只是个壳,真正认识 STM32 芯片的是 Pack 包。没有 Pack,你连芯片型号都选不到。
- 在线安装:打开 Keil,点击
Pack Installer图标,找到 STM32F1xx_DFP 或 STM32F4xx_DFP,点 Install。 - 离线安装:如果你在公司内网或者网速慢,去 Keil 官网下载对应的 .pack 文件,双击就能装。
我曾经踩过的坑:有一次装完 Keil 发现编译报错 "device not found",折腾了半天才发现是 Pack 版本不对。STM32F103 要用 F1 的 Pack,别下成 F4 的。
2.3 STM32CubeMX 安装
CubeMX 是 ST 官方出的图形化配置工具。说白了,你点点鼠标,它就把 GPIO、时钟、外设的初始化代码全给你生成了。我刚开始做项目时还手写寄存器,后来用了 CubeMX——真香。
2.3.1 安装步骤
- 下载:去 ST 官网搜 "STM32CubeMX",下载最新版。需要注册一个 ST 账号,免费的。
- 安装:解压后运行 SetupSTM32CubeMX.exe。注意,它需要 Java 运行环境(JRE)。如果你的电脑没有 JRE,安装包会自动帮你装。
- 配置固件包路径:第一次打开 CubeMX 时,会提示设置固件包存放路径。我建议单独建一个文件夹,比如
D:\STM32Cube\Repository,别放 C 盘。
小技巧:CubeMX 的固件包动辄几百 MB,下载很慢。你可以去 ST 官网手动下载对应系列的固件包,解压后放到 Repository 目录下,CubeMX 会自动识别。
2.3.2 验证安装
打开 CubeMX,点击 New Project,在 Board Selector 里搜 "STM32F103C8"。如果能搜到,说明安装成功。如果搜不到——嗯,检查一下固件包有没有装好。
2.4 ST-Link 驱动安装
ST-Link 是 ST 官方的调试下载器。买开发板时通常会送一个板载的 ST-Link,插上 USB 就能用。但前提是——你得装驱动。
2.4.1 驱动安装步骤
- 下载驱动:去 ST 官网搜 "ST-Link driver",或者直接装 STM32CubeProgrammer,里面自带驱动。
- 安装:运行 dpinst_amd64.exe(64 位系统)或 dpinst_x86.exe(32 位系统)。
- 验证:插上 ST-Link,打开设备管理器。如果看到 "STMicroelectronics STLink dongle" 且没有黄色感叹号,就说明驱动装好了。
我曾经遇到的坑:有一次插上 ST-Link 后设备管理器里显示 "Unknown device",换了 USB 线也不行。后来发现是驱动被 Win10 自动更新给覆盖了。解决办法:去设备管理器里手动更新驱动,指向 ST 的驱动目录。
2.5 创建第一个工程模板
工具都装好了,咱们来建一个工程模板。这个模板后面所有章节都会用到,所以一次建好,后面直接复制。
2.5.1 用 CubeMX 生成初始化代码
- 新建项目:打开 CubeMX,点击
New Project,选择芯片 STM32F103C8Tx。 - 配置时钟:进入
Clock Configuration标签页,把 HCLK 设为 72MHz。CubeMX 会自动帮你算好分频系数。 - 配置 GPIO:在
Pinout & Configuration里,把 PC13 设为 GPIO_Output(这是板载 LED 的引脚)。 - 生成代码:点击
Project → Generate Code,选择 Toolchain 为 MDK-ARM,版本选 V5。给项目起个名字,比如 "STM32_Template"。
2.5.2 在 Keil 中编译验证
- 打开项目:找到 CubeMX 生成的 .uvprojx 文件,双击用 Keil 打开。
- 编译:按 F7 或者点击
Project → Build Target。如果一切顺利,底部 Output 窗口会显示 "0 Error(s), 0 Warning(s)"。 - 添加用户代码:在
main.c的while(1)循环里加一行:
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);
再编译一次,确认没有报错。
模板结构说明:一个标准的 CubeMX 生成工程包含以下目录:
| 目录/文件 | 说明 |
|---|---|
| Core/Inc | 头文件目录,存放 main.h、stm32f1xx_hal_conf.h 等 |
| Core/Src | 源文件目录,存放 main.c、stm32f1xx_hal_msp.c 等 |
| Drivers | HAL 库驱动,包含 CMSIS 和 STM32F1xx_HAL_Driver |
| .uvprojx | Keil 项目文件,双击打开 |
2.6 环境验证清单
装完所有工具后,我建议你按这个清单检查一遍,免得后面调试时才发现问题。
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| Keil 安装 | 打开 uVision,新建空项目 | 界面正常,无报错 |
| 器件 Pack | 在 Pack Installer 中搜索 STM32F1 | 显示已安装版本号 |
| CubeMX 安装 | 打开 CubeMX,新建 STM32F103C8 项目 | 能正常进入配置界面 |
| ST-Link 驱动 | 插上 ST-Link,查看设备管理器 | 显示 STLink dongle,无感叹号 |
| 工程编译 | 打开模板工程,按 F7 编译 | 0 Error, 0 Warning |
我的建议:把编译通过的模板工程压缩备份一份。后面每做一个新项目,直接解压改名字,省去重复配置的麻烦。
好了,环境搭建就到这里。工具链装好、模板建好,后面咱们就可以专心写代码了。记住,嵌入式开发里,环境问题往往比代码问题更磨人——一次性搞定,后面就顺畅了。