2. 开发环境搭建:Keil MDK / STM32CubeIDE 安装与工程模板创建

说实话,很多初学者在学嵌入式时,第一个坑往往不是代码写不对,而是环境没搭好。我见过不少同事,花了一整天装软件,结果编译第一行代码就报错——然后就开始怀疑人生了。

这一章,我带你把开发环境彻底搞定。咱们同时讲 Keil MDK 和 STM32CubeIDE 两种工具,你选一个用就行。我个人更推荐初学者从 Keil 入手,因为它的调试体验更成熟,资料也多。

2.1 工具链选型:Keil 还是 CubeIDE?

先看个对比表格,心里有个底:

对比项 Keil MDK STM32CubeIDE
编译器 ARMCC (v5/v6) GCC (免费)
调试器支持 J-Link / ST-Link / ULINK ST-Link (原生)
代码生成 需配合 CubeMX 内置 CubeMX
许可证 商业收费(有代码大小限制版) 免费开源
工程管理 .uvprojx 项目文件 .cproject 项目文件
调试体验 成熟稳定,寄存器窗口直观 Eclipse 风格,插件丰富
我的建议:如果你在公司做产品开发,大概率用 Keil。如果是个人学习或开源项目,CubeIDE 完全够用,还省了破解的麻烦。

2.2 Keil MDK 安装与激活

安装过程其实不复杂,但有几个细节容易踩坑。我一步步说清楚。

2.2.1 下载与安装

  1. 去官网下载 MDK-ARM(注意不是 MDK-Viewer,那个只能看代码不能编译)。
  2. 运行安装包,路径不要有中文和空格。我习惯装到 C:\Keil_v5。
  3. 选择组件:默认勾选就行,但记得把 ARM Compiler 和 Device Support 都选上。
  4. 安装 Pack:安装完成后,打开 Keil,点 Pack Installer,搜索你的芯片型号(比如 STM32F103C8),点击 Install。
我曾经踩过的坑:装完 Keil 后直接打开工程,发现编译报错说找不到芯片。后来才发现是 Pack 没装。记住:Pack 就是芯片的“身份证”,没有它编译器不认识你的 MCU。

2.2.2 激活与 License 管理

Keil 是收费软件,但有个免费版限制:代码不超过 32KB。对于学习来说,32KB 其实够用了。如果你需要更大容量,就得买 License。

激活步骤:

  • 打开 Keil → File → License Management
  • 复制 CID 码
  • 去官网生成 License(或使用正版购买的激活码)
  • 粘贴回去,点击 Add LIC

嗯,这里要注意:如果你用的是公司买的浮动 License,记得配置好服务器地址,不然连不上。

2.3 STM32CubeIDE 安装

CubeIDE 就简单多了,完全免费,安装也傻瓜式。

  1. 去 ST 官网下载:选择对应操作系统版本(Windows / Linux / macOS)。
  2. 运行安装程序:它会自动安装 Eclipse 插件和 GCC 工具链。
  3. 首次启动:选择工作空间路径(Workspace),我建议单独建一个文件夹,比如 D:\STM32_Workspace。
  4. 更新固件包:打开后,点 Help → Manage Embedded Software Packages,下载你需要的 STM32 系列固件。
小技巧:CubeIDE 内置了 CubeMX,可以直接在 IDE 里配置引脚和时钟。我个人觉得这个设计很贴心,省去了来回切换工具的麻烦。

2.4 工程模板创建(核心)

环境装好了,接下来就是创建工程模板。这个模板会贯穿整个课程,所以一定要做对。

2.4.1 在 Keil 中创建模板

我习惯用 CubeMX 生成初始化代码,再导入 Keil。这样既保留了 CubeMX 的图形化配置,又能用 Keil 的调试优势。

  1. 打开 CubeMX,选择芯片型号(比如 STM32F103C8T6)。
  2. 配置时钟:在 Clock Configuration 页面,把 HSE 设为 8MHz,PLL 倍频到 72MHz。
  3. 配置调试接口:在 SYS 里,Debug 选 Serial Wire(否则下载器连不上)。
  4. 生成代码:Project Manager → Project,Toolchain / IDE 选 MDK-ARM,版本选 V5。
  5. 点击 GENERATE CODE,生成后双击 .uvprojx 文件打开。

打开 Keil 后,你会看到这样的工程结构:

Project
├── Application
│   ├── main.c
│   ├── stm32f1xx_it.c
│   └── stm32f1xx_hal_msp.c
├── Drivers
│   ├── CMSIS
│   └── STM32F1xx_HAL_Driver
├── Middlewares
└── .uvprojx
关键点:这个结构里,main.c 是我们写业务逻辑的地方,Drivers 是 HAL 库,Middlewares 是中间件。后面讲分层架构时,我们会在这个基础上加自己的层。

2.4.2 在 CubeIDE 中创建模板

CubeIDE 更直接,因为它内置了 CubeMX。

  1. 新建工程:File → New → STM32 Project。
  2. 选择芯片:输入型号,比如 STM32F103C8,点 Next。
  3. 配置项目名:比如 STM32_Template,点 Finish。
  4. 自动打开 CubeMX 视图:配置引脚、时钟、外设。
  5. 点击右上角 Generate Code:代码会自动生成并导入工程。

工程结构类似 Keil,但多了 .cproject 和 .project 两个 Eclipse 配置文件。

2.5 验证编译与下载

模板创建好了,得验证一下能不能编译通过、能不能下载到板子上。

2.5.1 编译测试

在 Keil 里点 Build (F7),在 CubeIDE 里点 Build All (Ctrl+B)。如果看到 0 Error(s), 0 Warning(s),恭喜你,环境搭好了。

如果报错,常见原因有:

  • 找不到头文件:检查 C/C++ Include Paths 是否包含了 HAL 库路径。
  • 芯片型号不匹配:在 Keil 的 Target 选项卡里重新选一下芯片。
  • 编译器版本问题:Keil 里可以切换 ARMCC v5 和 v6,有些旧工程只能用 v5。

2.5.2 下载与调试

连接 ST-Link 或 J-Link,配置调试器:

  • Keil:Project → Options for Target → Debug,选 ST-Link Debugger,点 Settings 确认连接成功。
  • CubeIDE:默认自动识别 ST-Link,点 Debug (F11) 即可。

下载成功后,点 Run 或 Reset and Run,板子上的 LED 应该会闪烁(如果例程里有)。

避坑指南:我曾经遇到过下载一次后第二次就连不上了。原因是代码里把 SWD 引脚复用成了 GPIO。解决办法是在初始化代码里保留 SWD 功能,或者在 SystemInit() 之后不要动 PA13/PA14。

2.6 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作一个“地图”,以后遇到环境问题,先看这张图定位。

开发环境搭建知识体系 开发环境搭建知识体系 开发环境搭建 工具选型 安装与配置 Keil MDK STM32CubeIDE Pack / 固件包 License / 激活 工程模板创建 CubeMX + Keil CubeIDE 原生 验证标准:编译通过 + 下载成功 + 调试器识别

2.7 本章小结

环境搭建这件事,说难不难,说简单也不简单。关键是把每一步做扎实,别跳步骤。

我见过太多人,装完 Keil 就直接写代码,结果编译报错就慌了。其实只要按我上面的流程走一遍,基本不会出问题。

最后提醒一句:工程模板是后面所有章节的基础。建议你把这个模板保存好,以后每次新建项目都从它复制。这样能省下大量重复配置的时间。

我的习惯:我会把模板工程压缩成 .zip,放在云盘里。换电脑时直接解压就能用,不用重新配置。