3. 嵌入式开发环境搭建:Keil MDK、IAR EWARM、STM32CubeIDE安装与配置
说实话,搞嵌入式开发这么多年,我见过太多新手在环境搭建这一步就卡住了。不是装错了版本,就是路径带了中文,再不然就是破解工具报毒被系统直接干掉。今天咱们就把这三套主流工具链——Keil MDK、IAR EWARM、STM32CubeIDE——的安装与配置捋一遍。我会把我在项目中踩过的坑也一并说出来,你照着做基本不会出问题。
3.1 为什么需要三套工具?
你可能会问:一个IDE不够用吗?嗯,理论上够。但现实是,不同客户、不同项目、不同芯片厂商,对工具链的要求完全不一样。
| 工具 | 适用场景 | 我的评价 |
|---|---|---|
| Keil MDK | ARM Cortex-M系列,尤其是STM32、NXP、GD32 | 老牌工具,生态最成熟,但授权费贵 |
| IAR EWARM | 对代码体积和性能有极致要求的项目 | 编译器优化确实强,但界面丑了点 |
| STM32CubeIDE | STM32全系列,免费,基于Eclipse | 免费就是最大的优点,而且持续更新 |
3.2 Keil MDK 安装与配置
Keil MDK是我用得最久的工具,从ARM7时代就开始用了。安装过程其实不复杂,但有几个细节你一定要注意。
3.2.1 下载与安装
- 去ARM官网下载MDK-Arm最新版本(目前是5.38或5.39)。
- 运行安装包,安装路径不要有中文和空格。我习惯装到
C:\Keil_v5。 - 安装完成后,打开Keil uVision,点击
Pack Installer安装对应芯片的器件包。
C:\Program Files (x86)\Keil,结果某个老项目的工程文件路径解析出了问题,折腾了我一整天。从那以后,所有开发工具我都装到根目录下的纯英文路径。
3.2.2 配置交叉编译工具链
Keil MDK自带ARMCC编译器,但你也可以换成GCC。我个人建议新手先用自带的ARMCC,等熟悉了再折腾GCC。
// 在Keil中配置编译器路径
Project -> Options for Target -> C/C++ -> Compiler
选择 ARM Compiler 6 (默认) 或 ARM Compiler 5
如果你要用GCC,需要下载ARM GCC工具链,然后在Keil的 Manage Project Items 里指定路径。不过说实话,我很少这么干——Keil的ARMCC已经够用了。
3.3 IAR EWARM 安装与配置
IAR EWARM,圈内人俗称「艾尔」。它的编译器优化确实厉害,同样的代码,IAR编译出来的体积能比Keil小10%左右。但它的界面设计……嗯,只能说很「工程师审美」。
3.3.1 安装步骤
- 从IAR官网下载EWARM安装包,注意选择对应版本(目前是9.x)。
- 运行安装程序,同样避免中文路径。
- 安装过程中会提示选择芯片系列,按需勾选即可。
- 安装完成后,需要注册或破解(公司项目请购买正版)。
Project -> Options -> Linker -> Stack/Heap 里手动调大。
3.3.2 配置交叉编译工具链
IAR自带IAR C/C++ Compiler,不需要额外配置。但如果你要用GCC,需要在 Project -> Options -> C/C++ Compiler 里切换。
// IAR中查看当前编译器版本
Project -> Options -> General Options -> Target
查看 "Compiler version" 字段
3.4 STM32CubeIDE 安装与配置
STM32CubeIDE是ST官方推出的免费IDE,基于Eclipse CDT。说实话,它刚出来的时候bug不少,但经过这几年的迭代,现在已经相当稳定了。而且免费,对学生党和小团队特别友好。
3.4.1 安装步骤
- 去ST官网下载STM32CubeIDE安装包(Windows/Linux/macOS都有)。
- 运行安装程序,选择安装路径(还是那句话,不要中文)。
- 安装完成后,首次启动会提示选择工作空间路径。我习惯单独建一个文件夹,比如
D:\STM32Workspace。 - IDE会自动检测并安装必要的驱动和工具链。
3.4.2 配置交叉编译工具链
STM32CubeIDE自带ARM GCC工具链,路径通常在安装目录下的 plugins\...\tools\compiler。你可以在 Window -> Preferences -> C/C++ -> Build -> Global Tools Paths 里查看和修改。
// 查看当前GCC版本
arm-none-eabi-gcc --version
// 输出示例:
// arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors) 10.3.1 20210824
3.5 交叉编译工具链详解
说白了,交叉编译就是在PC上编译出能在ARM芯片上运行的代码。你用的电脑是x86架构,而嵌入式芯片是ARM架构,所以需要一个「翻译官」——这就是交叉编译工具链。
一套完整的工具链包含:
- 编译器:把C/C++代码编译成汇编(如
arm-none-eabi-gcc) - 汇编器:把汇编转成机器码(如
arm-none-eabi-as) - 链接器:把多个目标文件链接成可执行文件(如
arm-none-eabi-ld) - 调试器:用于调试目标芯片(如
arm-none-eabi-gdb)
| 工具链名称 | 前缀 | 适用架构 | 备注 |
|---|---|---|---|
| ARM GCC | arm-none-eabi- | Cortex-M/R/A | 免费,最常用 |
| ARMCC | armcc | Cortex-M/R/A | Keil自带,商业授权 |
| IAR C/C++ Compiler | iccarm | Cortex-M/R/A | IAR自带,商业授权 |
3.6 本章知识体系
下面这张图帮你理清三套工具链的关系和选择逻辑:
3.7 环境验证
装完工具链后,一定要验证一下能不能正常编译。我习惯写一个最简单的LED闪烁程序来测试。
// main.c - 环境验证测试程序
#include "stm32f1xx_hal.h"
int main(void)
{
HAL_Init();
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);
}
}
如果能编译通过并下载到板子上看到LED闪烁,恭喜你,环境搭建成功了。
好了,环境搭建这部分就到这里。工具链装好了,下一步就是真正开始写代码了。记住,工具只是手段,关键是你能用它做出什么来。