2. 开发环境搭建:Keil MDK / IAR / STM32CubeIDE 安装、工程模板创建、下载器配置
说实话,嵌入式开发的第一步往往最劝退。我见过太多新手,板子买回来,环境装了一整天,最后卡在“点不亮LED”这一步。其实说白了,工具链就那么几样,捋顺了就好。
这一章,我带你把 Keil MDK、IAR、STM32CubeIDE 这三个主流 IDE 装好,再配好 J-Link 和 ST-Link。工程模板我也会给出一套我常用的结构。跟着走,别跳步。
3.1 三大 IDE 怎么选?
先别急着下载。你得知道自己要什么。我列个表,你看完心里就有数了。
| IDE | 适用芯片 | 编译器 | 调试器支持 | 个人看法 |
|---|---|---|---|---|
| Keil MDK | ARM Cortex-M 为主 | ARMCC (v5/v6) | J-Link, ST-Link, ULINK | 老牌,生态最全,但代码大小限制烦人 |
| IAR EWARM | ARM, RISC-V 等 | IAR C/C++ Compiler | J-Link, I-jet, ST-Link | 优化强,调试体验好,但贵 |
| STM32CubeIDE | STM32 全系列 | GCC (arm-none-eabi) | ST-Link 原生支持 | 免费,HAL/LL 库集成,适合入门 |
我个人习惯:项目用 Keil,因为客户那边大多用这个,交接方便。自己玩或者做原型,我更喜欢 STM32CubeIDE,免费且开箱即用。IAR 呢?我在做低功耗优化时用过几次,它的编译器确实能压榨出更小的代码尺寸。
3.2 Keil MDK 安装与工程模板
3.2.1 安装步骤
- 去 Keil 官网下载 MDK-ARM(注意版本,我目前用 5.38)。
- 双击安装,一路 Next。路径别带中文,也别放 C 盘根目录。
- 安装完成后,打开 Pack Installer,下载你芯片对应的 Device Family Pack(比如 STM32F1xx_DFP)。
- 破解?嗯,我不多说。但如果你用正版 License,记得在 File → License Management 里导入。
3.2.2 工程模板创建
我习惯把工程模板分成三层:
- App:用户代码,main.c 放这里。
- BSP:板级支持包,LED、按键、串口初始化。
- Drivers:芯片外设驱动,CMSIS 和 HAL 库放这里。
新建工程时,按这个结构建文件夹,然后在 Keil 里对应添加 Group。这样后期维护起来,你自己看着也清爽。
Project_Template/
├── App/
│ └── main.c
├── BSP/
│ ├── bsp_led.c
│ ├── bsp_led.h
│ ├── bsp_uart.c
│ └── bsp_uart.h
├── Drivers/
│ ├── CMSIS/
│ └── STM32F1xx_HAL_Driver/
├── MDK-ARM/
│ └── template.uvprojx
└── README.md
3.3 IAR EWARM 安装与工程模板
3.3.1 安装要点
IAR 的安装比 Keil 稍微麻烦一点。下载时注意选对版本(EWARM 目前是 9.40)。安装过程中会提示你选择 License,如果你有注册机……嗯,你懂的。
装完后,同样需要装芯片支持包。IAR 叫 “Device Support”,在 Tools → Device Support Manager 里下载。
我个人的经验: IAR 的编译器优化等级比 Keil 高。同样的代码,IAR 开 High 优化,代码体积能小 15% 左右。但调试时建议先开 None,等功能调通了再开优化,否则单步执行会跳得你怀疑人生。
3.3.2 工程模板结构
IAR 的工程模板我基本沿用 Keil 的目录结构,只是工程文件后缀变成了 .eww 和 .ewp。新建工程时,记得在 Project → Options 里配置好:
- 芯片型号(比如 STM32F103C8)
- 输出格式(选 .hex 或 .bin)
- 调试器(后面会讲 J-Link 配置)
3.4 STM32CubeIDE 安装与工程模板
3.4.1 安装步骤
这个最简单。去 ST 官网下载 STM32CubeIDE,目前最新是 1.15.0。安装包自带 Java 环境,你只管下一步就行。
装完后,第一次启动会提示你选择工作空间(Workspace)。我建议单独建一个文件夹,别跟项目混在一起。
3.4.2 使用 CubeMX 生成工程
STM32CubeIDE 集成了 CubeMX,你可以图形化配置时钟、外设、引脚。我个人觉得这是它最大的优势。
- 新建工程,选择芯片型号。
- 在 Pinout & Configuration 里配好 GPIO、USART、定时器等。
- Clock Configuration 里配好时钟树(HSE、PLL 倍频等)。
- Project Manager 里设置工程名、路径、IDE 类型(选 STM32CubeIDE)。
- 点击 GENERATE CODE,代码就自动生成了。
3.5 下载器配置:J-Link 与 ST-Link
环境装好了,工程建好了,怎么把程序烧进去?这就得靠下载器了。市面上最常见的就是 J-Link 和 ST-Link。
3.5.1 J-Link 配置
J-Link 是 SEGGER 家的产品,稳定、速度快,支持几乎所有 ARM Cortex 内核芯片。我项目里用的最多的就是 J-Link Plus。
驱动安装:
- 去 SEGGER 官网下载 J-Link Software Pack(包含驱动和 J-Flash 工具)。
- 安装后,插上 J-Link,设备管理器里应该能看到 “J-Link driver”。
在 Keil 里配置:
- 点击 Project → Options for Target → Debug。
- 选择 “J-LINK / J-TRACE Cortex”。
- 点击 Settings,确认 SW 或 JTAG 模式(我一般用 SWD,只需要 4 根线)。
- 在 Flash Download 里添加对应的算法文件(比如 STM32F10x Flash)。
在 IAR 里配置:
- Project → Options → Debugger。
- Driver 选 “J-Link/J-Trace”。
- 在 Download 标签页里勾选 “Use flash loader(s)”。
3.5.2 ST-Link 配置
ST-Link 是 ST 官方出的调试器,买 STM32 开发板基本都自带。速度比 J-Link 慢一点,但胜在便宜、方便。
驱动安装:
- ST-Link 驱动通常随 STM32CubeIDE 一起安装。如果单独装,去 ST 官网下载 “ST-Link driver”。
- 插上 ST-Link,设备管理器里应该看到 “STMicroelectronics STLink dongle”。
在 STM32CubeIDE 里配置:
- 默认就是 ST-Link,基本不用改。Run → Debug Configurations 里确认 Debug Probe 选的是 “ST-LINK (ST-Link GDB server)”。
在 Keil 里配置:
- Debug 选项里选 “ST-Link Debugger”。
- Settings 里同样选 SWD 模式,添加 Flash 算法。
3.6 知识结构总览
下面这张图,是我自己总结的开发环境搭建流程。你照着走,基本不会出大问题。
3.7 避坑指南
最后,我把自己这些年踩过的坑总结一下。你遇到了,直接翻回来看看。
- 路径不能有中文和空格:Keil 和 IAR 对中文路径支持很差,编译会报莫名其妙错误。
- 调试器驱动冲突:如果你同时装了 J-Link 和 ST-Link 驱动,偶尔会冲突。插哪个用哪个,别同时插两个不同的调试器。
- Flash 算法没选对:下载时报错 “Flash Download failed”,八成是算法文件没选对。去芯片型号对应的 Pack 里找。
- SWD 线序接反:SWDIO、SWCLK、GND 这三根线必须接对。VCC 可以接也可以不接(如果板子独立供电)。
一句话总结: 环境搭建没有捷径,但按流程走,一次成功。我每次换电脑或重装系统,都会花半天时间把这三套环境配好,然后备份一份。你也试试。