2. 开发环境搭建:Keil MDK / IAR / GCC 工具链安装与配置、调试器驱动安装
说实话,很多初学者把精力都花在了写代码上,结果卡在了环境搭建这一步。我见过不少同事,拿着开发板折腾一整天,最后发现是调试器驱动没装对。这一章,咱们就把这些基础工作一次性搞定。
2.1 三大工具链的选择与安装
ARM Cortex-M 开发,主流工具链就三个:Keil MDK、IAR EWARM、GCC + Makefile/CMake。我个人的建议是:初学者从 Keil MDK 入手,上手最快;做产品量产可以考虑 IAR;开源爱好者或者想深入理解编译过程的,用 GCC。
| 工具链 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Keil MDK | IDE 集成度高,调试方便,中文资料多 | 代码大小限制(免费版 32KB),商业授权贵 | 学习、原型验证、中小项目 |
| IAR EWARM | 编译优化极好,代码密度高 | 界面老旧,学习曲线陡 | 量产产品、对代码大小敏感的项目 |
| GCC + Makefile | 免费开源,跨平台,可定制性强 | 需要自己搭建环境,调试配置复杂 | Linux 开发、CI/CD、深度定制 |
2.1.1 Keil MDK 安装要点
去 Keil 官网下载 MDK-ARM 最新版。安装时注意:路径不要有中文和空格。我习惯装到 C:\Keil_v5,简单明了。
安装完成后,还需要装对应芯片的 Device Family Pack。比如你用 STM32F4 系列,就去 Pack Installer 里搜 STM32F4xx_DFP。这一步很多人会忘,结果编译时报找不到头文件。
2.1.2 IAR EWARM 安装要点
IAR 的安装相对简单,一路 Next 就行。但要注意:License 管理比较严格。如果你用的是破解版,记得先运行注册机,再导入 License 文件。
我个人不太喜欢 IAR 的界面风格,但不得不承认,它的编译器确实厉害。同样的代码,IAR 编译出来的体积往往比 Keil 小 10%-20%。
2.1.3 GCC 工具链搭建
GCC 我推荐用 ARM GCC(官方叫 arm-none-eabi-gcc)。去 ARM 官网下载,或者用 gcc-arm-none-eabi 这个包。
Windows 下,我习惯搭配 MSYS2 或者 Cygwin 来模拟 Linux 环境。当然,你也可以直接用 STM32CubeIDE,它内置了 GCC 工具链,省事。
# 验证 GCC 是否安装成功
arm-none-eabi-gcc --version
# 输出示例
arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
2.2 调试器驱动安装
调试器是连接 PC 和开发板的桥梁。最常见的两种:J-Link(SEGGER 出品)和 ST-Link(ST 官方出品)。
2.2.1 J-Link 驱动安装
去 SEGGER 官网下载 J-Link Software and Documentation Pack。安装后,会自动安装驱动。插上 J-Link,设备管理器里应该能看到 J-Link driver。
我曾经遇到过一个问题:J-Link 插上后,电脑识别为“未知设备”。后来发现是驱动签名问题。Windows 10/11 需要禁用驱动签名强制,或者用 SEGGER 提供的 J-Link CDC 驱动 手动更新。
2.2.2 ST-Link 驱动安装
ST-Link 驱动通常集成在 STM32CubeProgrammer 或者 STM32CubeIDE 里。你也可以单独下载 ST-Link 驱动 安装包。
插上 ST-Link 后,设备管理器里应该出现 STMicroelectronics STLink dongle。如果显示黄色感叹号,说明驱动没装好。右键更新驱动,手动选择驱动目录即可。
| 调试器 | 驱动安装方式 | 常见问题 |
|---|---|---|
| J-Link | SEGGER 官网下载安装包 | 盗版固件问题、驱动签名 |
| ST-Link | STM32CubeProgrammer 自带 | 驱动冲突、USB 识别失败 |
2.3 工程模板创建与验证
环境搭好了,咱们得跑个程序验证一下。我以 Keil MDK 为例,创建一个最简单的工程。
- 打开 Keil,点击 Project → New μVision Project。
- 选择芯片型号,比如
STM32F103C8。 - 在弹出的 Manage Run-Time Environment 里,勾选
CMSIS → CORE和Device → Startup。 - 添加一个 main.c 文件,写个简单的点灯程序。
#include "stm32f1xx.h"
int main(void)
{
// 使能 GPIOC 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// 配置 PC13 为推挽输出
GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13);
GPIOC->CRH |= GPIO_CRH_MODE13_0; // 输出模式,最大 10MHz
while(1)
{
GPIOC->BSRR = GPIO_BSRR_BS13; // 点亮 LED
for(volatile uint32_t i = 0; i < 500000; i++);
GPIOC->BSRR = GPIO_BSRR_BR13; // 熄灭 LED
for(volatile uint32_t i = 0; i < 500000; i++);
}
}
编译通过后,连接调试器,点击 Download。如果 LED 开始闪烁,恭喜你,环境搭建成功了!
2.4 知识体系总览
下面这张图,帮你理清开发环境搭建的整体脉络。
2.5 常见问题与解决
环境搭建过程中,我遇到过不少坑。这里列几个最常见的:
- 编译报错找不到头文件:检查 Device Family Pack 是否安装,或者工程里是否添加了 CMSIS 核心库。
- 下载失败,提示“No Cortex-M SW Device Found”:检查调试器连接,确认 SWD 线序是否正确(SWDIO、SWCLK、GND)。
- J-Link 灯不亮:可能是 USB 供电不足,换一个 USB 口试试。或者 J-Link 固件损坏,需要重新刷写。
- ST-Link 驱动安装失败:卸载旧驱动,重启电脑,再重新安装。或者用 Zadig 工具强制替换驱动。