2. 开发环境搭建:Keil MDK 与 STM32CubeMX 的安装与配置

说实话,做嵌入式开发这么多年,我见过太多人在环境搭建这一步就卡住了。不是装错了版本,就是路径带了中文,折腾半天连个灯都点不亮。这一章,咱们就把 Keil MDK 和 STM32CubeMX 这两个吃饭的家伙一次性装好、配好。

本章目标: 完成 Keil MDK-ARM 与 STM32CubeMX 的安装、注册、基础配置,并验证工具链能正常编译下载。

2.1 工具链概览

先理清楚这两个工具各自干什么活:

工具 角色 核心功能
Keil MDK-ARM IDE + 编译器 + 调试器 编写代码、编译、下载、调试
STM32CubeMX 图形化配置工具 引脚分配、时钟树、外设初始化代码生成

简单说,CubeMX 帮你把 HAL 库的初始化代码画出来,Keil 负责把代码编译成机器码烧进芯片。两者配合,能省掉大量手写寄存器配置的时间。

2.2 Keil MDK-ARM 安装与注册

2.2.1 下载与安装

  1. 获取安装包:去 Keil 官网(www.keil.com)下载 MDK-ARM 最新版本。目前稳定版是 V5.38 左右,别追太新的,有些第三方 pack 可能不兼容。
  2. 运行安装程序:右键管理员身份运行,路径不要有中文或空格。我个人习惯装到 C:\Keil_v5,干净好找。
  3. 选择组件:默认勾选就好,它会自动装好 ARM Compiler、Debugger 驱动(ULINK/ST-Link 等)。
  4. 安装 Device Family Pack:装完后打开 Keil,点 Pack Installer,找到 STM32F1/F4 系列 pack 下载。这一步很多人漏掉,结果新建工程找不到芯片型号。
我的习惯: 装完 Keil 后第一件事,把 Project -> Manage -> Component Environment 里的路径检查一遍,确保所有工具链路径都是英文。

2.2.2 注册与破解(正版用户请忽略)

Keil 不注册只能用 2KB 代码。正版用户直接输入 License 就行。如果你跟我一样是个人学习,嗯……你懂的。

  1. 以管理员身份运行 Keil。
  2. 点 File -> License Management。
  3. 复制 CID 码,用注册机生成 License。
  4. 把生成的 License 粘贴进去,点 Add LIC。
注意: 注册机容易被杀毒软件干掉。我建议先关掉实时防护,注册完再开。另外,注册时 Keil 必须用管理员权限打开,否则会报错。

2.3 STM32CubeMX 安装与配置

2.3.1 下载与安装

  1. 获取安装包:去 ST 官网搜 STM32CubeMX,下载最新版(需要注册账号,免费)。
  2. 安装 Java 运行环境:CubeMX 基于 Java,如果你的电脑没有 JRE,它会自动弹窗引导安装。我建议装 Java 11 以上版本。
  3. 运行安装程序:同样,路径不要有中文。装完后桌面会有 CubeMX 图标。
  4. 安装固件包:打开 CubeMX,点 Help -> Manage embedded software packages,勾选你需要的系列(比如 STM32F1、F4、L0 等),点击 Install Now。这个过程比较慢,建议挂机等。
避坑指南: 固件包默认下载到 C 盘用户目录下,时间久了会占好几个 G。我一般会在 Help -> Updater Settings 里把固件库路径改到 D 盘,比如 D:\STM32Cube\Repository。

2.3.2 基础配置

装完 CubeMX 后,建议做两件事:

  • 设置代码生成风格:Project Manager -> Code Generator,勾选 Generate peripheral initialization as a pair of .c/.h files per peripheral。这样每个外设单独一个文件,方便管理。
  • 设置 IDE 工具链:在同一个页面,Toolchain / IDE 选 MDK-ARM V5,这样生成的工程直接双击就能用 Keil 打开。

2.4 工具链集成验证

装完不能光看不练,咱们跑个最小工程验证一下。

2.4.1 用 CubeMX 生成一个最小工程

  1. 打开 CubeMX,点 New Project,选 STM32F103C8(蓝板子常用的型号)。
  2. 在 Pinout & Configuration 里,找到 SYS -> Debug 选 Serial Wire(否则烧录一次后第二次就连不上了,我吃过这个亏)。
  3. 找到 RCC -> High Speed Clock (HSE) 选 Crystal/Ceramic Resonator。
  4. 点 Clock Configuration 标签,把 HCLK 设为 72MHz(F103 最高主频)。
  5. 点 Project Manager,填工程名和路径,IDE 选 MDK-ARM V5。
  6. 点 GENERATE CODE,等它生成完。
关键检查点: 生成的工程目录里必须有 MDK-ARM 文件夹,里面有个 .uvprojx 文件。

2.4.2 在 Keil 中编译与下载

  1. 双击 .uvprojx 文件,Keil 会自动打开工程。
  2. 点 Build 按钮(或按 F7),看底部输出窗口有没有 0 Error(s), 0 Warning(s)。
  3. 接上 ST-Link 或 J-Link,点 Download 按钮(或按 F8)。
  4. 如果一切顺利,芯片就开始跑代码了。你可以接个串口看打印,或者点个 LED 验证。
常见错误: 如果下载时报 No ULINK Device found,说明调试器驱动没装好。去 Keil 安装目录下的 ARM\STLink 或 ARM\ULINK 里手动装一下驱动。

2.5 开发环境整体流程

下面这张图,是我自己画的环境搭建与开发流程,你跟着走一遍基本不会迷路。

开发环境搭建与开发流程 开发环境搭建与开发流程 安装 Keil MDK 安装 STM32CubeMX 安装固件包 注册 / 配置调试器 设置代码生成风格 配置 IDE 工具链 CubeMX 生成 MDK 工程 Keil 编译 → 下载 → 调试 提示:每次更换芯片型号,记得先更新 CubeMX 固件包,再生成工程

2.6 常见问题与避坑

环境搭建这块,我踩过的坑比走过的路还多。挑几个典型的说说:

  • 路径带中文或空格:Keil 和 CubeMX 对中文路径支持很差,编译会报一些莫名其妙的错误。我建议所有工具和工程都放在纯英文路径下。
  • 调试器驱动不识别:插上 ST-Link 后设备管理器里显示黄色感叹号。去 Keil 安装目录下的 ARM\STLink\USBDriver 里手动装驱动就行。
  • 编译报错找不到头文件:多半是 Device Pack 没装,或者工程里的 Include Paths 没配好。在 Keil 里点 Project -> Options for Target -> C/C++,检查 Include Paths 是否包含 HAL 库路径。
  • 下载一次后第二次连不上:这是因为 Debug 引脚被复用了。在 CubeMX 里一定要把 SYS -> Debug 设为 Serial Wire,否则芯片会变砖。我曾经因为这个把一块板子折腾了一下午。
我的建议: 第一次搭建环境,最好用一块官方开发板(比如 NUCLEO 或 Discovery),自带 ST-Link,省去接线和驱动问题。等流程跑通了,再换自己的板子。

2.7 验证清单

装完配完,对照这个清单检查一遍:

检查项 状态
Keil MDK 安装完成,能正常打开 ☐
Keil 已注册,无代码大小限制 ☐
STM32CubeMX 安装完成,能正常打开 ☐
已下载目标芯片的固件包 ☐
CubeMX 能生成 MDK 工程 ☐
Keil 能编译工程,0 Error 0 Warning ☐
调试器驱动正常,能下载程序 ☐

全部打勾?恭喜,你的开发环境已经就绪。接下来就可以开始写真正的驱动代码了。