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 安装步骤

  1. 去 Keil 官网下载 MDK-ARM(注意版本,我目前用 5.38)。
  2. 双击安装,一路 Next。路径别带中文,也别放 C 盘根目录。
  3. 安装完成后,打开 Pack Installer,下载你芯片对应的 Device Family Pack(比如 STM32F1xx_DFP)。
  4. 破解?嗯,我不多说。但如果你用正版 License,记得在 File → License Management 里导入。
我曾经踩过的坑: 装完 Keil 后直接打开旧项目,结果编译报错说找不到芯片。后来发现是 Pack 没装。记住:先装 IDE,再装 Pack,最后开项目。

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
小技巧: 把模板工程复制一份,改个名就能直接用。我电脑里存了 F103、F407、H743 三套模板,新项目直接复制粘贴,省去重复配置的时间。

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,你可以图形化配置时钟、外设、引脚。我个人觉得这是它最大的优势。

  1. 新建工程,选择芯片型号。
  2. 在 Pinout & Configuration 里配好 GPIO、USART、定时器等。
  3. Clock Configuration 里配好时钟树(HSE、PLL 倍频等)。
  4. Project Manager 里设置工程名、路径、IDE 类型(选 STM32CubeIDE)。
  5. 点击 GENERATE CODE,代码就自动生成了。
注意: 生成的代码里,HAL_Init() 和 SystemClock_Config() 是自动生成的。你只需要在 main() 的 while(1) 里写你的逻辑。但别去修改 CubeMX 生成的初始化代码,否则下次重新生成时会覆盖掉。

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 里配置:

  1. 点击 Project → Options for Target → Debug。
  2. 选择 “J-LINK / J-TRACE Cortex”。
  3. 点击 Settings,确认 SW 或 JTAG 模式(我一般用 SWD,只需要 4 根线)。
  4. 在 Flash Download 里添加对应的算法文件(比如 STM32F10x Flash)。

在 IAR 里配置:

  1. Project → Options → Debugger。
  2. Driver 选 “J-Link/J-Trace”。
  3. 在 Download 标签页里勾选 “Use flash loader(s)”。
我曾经犯过的错: 有一次 J-Link 死活连不上板子,折腾了半天,最后发现是 SWD 的 20pin 排线松了。还有一次是板子没上电,J-Link 的 VTref 灯不亮。记住:先查硬件连接,再查软件配置。

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 里配置:

  1. Debug 选项里选 “ST-Link Debugger”。
  2. Settings 里同样选 SWD 模式,添加 Flash 算法。

3.6 知识结构总览

下面这张图,是我自己总结的开发环境搭建流程。你照着走,基本不会出大问题。

开发环境搭建流程 开发环境搭建知识结构 选择 IDE Keil MDK IAR EWARM STM32CubeIDE 安装 IDE + 芯片支持包 (Pack/Device Support) 创建工程模板 (App / BSP / Drivers) 配置下载器 (J-Link / ST-Link)

3.7 避坑指南

最后,我把自己这些年踩过的坑总结一下。你遇到了,直接翻回来看看。

  • 路径不能有中文和空格:Keil 和 IAR 对中文路径支持很差,编译会报莫名其妙错误。
  • 调试器驱动冲突:如果你同时装了 J-Link 和 ST-Link 驱动,偶尔会冲突。插哪个用哪个,别同时插两个不同的调试器。
  • Flash 算法没选对:下载时报错 “Flash Download failed”,八成是算法文件没选对。去芯片型号对应的 Pack 里找。
  • SWD 线序接反:SWDIO、SWCLK、GND 这三根线必须接对。VCC 可以接也可以不接(如果板子独立供电)。

一句话总结: 环境搭建没有捷径,但按流程走,一次成功。我每次换电脑或重装系统,都会花半天时间把这三套环境配好,然后备份一份。你也试试。