Keil vs VSCode vs STM32CubeIDE:嵌入式IDE对比
新手入门STM32,第一个问题就是"用什么IDE"。
网上推荐一大堆,但很多人连"IDE"“编译器”"调试器"都分不清,更别提CMake、OpenOCD这些词了。
这篇先用大白话解释这些概念,再对比三种主流IDE,用具体场景帮你选对工具。
一、先搞懂几个基础概念(新手必看)
在看IDE对比之前,先搞清楚这些反复出现的术语是什么,不然后面全看不懂。
1.1 IDE是什么?
IDE(Integrated Development Environment,集成开发环境)= 把"写代码+编译+下载+调试"集成在一起的软件。
你平时写C语言用的Dev-C++、VC6.0就是IDE。STM32开发也需要IDE,但比Dev-C++多了"下载到芯片"和"在线调试"功能。
1.2 编译器是什么?
编译器= 把你写的C代码翻译成芯片能执行的机器码(.hex/.bin文件)。
不同芯片用不同编译器:
- ARMCC/ARMCLANG:Keil自带的编译器,速度快、体积小,但收费
- GCC(ARM GCC):开源免费编译器,VSCode和CubeIDE都用它,速度比ARMCC慢一点
编译器的好坏影响编译速度和生成代码的大小。新手感受最深的是编译速度——一个大项目ARMCC编30秒,GCC可能要1分钟。
1.3 CubeMX是什么?
STM32CubeMX(简称CubeMX)= ST官方出的图形化配置工具。
不用CubeMX的话,你要手动写几百行代码初始化GPIO/串口/定时器/时钟。用了CubeMX,你在图形界面点几下(选引脚、选功能、设参数),它自动生成初始化代码,你只需要在main()里写业务逻辑。
没CubeMX: 手动查Datasheet → 手动配置寄存器 → 手动写几百行初始化代码 → 容易出错 有CubeMX: 打开CubeMX → 点选PA9为USART1_TX → 设波特率115200 → 一键生成代码 → 完事Keil不自带CubeMX(要单独下载),CubeIDE自带CubeMX(在IDE里直接用)。
1.4 调试器是什么?
调试器= 连接电脑和STM32的硬件工具,用来下载程序和在线调试(打断点、看变量)。
常见的调试器:
- ST-Link:ST官方出的调试器,十几块钱,用SWD接口
- J-Link:SEGGER公司出的调试器,功能更强但贵(正版几百块)
SWD(Serial Wire Debug,串行线调试)是STM32的调试接口,只需2根线(SWDIO+SWCLK)就能下载和调试。
1.5 CMake/Makefile是什么?
CMake/Makefile= 构建工具,告诉编译器"哪些文件要编译、怎么链接"。
Keil不需要这些——你在Keil的图形界面把.c文件加进工程,Keil自己管。但VSCode没有图形化的工程管理,需要你写CMake/Makefile来告诉编译器怎么编译。
新手不需要学CMake/Makefile,用Keil或CubeIDE就行。这是VSCode方案才需要的。
1.6 OpenOCD是什么?
OpenOCD(Open On-Chip Debugger)= 开源调试代理。
VSCode本身不能直接控制ST-Link/J-Link调试STM32,需要OpenOCD做"中间人":VSCode发调试命令 → OpenOCD翻译 → 控制ST-Link → 操作STM32。
Keil和CubeIDE自带调试支持,不需要OpenOCD。只有用VSCode调试时才需要装。
1.7 CI/CD是什么?
CI/CD(持续集成/持续部署)= 自动化编译发布流程。代码推到Git仓库后,服务器自动编译、测试、打包。这是公司项目才用的,个人学习不需要管。
二、三种IDE简介
| IDE | 厂商 | 特点 | 适合谁 |
|---|---|---|---|
| Keil MDK | ARM官方 | 嵌入式老大哥,教程最多 | 刚入门的学生 |
| VSCode + 插件 | 微软 | 颜值高、编辑器最强 | 有基础的开发者 |
| STM32CubeIDE | ST官方 | 免费、内置CubeMX、调试强 | 不想花钱的人 |
三、Keil MDK
3.1 优点
- 教程最多:B站90%的STM32教程基于Keil,跟着学不会卡住
- 调试强大:断点、变量监控、寄存器查看、Logic Analyzer(逻辑分析仪,能在软件里看GPIO/ADC波形)
- 编译快:ARMCC/ARMCLANG编译器(就是前面说的收费编译器)效率高
- 工程管理简单:图形界面添加文件,不用写Makefile
- 下载调试一键搞定:点一下就编译+下载+开始调试
3.2 缺点
- 收费:正版几千美元,免费版限制32KB Flash(代码大了编不过)
- 界面老旧:像Windows XP时代的UI,不好看
- 编辑器弱:代码补全、跳转都不如VSCode
- 只支持Windows(有Linux版但很少用)
- 不自带CubeMX:需要单独下载CubeMX生成代码后导入Keil
3.3 具体场景
假设你在做一个温湿度采集器,用Keil开发:
- 先用CubeMX配置引脚和I2C,生成代码
- 用Keil打开生成的工程,写SHT30驱动和主程序
- 点"Build"编译,点"Download"下载到板子
- 点"Debug"进入调试,打断点看传感器数据
全程不需要碰命令行,适合刚入门的新手。
3.4 适合人群
- 学生入门:教程多,跟着B站学不会卡住
- 学校实验室用Keil的(大部分学校都是)
- 需要调试底层问题的
四、VSCode + 插件
4.1 配置方案
VSCode本身只是个文本编辑器(虽然很强),开发STM32需要一堆插件和工具配合:
VSCode编辑器(写代码) + C/C++插件(代码补全/跳转) + Cortex-Debug插件(调试界面) + CMake/Makefile(告诉编译器怎么编译) + ARM GCC工具链(编译C代码的工具) + OpenOCD(连接调试器的中间人) + ST-Link/J-Link(硬件调试器)看到没?VSCode方案要装这么多东西,新手配一个可能就要一整天。
4.2 优点
- 编辑器最强:代码补全、跳转、重构、Git集成都是顶级体验
- 颜值高:主题丰富,界面现代
- 跨平台:Windows/Linux/Mac都能用
- 免费:VSCode和GCC工具链都免费
- 高度可定制:想加什么功能装插件
4.3 缺点
- 配置复杂:要装一堆插件和工具,配错一个就编译不过,新手不知道哪的问题
- 调试不如Keil直观:Cortex-Debug够用但没Keil的寄存器查看方便
- 不自带CubeMX:需要单独用CubeMX生成再导入
4.4 具体场景
假设你已经有半年STM32经验了,觉得Keil编辑器太难用(代码补全像没有一样),想换VSCode:
- 装VSCode + C/C++插件 + Cortex-Debug插件
- 装ARM GCC工具链 + CMake + OpenOCD
- 写CMakeLists.txt告诉编译器怎么编译
- 配launch.json告诉Cortex-Debug怎么调试
- 配好之后,编辑代码享受VSCode的补全和跳转,编译调试也能在VSCode里完成
适合有一定基础、愿意折腾配置的人。
4.5 适合人群
- 有一定基础的开发者(至少能独立配环境)
- 追求编辑体验的人
- Linux/Mac用户(Keil不支持Mac/Linux)
- 做开源项目的人
五、STM32CubeIDE
5.1 简介
ST官方基于Eclipse开发的免费IDE。内置CubeMX,一站式解决配置+开发+调试,不用在CubeMX和IDE之间来回切换。
Eclipse是一个开源的IDE框架,很多IDE基于它开发(如CubeIDE、Nordic的nRF Connect SDK)。优点是功能丰富,缺点是界面复杂、启动慢。
5.2 优点
- 完全免费:无Flash大小限制,代码写多大都行
- CubeMX内置:在IDE里直接图形化配置引脚和外设,一键生成代码,不用单独开CubeMX
- 调试强大:支持断点/变量监控/寄存器查看/SWD调试,用ST-Link直接调试
- ST官方支持:新出的芯片第一时间支持
- 跨平台:Windows/Linux/Mac
5.3 缺点
- 基于Eclipse:界面复杂,启动慢(打开要等好几秒)
- 编辑器一般:不如VSCode,比Keil略好一点
- 编译较慢:用GCC编译器(前面说的免费但较慢的编译器)
- 吃内存:建议电脑8GB以上内存
- 教程较少:B站教程不如Keil多
5.4 具体场景
假设你不想花钱买Keil,又不想折腾VSCode那一堆配置,用CubeIDE:
- 打开CubeIDE → 新建工程 → 选芯片型号
- 在内置的CubeMX界面里配置引脚、时钟、I2C
- 一键生成代码,直接在同一个IDE里写主程序
- 点"Run"编译下载,点"Debug"调试
全程在一个软件里完成,不用来回切换。
5.5 适合人群
- 不想花钱买Keil的学生
- 喜欢一体化工具链、不想折腾配置的
- 用ST芯片的(官方支持最好)
六、横向对比
| 对比项 | Keil MDK | VSCode | CubeIDE |
|---|---|---|---|
| 价格 | 收费(免费版32KB限制) | 免费 | 免费 |
| 编辑器体验 | ★★(弱) | ★★★★★(最强) | ★★★(一般) |
| 调试体验 | ★★★★★(最强) | ★★★(够用) | ★★★★(好) |
| 配置难度 | ★★(简单) | ★★★★★(复杂) | ★★★(中等) |
| 编译速度 | ★★★★★(最快) | ★★★★(快) | ★★★(较慢) |
| CubeMX集成 | 需单独开 | 需单独开 | ✅内置 |
| 教程数量 | ★★★★★(最多) | ★★★(少) | ★★★(少) |
| 跨平台 | ❌仅Windows | ✅全平台 | ✅全平台 |
七、我的推荐方案(用具体场景说)
7.1 场景1:刚入门的大一/大二学生 → Keil
你的情况: - 刚学STM32,看B站教程学 - 还不会配置开发环境 - 学校实验室用Keil 推荐:Keil 理由: - 90%的教程基于Keil,跟着视频不会卡住 - 配置最简单:装好Keil→选芯片→写代码→一键编译下载 - 调试最直观:断点、变量、寄存器一目了然7.2 场景2:有基础了,嫌Keil编辑器难用 → Keil + VSCode混用
你的情况: - 已经会用Keil了 - 觉得Keil代码补全太烂,跳转不准 - 想用VSCode写代码但又不想放弃Keil的编译调试 推荐:Keil + VSCode混用 做法: Keil:负责编译和调试(用Keil的工程文件.uvprojx) VSCode:负责编辑代码(用VSCode打开同一个目录) 两者共用同一套代码文件,编辑时用VSCode享受补全跳转, 编译下载调试时切回Keil。这是最流行的组合:享受VSCode的编辑体验,同时用Keil的编译和调试。
7.3 场景3:不想花钱,又不想折腾配置 → CubeIDE
你的情况: - Keil免费版32KB不够用了 - 不想花钱买Keil - 不想折腾VSCode那一堆插件配置 推荐:CubeIDE 理由: - 完全免费,无Flash限制 - CubeMX内置,一站式配置+开发+调试 - 装一个软件就能用,不用配一堆工具7.4 场景4:老手追求极致体验 → VSCode + CMake + GCC
你的情况: - 有一定经验,能独立配环境 - 用Linux/Mac开发 - 做开源项目或需要CI/CD自动化编译 推荐:VSCode + CMake + ARM GCC + OpenOCD 理由: - 编辑体验最佳 - 跨平台 - 但配置门槛高,有经验后再用八、Keil + VSCode混用配置(实操步骤)
8.1 第一步:Keil创建工程
- 打开Keil → Project → New Project
- 选芯片型号(如STM32F103C8)
- 在Manage Run-Time Environment里勾选需要的组件(或用CubeMX生成后导入)
- 配置时钟、外设(用CubeMX的话这步在CubeMX里做)
- 确认能编译下载
如果你不会在Keil里建工程,先看我之前的《点亮LED的3种方法》那篇,里面有完整步骤。
8.2 第二步:用VSCode打开工程目录
在VSCode里 → File → Open Folder → 选Keil工程所在的文件夹。
8.3 第三步:安装VSCode插件
| 插件 | 作用 |
|---|---|
| C/C++ | 代码补全、跳转、语法检查(必装) |
| C/C++ Snippets | 常用代码片段 |
| Include Autocomplete | 头文件自动补全 |
| GitLens | Git增强(看代码是谁什么时候改的) |
| Keil Assistant | 在VSCode里直接编译Keil工程(不用切Keil) |
装了Keil Assistant插件后,可以在VSCode里直接点"Build"编译Keil工程,不用切回Keil。
8.4 第四步:配置c_cpp_properties.json
让VSCode知道头文件路径,实现代码跳转(不然红线一片,跳转不了):
在VSCode里按Ctrl+Shift+P→ 输入C/C++: Edit Configurations (JSON)→ 自动生成.vscode/c_cpp_properties.json:
{"configurations":[{"name":"STM32","includePath":["${workspaceFolder}/**","${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc","${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include","${workspaceFolder}/Inc"],"defines":["STM32F103xB",/* ← 改成你的芯片型号,如F407用STM32F407xx */"USE_HAL_DRIVER"/* ← 表示使用HAL库,不用改 */],"cStandard":"c99"}]}
defines里的STM32F103xB要根据你的芯片型号改:F103C8用STM32F103xB,F103ZE用STM32F103xG,F407用STM32F407xx。这个宏告诉编译器你用的具体芯片型号,影响头文件里的寄存器定义。
九、常见踩坑
坑1:Keil免费版32KB限制
现象:代码超过32KB时编译报错Error: L6406E: No space in execution regions。
解决:
- 方案1:去Keil官网申请教育版授权(免费),网址 https://www.keil.com/pr/article/1286.htm ,用学校邮箱申请
- 方案2:换用CubeIDE(完全免费无限制)
- 方案3:优化代码体积(开启-O优化,删除无用代码)
坑2:VSCode代码跳转不对/红线一片
原因:c_cpp_properties.json里includePath没配全,或者defines里的芯片型号不对。
解决:把所有头文件目录都加到includePath,确认defines里的芯片型号和Keil工程一致。
坑3:CubeIDE编译慢
原因:GCC编译器比Keil的ARMCC慢。
解决:
- 开启并行编译:Project → Properties → C/C++ Build → Behavior → 勾选"Enable parallel build"
- 调试时用
-O0(不优化),发布时用-Os(优化体积)
十、总结
| 你的情况 | 推荐 |
|---|---|
| 刚入门,看B站教程学 | Keil(教程多,配置简单) |
| 有基础了,嫌Keil编辑器难用 | Keil + VSCode混用(编辑用VSCode,编译用Keil) |
| 不想花钱,不想折腾配置 | CubeIDE(免费,一体化) |
| 老手,用Linux/Mac,做开源 | VSCode + CMake + GCC |
一句话总结:新手用Keil入门(教程多配置简单),进阶用Keil+VSCode混用(编辑体验好),不想花钱用CubeIDE(免费一体化),老手折腾VSCode+GCC。
相关文章推荐:
- Git版本管理:从零开始,用学生项目讲透每个命令
- STM32入门第一课:点亮LED的3种方法
作者:嵌入式阿蔡 | 一枚准大四的嵌入式菜鸟,正在打牢基础,记录成长