嵌入式工具链的选择与搭建

嵌入式工具链的选择与搭建
星野暗涌一、 工具链的对比解说
学习 STM32 之前,很多同学会先卡在一个问题上:到底应该用什么软件?
Keil、IAR、STM32CubeIDE、STM32CubeMX、VS Code、HAL 库、标准库、GCC、OpenOCD、ST-Link,这些名字看起来像是同一类东西,但实际上它们承担的职责并不一样。
所以在真正安装软件之前,我们要先把“工具链选型”这件事说清楚。
1. 什么是嵌入式工具链
嵌入式开发不是把 C 代码写完就结束了。代码必须经过编译、链接、烧录、调试,最后才能在 MCU 上运行。
flowchart LR
A["编写代码"] --> B["配置芯片资源"]
B --> C["编译 C / 汇编源码"]
C --> D["链接生成 ELF / HEX / BIN"]
D --> E["通过下载器烧录到 Flash"]
E --> F["在真实硬件上运行"]
F --> G["断点、单步、看寄存器调试"]
因此,“工具链”不是某一个软件,而是一整套协作关系。
| 环节 | 解决的问题 | 常见工具 |
|---|---|---|
| 代码编辑 | 写 C 代码、看源码、管理工程 | VS Code、Keil 编辑器、STM32CubeIDE |
| 芯片配置 | 配置引脚、时钟、外设、生成初始化代码 | STM32CubeMX、STM32CubeIDE |
| 编译链接 | 把 C 代码变成 MCU 能执行的机器码 | Arm Compiler、GCC Arm、IAR Compiler |
| 烧录下载 | 把程序写进芯片 Flash | ST-Link、J-Link、DAP-Link |
| 在线调试 | 断点、单步、查看寄存器和内存 | Keil Debug、IAR Debug、GDB、OpenOCD |
| 库与框架 | 提供外设 API,降低寄存器使用门槛 | HAL、LL、CMSIS、标准外设库 |
理解了这张表,后面再看各种工具组合就不会乱了。
2. 常见工具链组合
STM32 开发中,常见组合大致可以分成五类。
mindmap
root((STM32 工具链选型))
Keil MDK + SPL
老项目常见
标准库已停止更新
不适合新手主线学习
Keil MDK + CubeMX + HAL
企业常见
编译调试稳定
编辑体验一般
VS Code + Keil + CubeMX + HAL
兼顾企业工具和现代编辑体验
适合课程学习
需要理解各工具分工
STM32CubeIDE + HAL
ST 官方一体化
安装简单
集成度高
IAR + CubeMX + HAL
企业高端项目常见
授权成本高
不适合普通初学者
下面逐个分析。
2.1 C 语言 + Keil MDK + 标准外设库
这是很多老教程里常见的组合。
flowchart LR
C["C 语言代码"] --> SPL["标准外设库 SPL"]
SPL --> Keil["Keil MDK"]
Keil --> MCU["STM32 MCU"]
标准外设库,也就是 Standard Peripheral Library,曾经是 STM32 学习和开发中的主流方案。
但是现在不建议把它作为新项目和新课程的主线,原因很简单:它已经是偏旧的生态。很多老项目仍然能见到它,但 ST 后来的主要生态已经转向 STM32CubeMX、HAL、LL 这一套。
| 角度 | 评价 |
|---|---|
| 优点 | 代码相对直观,很多老教程资料使用它 |
| 缺点 | 生态陈旧,官方主线已经转向 Cube/HAL/LL |
| 适合场景 | 维护老项目、看老教程、理解早期 STM32 开发方式 |
| 不适合场景 | 新手系统学习、新项目开发、课程主线 |
结论:可以了解,但不建议作为当前学习主线。
2.2 C 语言 + Keil MDK + STM32CubeMX + HAL 库
这是目前比较常见、也比较实用的组合。
sequenceDiagram
participant User as 开发者
participant Cube as STM32CubeMX
participant HAL as HAL 库
participant Keil as Keil MDK
participant MCU as STM32
User->>Cube: 配置芯片型号、引脚、时钟、外设
Cube-->>User: 生成初始化代码
User->>HAL: 调用 HAL API 编写功能逻辑
User->>Keil: 编译、链接、下载、调试
Keil->>MCU: 烧录程序并在线调试
这套方案的分工非常清楚:
| 工具 | 职责 |
|---|---|
| STM32CubeMX | 图形化配置芯片资源,生成初始化代码 |
| HAL 库 | 提供外设抽象 API,降低直接配置寄存器的门槛 |
| Keil MDK | 编译、链接、烧录、调试 |
它的最大优点是贴近企业真实环境。很多公司依然使用 Keil MDK 做 Cortex-M 项目,尤其是 STM32、GD32 等 MCU 项目。
但它也有一个明显缺点:Keil 的代码编辑体验比较传统。写小工程还可以,项目稍微大一点,代码跳转、搜索、插件、主题、多文件管理等体验就不如 VS Code 舒服。
结论:稳定、常见、工程上有价值,但编辑体验一般。
2.3 C 语言 + VS Code + Keil MDK + STM32CubeMX + HAL 库
这是比较适合作为课程学习的折中方案。
flowchart TB
Cube["STM32CubeMX:配置引脚 / 时钟 / 外设"] --> Code["生成 HAL 初始化代码"]
Code --> VS["VS Code:阅读源码 / 编写业务代码"]
VS --> Keil["Keil MDK:编译 / 链接 / 下载 / 调试"]
Keil --> Board["开发板:真实运行与验证"]
这套组合的思路是:
让专业工具做专业的事,让好用的编辑器负责写代码。
也就是说,Keil 仍然负责编译、下载和调试,STM32CubeMX 负责配置芯片,VS Code 则负责更舒服地写代码和看代码。
| 工具 | 在这套组合中的定位 |
|---|---|
| STM32CubeMX | 负责硬件配置和初始化代码生成 |
| HAL 库 | 负责提供外设 API |
| Keil MDK | 负责工程编译、链接、下载、调试 |
| VS Code | 负责现代化编辑体验、代码阅读、插件扩展 |
这套方案的优点是兼顾了“企业常见工具链”和“现代代码编辑体验”。对于初学者来说,它还有一个额外好处:你会更清楚地看到每个工具到底在做什么,而不是被一个高度集成的 IDE 全部包起来。
结论:推荐作为 STM32 入门课程主线。
2.4 C 语言 + STM32CubeIDE + HAL 库
STM32CubeIDE 是 ST 官方推出的一体化开发环境。
它把 CubeMX 配置、代码编辑、编译、下载、调试整合到一个 IDE 里。
flowchart LR
IDE["STM32CubeIDE"] --> Config["芯片配置"]
IDE --> Edit["代码编辑"]
IDE --> Build["编译链接"]
IDE --> Debug["下载调试"]
Debug --> MCU["STM32"]
它的优点是安装和上手相对统一,不需要在多个软件之间来回切换。对一些初学者来说,这种“一体化”会降低环境搭建难度。
但从课程学习角度看,它也有一个问题:集成度太高。很多底层过程被 IDE 包起来了,初学者可能只知道点按钮,不知道背后发生了什么。
| 角度 | 评价 |
|---|---|
| 优点 | 官方一体化,安装简单,工具统一 |
| 缺点 | 集成度高,容易弱化对编译、链接、下载、调试分工的理解 |
| 适合场景 | 快速体验 STM32、个人小项目、偏官方生态的开发 |
| 课程建议 | 可以作为备选,但不作为理解工具链分工的最佳主线 |
结论:能用,而且官方支持很好,但不一定最适合用来拆解学习过程。
2.5 C 语言 + IAR + STM32CubeMX + HAL 库
IAR Embedded Workbench 是嵌入式行业中非常经典的商业 IDE。
它在一些对稳定性、代码质量、编译优化、认证要求较高的企业项目中比较常见。
但是它最大的问题是授权成本较高,对普通学习者并不友好。
| 角度 | 评价 |
|---|---|
| 优点 | 商业成熟,编译器质量高,企业项目中常见 |
| 缺点 | 授权成本高,不适合普通初学者长期使用 |
| 适合场景 | 企业项目、特定行业项目、已有 IAR 授权的团队 |
| 学习建议 | 了解即可,不作为新手主线工具 |
结论:企业里可能会遇到,但入门阶段没有必要把它作为主要工具。
2.6 GCC + CMake + OpenOCD + VS Code
这是一条更偏开源和工程化的路线。
flowchart LR
VS["VS Code"] --> CMake["CMake / Make"]
CMake --> GCC["GCC Arm 编译器"]
GCC --> ELF["ELF / HEX / BIN"]
ELF --> OpenOCD["OpenOCD"]
OpenOCD --> Probe["ST-Link / J-Link"]
Probe --> MCU["STM32"]
这套方案不依赖 Keil 或 IAR,工具更开放,也更接近一些现代嵌入式工程、自动化构建、CI/CD、跨平台开发的做法。
但它对初学者要求更高。你需要理解编译器、链接脚本、启动文件、Make/CMake、GDB、OpenOCD 等内容。它很强,但不适合一开始就作为零基础入门路线。
| 角度 | 评价 |
|---|---|
| 优点 | 开源、灵活、适合自动化构建和跨平台工程 |
| 缺点 | 环境配置复杂,初学门槛高 |
| 适合场景 | 工程化项目、Linux/macOS 开发、CI/CD、深入理解底层构建 |
| 学习建议 | 有一定 STM32 基础后再学习 |
结论:进阶非常值得学,但不是最适合第一阶段的路线。
3. 为什么本课程推荐这套组合
综合学习成本、企业常见度、资料丰富度、调试便利性和代码编辑体验,推荐使用:
flowchart LR
A["C 语言"] --> B["STM32CubeMX"]
B --> C["HAL 库"]
C --> D["Keil MDK"]
D --> E["VS Code 辅助编辑"]
E --> F["STM32 开发板"]
也就是:
| 组成 | 作用 |
|---|---|
| C 语言 | 嵌入式 MCU 开发的基础语言 |
| STM32CubeMX | 配置芯片、生成初始化代码 |
| HAL 库 | 提供统一外设 API,适合入门和工程开发 |
| Keil MDK | 负责编译、链接、下载、调试 |
| VS Code | 提升代码编辑和阅读体验 |
选择这套方案不是因为它“最先进”,而是因为它适合当前阶段。
它有几个现实优势。
| 维度 | 为什么合适 |
|---|---|
| 学习门槛 | 不需要一开始就手写所有寄存器配置 |
| 工程感 | 能看到配置、编译、下载、调试各环节 |
| 企业相关性 | Keil、CubeMX、HAL 在 STM32 项目中非常常见 |
| 调试体验 | Keil 对 Cortex-M 在线调试比较成熟 |
| 编辑体验 | VS Code 弥补 Keil 写代码不舒服的问题 |
| 后续迁移 | 学会这套后,再迁移到 CubeIDE、IAR、GCC/CMake 都更容易 |
4. 选型结论
如果只是快速体验 STM32,可以用 STM32CubeIDE。
如果是在维护老项目,可能会遇到 Keil + 标准库。
如果是在企业高要求项目中,可能会遇到 IAR。
如果以后想走更工程化、更开源的路线,可以学习 GCC + CMake + OpenOCD。
但对于当前课程和大多数 STM32 初学者,我更建议从下面这套开始:
flowchart TD
Start["STM32 初学者"] --> Choice["推荐工具链"]
Choice --> CubeMX["STM32CubeMX:配置芯片"]
Choice --> HAL["HAL 库:调用外设 API"]
Choice --> Keil["Keil MDK:编译、烧录、调试"]
Choice --> VSCode["VS Code:写代码、读源码"]
CubeMX --> Project["形成可运行工程"]
HAL --> Project
Keil --> Project
VSCode --> Project
最终记住一句话:
工具链选型不是追求“哪个软件最强”,而是选择一套最适合当前学习阶段、最方便理解工程流程、也最容易迁移到真实项目的组合。
二、 搭建基础开发环境
1. 安装 vscode
首先就是 vscode的安装,首先我们呢需要去他的官网来下载他安装包:
下载地址默认会识别你的操作系统进行对应的安装包下载
下载之后 打开默认的安装包:
进入下载流程
选择同意协议
勾选配置
点击安装即可
打开软件
显示界面说明安装完成:vscode本身就是一个强大的文本编辑器,它自身的配置 可简单 也可以复杂, 这全然取决于你自己的想法,关于vscode的配置自身是一个非常庞大话题,网上已经有很多的教程们这里就不再赘述,对此感兴趣的同学可以移步这个视频
2. keil MDK的安装
他本身是 的单片机开发的集成开发环境,能够兼容市面上的大部分的单片机开发
下载连接: https://www.keil.arm.com/mdk-community/
⚠之一以下几点:
- 安装得分路径一定要是全英文,不能出现英文
- 安装目录下不能跟51的KEIL或者是 KEIL4冲突 三者的目录必须要分开!!
- 使用时如果出现了莫名其妙的错误,优先使用
google或者是ai来解决问题,切勿自乱阵脚
点击之后会跳转到这样的界面,现在还没有到真正可以下载的页面,此时它提示还需要你提供一定的信息 才能继续下载社区版本。
填写好信息之后就会跳转到可以下载按爪改版的界面了:
- 下载完之后我们就会得到在这样的安装包,接下来双击打开开始下载流程:
选择两个路径存放相关的二进制文件和包库:
下一步的邮箱和个人信息可以随便填写,填写完成之后就会进入安装流程。
显示这样的界面就说明已经安装成功了:
接下来就是下载我们将来需要使用到的芯片包,现在对此感到比较迷糊很正常,只要在下载好 keil之后再搜索框输入 指定的型号:
- stm32F103
此时也可以发现我们之前指定的 pack安装路径也已经出现了我们现在安装的 芯片包:
3. STM32cubeMX的安装
他的定位是硬件初始化与代码生成的图形化工具,其实他的核心意义就是将配置可视化,动态生成配置代码。
下载地址: https://www.st.com/en/development-tools/stm32cubemx.html
- 点击下载
- 以游客的身份来下载软件:
- 填写信息,获取下载链接:
- 填写之后,在自己的有子昂这里就会收到一个下载链接:
基本的软件安装和钱买你的大同小异,基本上就是同意他的策略,然后选择默认软件的安装路径,只需要进行到这一步,选择默认就可直接安装:在这里有一个小插曲,就是在安装这个软件之后会发现打开之后他就叉不掉了,这是用为他的后台更新程序正在检查后台
在遇到这个问题的时候点击CHECK FOR UPDATES这个按钮反复多点击几次,此时只需要等到一会儿就可以了
安装好之后就可以正常的打开软件了,但是如果未来想要更好的使用,还必须要注册信息才行,需要一个意法半导体的官方账号才行。
注册链接: https://www.st.com.cn/content/st_com/zh.html
注册账号之后,就开始安装固态库:
此时我们需要更换固态可的安装路径:
- 固态库的文件体积比较大,不建议安装在
c disk - 不要安装在
STM32CubeMX软件相同的目录下 - 不要安装在有中文的路径下
- 点击下载固态库
- 选中指定的固态库进行下载就可以了
- 此时提示需要验证邮箱,把当时自己及用来注册意法半导体的官方账号的邮箱拿来验证就可以了:
接下来现在固件库就下载完成了,在第一次使用时才会提示需要这样的繁琐的配置,后面都不再需要这样繁琐的认证,只需要进行简单的验证即可。
进行的走这里基本的工具链路的选择基本就完成了,在后面的文章中会着重的讲解怎么串联工具链进行嵌入式的基本开发,当然这需要我么不能对接下来的硬件
MCU有更进一步的认识,所以下一期就回来是介绍介绍一些基本的硬件知识。路漫漫其修远兮~~ 在嵌入式的路上我们都还有很长的路要走 🥰






































