一 本章简介
俗话说,工欲善其事,必先利其器。在正式踏入嵌入式开发的世界之前,我们首先需要搭建好一套完整的开发环境。这就像厨师在做菜前要准备好锅碗瓢盆和各种食材一样,没有趁手的工具,再好的手艺也无处施展。
嵌入式开发环境的搭建是很多初学者遇到的第一个 拦路虎 。与传统的软件开发(如 Web 开发、Python 脚本)不同,嵌入式开发会涉及到硬件和软件的结合,需要安装的工具较多,配置过程也相对复杂。但请不要担心——本章将手把手地带你完成所有环境的搭建(除了KEIL,这个安装挺简单的,而且因为版权问题我也不会提供特殊用法哦!),尽量每一步都有详细的说明和截图。
本章将带你完成三种开发环境(KEIL-VS Code-CLion)的搭建,包括:
- 软件环境:IDE(集成开发环境)的安装与配置、编译器工具链、烧录软件等。
- 硬件驱动:调试器驱动的安装。
- 辅助工具:串口调试工具、数据可视化工具、终端工具等。
- 调试器选择与使用:介绍市面上常见的调试器,以及如何连接和配置。
- 常用工具介绍:万用表、示波器、逻辑分析仪等硬件工具【TODO,等待后续更新】。
IMPORTANT
请务必完成本章的环境搭建后,再进行后续章节的学习! 如果环境没有搭建好,后续学习会遇到各种奇怪的问题,导致事倍功半。磨刀不误砍柴工,耐心地把环境配置好是入门嵌入式的第一课。
TIP
遇到问题怎么办?
环境搭建过程中难免会遇到各种问题,这是正常的。建议你:
- 仔细阅读错误信息:很多问题的答案就藏在错误提示中。
- 善用搜索引擎:把错误信息复制到 Google/Bing/Baidu 搜索,通常能找到解决方案。
- 使用 AI 工具:豆包,DeepSeek,ChatGPT等 AI 工具可以帮助分析错误原因。
- 查阅软件的官方文档:官方文档虽然有时候很长,但一般是最权威的参考。
- 社区求助:添加开发菌的企业微信,进入【立创开发板「天空星·筑基学习板」交流群】询问。
1.1 学习目标
完成本章学习后,你将能够:
| 序号 | 学习目标 | 重要程度 |
|---|---|---|
| 1 | 成功安装 Keil MDK 开发环境,理解 AC5 和 AC6 编译器的区别 | ⭐⭐⭐⭐⭐ |
| 2 | 成功安装 VS Code + EIDE 插件开发环境 | ⭐⭐⭐⭐ |
| 3 | 成功安装 CLion + GCC 工具链开发环境 | ⭐⭐ |
| 4 | 成功安装 STM32CubeMX 和 STM32CubeProgrammer 软件 | ⭐⭐⭐⭐⭐ |
| 5 | 成功安装各类调试器驱动(DAPLink、ST-Link、J-Link) | ⭐⭐⭐⭐⭐ |
| 6 | 掌握常用串口调试工具的使用(VOFA+、MobaXterm 等) | ⭐⭐⭐⭐ |
| 7 | 了解不同的程序下载方式(USB、串口、SWD/JTAG) | ⭐⭐⭐⭐ |
| 8 | 了解嵌入式开发中常用的硬件工具(万用表、示波器、逻辑分析仪) | ⭐⭐⭐ |
NOTE
关于可选内容
本章中标注为"可选"的内容(如 VS Code + EIDE、CLion),初学者可以暂时跳过。建议先使用 Keil MDK 完成基础学习,等熟悉后再尝试其他开发环境。不同的开发环境各有优缺点,后续我们会详细对比。
1.2 重点提示
在开始之前,请务必注意以下几点:
1.2.1 关于安装路径
WARNING
所有软件的安装路径中不要包含中文、空格和特殊字符!
这是嵌入式开发中非常常见的坑。很多工具(特别是编译器和调试器)在处理带有中文或空格的路径时会出现各种奇怪的问题。
❌ 错误示例:
C:\Program Files\Keil MDK\(包含空格)D:\软件\开发工具\Keil\(包含中文)C:\Users\张三\Keil\(用户名包含中文)
✅ 正确示例:
E:\Keil_v5\E:\DevTools\Keil\C:\Keil\ARM\
1.2.2 关于管理员权限
安装软件和驱动时,建议以管理员身份运行安装程序。方法:
- 右键点击安装程序(这里只是以CLion来举例)
- 选择 以管理员身份运行

如果不使用管理员权限,可能会导致:
- 某些驱动安装失败
- 某些文件无法写入
- 有些环境变量无法设置
1.2.3 推荐的目录结构
为了方便管理和定位软件位置,建议按照以下结构组织你的开发工具:
D:\ # 建议使用非系统盘
├── DevTools\ # 开发工具根目录
│ ├── Keil_v5\ # Keil MDK 安装目录
│ ├── STM32CubeMX\ # STM32CubeMX 安装目录
│ ├── STM32CubeProgrammer\ # STM32CubeProgrammer 安装目录
│ ├── ARM_GCC\ # GCC ARM 工具链
│ ├── OpenOCD\ # OpenOCD 调试器
│ ├── VSCode\ # VS Code 安装目录
│ └── CLion\ # CLion 安装目录
└── STM32Cube\ # ST 固件库存放目录
└── Repository\
└── STM32Cube_FW_F4_Vx.x.x\2
3
4
5
6
7
8
9
10
11
12
TIP
如果你知道软件默认路径的话,也可以按照默认路径安装,看你自己的喜好,电脑老手完全可以随心所欲的安装到任何位置(ps,我就把一些软件安装在了是固态硬盘的C盘)。
1.3 嵌入式开发工具链概述
在深入安装步骤之前,让我们先了解一下嵌入式开发涉及的各种工具,以及它们之间的关系。
1.3.1 嵌入式单片机开发的流程
1.3.2 各工具的作用
| 工具类型 | 工具名称 | 作用 |
|---|---|---|
| IDE | Keil MDK、VS Code + EIDE、CLion | 代码编辑、工程管理、集成编译调试 |
| 编译器 | ARMCC (AC5)、Arm Clang (AC6)、GCC ARM | 将 C 代码编译成单片机可执行的机器码,其中Keil MDK是安装后就自带编译器的,其他的IDE需要自己配置 |
| 调试器硬件 | DAPLink、ST-Link、J-Link | 连接电脑和单片机,传输程序和调试信息 |
| 调试器软件 | OpenOCD、J-Link GDB Server | 与调试器硬件通信,提供调试接口 |
| 配置工具 | STM32CubeMX | 图形化配置芯片的引脚、时钟、外设,生成初始化代码 |
| 烧录工具 | STM32CubeProgrammer | 将固件烧录到单片机 Flash |
| 串口工具 | VOFA+、MobaXterm、SSCOM | 显示和发送串口数据,主要用于调试 |
1.3.3 三种开发环境对比
| 对比项 | Keil MDK | VS Code + EIDE | CLion |
|---|---|---|---|
| 核心定位 | 行业标准,老牌稳重 | 轻量级,插件化,兼容性强 | 现代化,纯正C/C++开发体验 |
| 价格 | 💸 商业软件(昂贵,需付费使用,非商业用途可以用社区版) | 🆓 免费使用 (EIDE插件免费) | 💸 商业软件 (非商业用途免费) |
| 上手难度 | ⭐ (最简单,装好即用) | ⭐⭐⭐ (需安装插件和工具链) | ⭐⭐⭐⭐⭐ (需懂CMake和脚本) |
| 配置复杂度 | 🤩 低 | 🙂 中 (可以做到和Keil MDK类似的添加文件) | 🙁 高 (需编写CMakeLists.txt) |
| 用户界面 (UI) | 🙁 古老 (Win98风格,扎眼) | 🤩 现代 (主题丰富) | 🤩 现代 (JetBrains家族式极客风) |
| 代码补全 | 🙁 一般 (提示不全,不够智能) | 🤩 优秀 (可以装AI补全插件) | 🤩 极致 (基于Clangd,智能推断,可以装AI补全插件) |
| 代码重构 | 🙁 基本无 (改个变量名都费劲) | 🤩 良好 (重命名、提取函数方便) | 🤩 强大 (一键重构整个类/层级) |
| 编译速度 | 🙂 中等 (AC5慢,AC6快) | 🤩 较快 | 🤩 较快 |
| 调试功能 | 🤩 最强 (仿真器、SWO、外设寄存器直接看、软件逻辑分析仪) | 🙂 良好 (借助Cortex-Debug插件,支持SVD看寄存器) | 🙁 较弱 (基于GDB,看寄存器麻烦,RTOS支持需配置) |
| 工程兼容性 | 🙁 封闭 (.uvprojx 专有格式) | 🤩 良好 (类似Keil的图形添加文件的方式) | 🙁 独立 (主要是CMake,难以兼容旧工程) |
| 芯片生态支持 | 🤩 完美 (原生Pack支持,甚至支持古老8051,不过是keil4,keil5不支持的) | 🤩 优秀 (目前适配众多芯片) | 🙁 有限 (有些需自己手写链接脚本/启动文件,主要支持STM32等大厂) |
| 跨平台 | 🙁 仅 Windows | 🤩 Windows / Linux / macOS | 🤩 Windows / Linux / macOS |
| 版本控制 (Git) | 🙁 极差 (生成的中间文件多,二进制配置难比对,不过你自行做个忽略就可以了) | 🤩 优秀 (内置Git管理,Diff清晰) | 🤩 优秀 (极强的Git集成和历史回溯) |
| 适合人群 | 初学者、涉及国产冷门芯片、偏硬件的工程师 | 进阶者、追求效率者、全栈工程师 | 算法工程师、Linux驱动转单片机、大型C++项目 |
| 推荐指数 | ⭐⭐⭐⭐⭐ (主要为了调试和不折腾) | ⭐⭐⭐⭐ (日常开发借助AI插件,效率飞起) | ⭐⭐⭐ (写算法库/纯逻辑时用,或者为了情怀) |
TIP
如何选择开发环境?
- 初学者:强烈推荐 Keil MDK,配置简单,资料丰富,能最快上手
- 有编程基础:可以尝试 VS Code + EIDE,界面现代,扩展性强
- 资深开发者(想尝鲜):CLion 提供了最好的代码编辑体验,但配置复杂
- 公司项目:很多公司仍然使用 Keil MDK,熟悉它对找工作很有帮助
WARNING
如果你是初学者,请你一定要选择用Keil来学习,可能嫌弃 Keil 界面丑、不仅收费有时候在调试过程中偶尔还会闪退。但在实际工作场景(尤其是你实际工作中需要开发的单片机可能不是STM32),Keil 的地位无人可撼动,原因有二:
- 调试仿真: Keil 拥有独步天下的软件仿真功能。VS Code 和 CLion 至今难以望其项背。
- 编译器(AC5/AC6): 虽然 GCC 开源免费,但在代码密度和执行效率上,ARM 自家的编译器(AC6)针对 Cortex-M 核做了极致优化。对于 Flash 和 RAM 捉襟见肘的低成本量产项目,Keil 往往能救你一命(我们筑基学习板搭配的STM32F407芯片的FLash和RAM都很大,你在学习时基本不需要纠结固件太大,导致放不进单片机里面)。
筑基学习板所提供的工程,尽量都做到了三种(KEIL,VSCODE,CLion环境)在同一个工程内的兼容,这样你就可以在VS Code中编写代码,然后在Keil中进行编译。
1.4 基础概念与术语
在正式开始安装之前,让我们先了解一些基础概念和术语。这些术语会在后续的学习中频繁出现。
1.4.1 软件相关术语
| 术语 | 英文全称 | 含义 |
|---|---|---|
| IDE | Integrated Development Environment | 集成开发环境,包含代码编辑器、编译器、调试器等工具的软件平台 |
| 编译器 | Compiler | 将源代码(如 C 语言)翻译成机器码的程序 |
| 工具链 | Toolchain | 编译器、汇编器、链接器等工具的集合 |
| 链接器 | Linker | 将多个编译后的目标文件合并成可执行文件的程序 |
| 固件 | Firmware | 编译好的,可以烧录到单片机 Flash 中的程序,格式有elf,hex,bin这几种 |
| HEX 文件 | - | Intel HEX 格式的固件文件,包含地址和数据信息,和芯片内部物理地址是实际对应的 |
| BIN 文件 | - | 纯二进制格式的固件文件,只包含数据,一般在烧录的时候需要指定烧录的起始地址 |
| ELF 文件 | Executable and Linkable Format | 可执行可链接格式,包含调试信息的固件文件,信息量远高于上面的BIN和HEX格式,甚至还包含变量的地址信息 |
1.4.2 硬件/调试相关术语
| 术语 | 英文全称 | 含义 |
|---|---|---|
| 调试器 | Debugger | 连接电脑和单片机的硬件设备,用于下载程序和调试,比如DAPLink,ST-Link,Jlink等。 |
| 烧录器 | Programmer | 将固件写入单片机 Flash 的设备,基本等同于上面的调试器 |
| SWD | Serial Wire Debug | 串行线调试,ARM Cortex-M 的调试协议,2 线,天空星开发板用的就是这个SWD协议,引出了两个引脚信号,SWDIO和SWCLK。 |
| JTAG | Joint Test Action Group | 一种调试和测试标准,4-5 线,一般用上面的SWD协议就够了,占用的引脚更少,能达到的信号频率也更高 |
| ISP(在系统编程) | In-System Programming | 在系统编程,借助芯片厂家的 Bootloader 通过串口,CAN等方式来给开发板芯片下载程序 |
| DFU(设备固件升级) | Device Firmware Upgrade | 设备固件升级,通过 USB 下载程序,需要先安装对应芯片的驱动,还得用对应芯片厂家专用的上位机。属于 ISP 的一种特殊形式。 |
| UART | Universal Async Receiver/Transmitter | 通用异步收发器,就是俗称的串口 |
| Bootloader | - | 引导程序,上电后首先运行的程序,可用于引导下载,一般都是由芯片厂家在出厂前固化在芯片里面的。 我们也可以自行写一段 Bootloader,把它烧录到单片机中,自定义我们的固件维护程序,让设备可以在用户手里自行升级。 |
1.4.3 Keil MDK 编译器版本说明
Keil MDK 支持两个版本的 ARM 编译器,它们的区别如下:
| 对比项 | Arm Compiler 5 (AC5/ARMCC) | Arm Compiler 6 (AC6/Armclang) |
|---|---|---|
| 状态 | 已停止更新,仅维护 | ARM 官方主推,持续更新 |
| 基础 | ARM 自研 | 基于 LLVM/Clang |
| 编译速度 | 较慢 | 较快 |
| 优化能力 | 良好 | 更好 |
| 代码兼容性 | 对老代码兼容性好 | 某些老语法可能报错 |
| C 标准 | 支持到 C99 | 支持 C11/C17 |
| C++ 标准 | 支持到 C++11 | 支持 C++17/C++20 |
| 推荐场景 | 老项目维护 | 新项目开发 |
NOTE
建议:新项目使用 AC6 编译器,它代表未来趋势。如果遇到老代码编译报错,可以尝试切换到 AC5。筑基学习板的教程默认优先使用 AC6 编译器,而且现在你安装Keil MDK,默认是只会安装 AC6 编译器,AC5 编译器需要自行手动安装。怎么安装 AC5 可以参考这里的内容:链接 。
二 开发软件安装
本节将介绍三种主流的 STM32 开发环境的安装方法。对于初学者,强烈建议首选 Keil MDK,它的集成度最高,配置最简单,能让你最快地跑起第一个程序。
2.1 Keil MDK 安装
WARNING
Keil MDK 为付费软件,本文不提供亦不暗示各位使用破解版,感兴趣的爱好者可以参考下方内容申请使用社区版,仅限非商业用途使用。
Keil MDK(Microcontroller Development Kit)是 ARM 公司推出的一款专门为 ARM 架构微控制器设计的集成开发环境,也是目前国内使用最广泛的 STM32 开发工具。
2.1.1 Keil MDK 简介
Keil MDK 的历史:
Keil 公司成立于 1985 年,最初开发 8051 单片机的开发工具。2005 年被 ARM 公司收购后,Keil 开始专注于 ARM 架构单片机的开发工具,推出了 MDK-ARM 产品线。如今,Keil MDK 已经成为全球最流行的 ARM Cortex-M 开发环境之一。
Keil MDK 的版本:
| 版本 | 说明 | 代码大小限制 |
|---|---|---|
| MDK-Lite | 免费版本 | 32KB |
| MDK-Essential | 基础付费版 | 无限制 |
| MDK-Plus | 中级付费版 | 无限制 + 中间件 |
| MDK-Professional | 专业付费版 | 无限制 + 全部中间件 |
NOTE
Keil MDK 是商业软件,需要购买许可证才能编译超过 32KB 的代码。对于学习和个人非商业用途使用可以安装社区版:
- STM32F407 的项目通常超过 32KB,所以免费版一般是不够用的
- 大家可以使用社区版(不限制固件))来评估学习,Arm Keil | MDK-Community edition,只限非商业项目使用,大家使用时需要注意。
2.1.2 下载安装 Keil MDK
2.1.3 安装 STM32F4 设备支持包
Keil MDK 安装完成后,默认是没有 STM32 芯片支持的,需要另外安装设备支持包(DFP)。设备支持包包含了芯片的启动文件、头文件、Flash 下载算法等必要文件。我们这里教程是针对天空星-STM32F407版本制作的,所以在打开Keil之前,需要你先安装STM32F4的设备支持包。
方法一:离线安装(强烈推荐)
由于在线安装需要连接国外服务器,速度很慢且容易失败,强烈建议使用离线安装。
下载设备支持包
- 前往 Keil Pack 官方下载页面
- 在搜索框中搜索
STM32F4 - 找到 Keil.STM32F4xx_DFP,下载最新版本的
.pack文件 - 文件名类似
Keil.STM32F4xx_DFP.3.1.1.pack,你直接下载最新版就好了

安装设备支持包
- 双击下载的
.pack文件【一定要先安装Keil-MDK,否则你的系统是打不开这个文件的,他其实就是个压缩包,你改个后缀就能解压了,你装了keil之后,keil会自动处理这些文件的】 - Keil 会自动识别并开始安装,你就按照提示正常安装就好了【遇到条款相关的记得勾选同意】
- 或者将
.pack文件直接拖拽到 Keil µVision 窗口中

- 双击下载的
验证是否安装成功
- 打开 Keil,点击 Project -> New µVision Project,随便找一一个保存地址,创建一个新工程。
- 在芯片选择界面搜索
STM32F407VE - 如果能找到该芯片,说明安装成功


方法二:在线安装
如果网络条件好,也可以使用在线安装:
打开 Keil µVision
点击菜单栏的 Pack Installer 图标(绿色方块图标)

在左侧 Devices 搜索框中输入
STM32F4找到 Keil::STM32F4xx_DFP,点击右侧的 Install【这里是因为我已经安装了,所以没有安装的选项,只有更新的选项】

- 等待下载和安装完成
WARNING
在线安装常见问题
- 下载速度慢:服务器在国外,有可能需要科学上网
- 下载中断:网络不稳定可能导致下载失败,建议使用离线安装
- 安装失败:检查是否以管理员权限运行 Keil
2.1.5 关于 AC5 和 AC6 编译器
Keil MDK 支持两种编译器,在工程配置时需要选择:
Arm Compiler 5(AC5,armcc):
- Keil 经典的编译器
- 对老代码兼容性好
- ARM 官方已停止更新,只做维护
- 新版 Keil MDK(5.37 及以后)不再默认自带 AC5
Arm Compiler 6(AC6,armclang):
- 基于 LLVM/Clang 架构
- 编译速度更快,优化能力更强
- ARM 官方主推,持续更新
- 支持更新的 C/C++ 标准
TIP
如何在工程中切换编译器:
- 打开一个现有的工程(如果你还不知道如何打开工程,请继续往后看教程)
- 点击 Options for Target(魔术棒图标)或按
Alt+F7 - 在 Target 选项卡中找到 ARM Compiler
- 从下拉菜单中选择需要的版本


在这里选择第一个,就是AC6,选择第二个,就是AC5;第三个和第四个则是具体的编译器版本,你也可以指定具体的版本,一般情况下,只要用前两个选项就够了。
WARNING
如果你发现你的软件里没有AC5编译器选项怎么办?:
由于新版 Keil 不再自带 AC5,需要单独安装:
请你参考这个链接里面的安装说明:AC5安装
TIP
编译器选择建议
- 新项目:直接使用 AC6,它是未来趋势
- 老项目:如果 AC6 编译报错,可以尝试 AC5
- 本教程:默认使用 AC6 编译器,如需 AC5 会特别说明
2.1.6 Keil 常用设置
安装完成后,建议进行以下设置以获得更好的使用体验:
设置编码格式(避免中文乱码):
- 点击 Configuration
- 在 Editor 选项卡中找到 Encoding
- 选择 Encode in UTF-8 without signature

设置字体和字号:
- 在 Configuration-> Colors & Fonts 中设置
- 推荐使用 Consolas 或 Source Code Pro 等等宽字体
- 字号根据个人喜好,12-14 号比较舒适

设置 Tab 缩进:
- 在 Editor 选项卡中找到 Tab size
- 设置为 4(C 语言常用缩进)
- 建议勾选 Insert spaces for tabs(用空格替代 Tab)

2.1.7 进行编译测试
我们在gitee的筑基学习板开源仓库中的例程,目前(26年2月3日)的例程在同一个工程中支持了 Keil MDK、VS Code+EIDE、CLion 的编译环境。我们先把这个仓库下载或者克隆下来:
进入到0_example\GPIO目录下,我们先用最简单的例程来测试一下,选择gpio-led-pb2-project这个文件夹,双击 MDK-ARM 目录下的 project.uvprojx。

这个会唤起keil,你前面安装正常的话,工程就会在keil中打开了,点击编译,如果下方出现"project\project.axf" - 0 Error(s), 0 Warning(s). 就表明编译成功,前面的环境安装是正常的。

2.2 STM32CubeMX 安装
STM32CubeMX 是 ST 官方推出的一款图形化配置工具,可以帮助我们快速完成 STM32 的引脚分配、时钟配置、外设初始化等工作,并自动生成对应的初始化代码(支持 HAL 库和 LL 库,不支持标准库)。它可以极大地提高开发效率,后续我们创建正式工程时会大量使用它。
2.2.1 STM32CubeMX 简介
STM32CubeMX 能做什么?
TIP
这里要和大家强调一下,常规说的 STM32CubeMX能自动生成代码 指的是生成底层的设备初始化代码,具体的应用代码还是需要你自行编写的。

上图是借助AI来生成的。
STM32CubeMX 的主要功能:
| 功能 | 说明 |
|---|---|
| 引脚配置 | 图形化界面配置每个引脚的功能(GPIO及复用功能等) |
| 时钟配置 | 配置系统时钟树,设置各个时钟源和分频器 |
| 外设配置 | 配置 UART、SPI、I2C、定时器等外设参数 |
| 中间件配置 | 配置 FreeRTOS、USB、文件系统等中间件 |
| 电源配置 | 配置低功耗模式、电源管理 |
| 代码生成 | 自动生成 Keil、IAR、STM32CubeIDE 等工程文件 |
| 功耗估算 | 估算当前配置下的功耗 |
TIP
为什么推荐使用 STM32CubeMX?
- 减少出错:自动生成的代码经过 ST 官方验证,减少手动编写出错的可能
- 提高效率:复杂的时钟配置、引脚复用等工作变得简单直观
- 便于学习:可以对照生成的代码学习 HAL 库的使用方法
- 方便修改:修改配置后重新生成代码,用户代码会保留
不过,对于学习底层原理来说,我们的教程也会讲解寄存器级别的操作,让你真正理解代码背后发生了什么,请重点看本教程的第九章内容:[9]新建点灯工程【寄存器版本】
2.2.2 下载 STM32CubeMX
- ST官方下载地址:STM32CubeMX | Software - 意法半导体STMicroelectronics
- 点击 获取软件,选择适合你操作系统的版本
- 下载前需要使用 ST 官方账号登录(免费注册)
- 接受许可协议后开始下载
下载下来后,他就是一个压缩包,我们需要先把它解压出来:

解压后的文件如上图所示。
TIP
注册 ST 账号:
如果没有 ST 账号,需要先注册:
登录注册的页面:链接
- 点击登录页面的 创建账户
- 填写邮箱、密码等信息
- 到邮箱中点击验证链接完成注册

包括你后面使用 STM32CubeMX 使用时也是需要登录使用的,所以注册ST账号是必须的。
2.2.3 安装 STM32CubeMX
TIP
关于 Java 环境:
STM32CubeMX 是用 Java 编写的,需要 Java 运行环境(JRE)。好消息是,新版本的 STM32CubeMX 安装包通常会自带 JRE,不需要单独安装 Java。

鼠标右键我们在2.2.1中下载并解压出来的文件,用【以管理员身份运行】

安装步骤:
- 以管理员身份运行安装程序
- 选择【仅为当前用户安装】或者【为所有用户安装】
- 点击 Next,接受许可协议
- 选择安装路径,如
E:\DevTools\STM32CubeMX\ - 选择是否创建桌面快捷方式
- 点击 Next 开始安装,等待两个进度条都走完
- 安装完成后点击 Done
这里就可以双击桌面的 STM32CubeMX 快捷方式来打开了,打开后的截图如下图所示:

2.2.4 安装 STM32F4 固件库
首次使用 STM32CubeMX 为 STM32F4 系列芯片创建工程时,软件会提示下载对应的固件库(STM32Cube_FW_F4)。由于固件库体积较大(通常几百 MB 到 1 GB),且需要从国外服务器下载,速度可能较慢。
方法一:离线安装(强烈推荐)
下载固件库
- 前往 ST 官网固件库下载页面 【这里的链接是st的中国站点,速度会比较快的】
- 点击 获取软件 下载
STM32CubeF4固件包(.zip格式) - 文件较大(可能 500MB - 1GB),请耐心等待
在 STM32CubeMX 中导入
- 打开 STM32CubeMX
- 点击菜单 Help -> Manage embedded software packages
- 在弹出的窗口中点击 From Local...
- 选择解压后的固件库根目录
- 点击 打开 等待进度条走完-完成导入

验证安装
- 在固件库列表中找到 STM32F4
- 确认版本前面会显示绿色方框
安装完成后,你就可以在 STM32F4 这里看到Package的V1.28.2版本已经正常安装了。

方法二:在线安装
如果网络条件好,可以直接在线下载:
- 打开 STM32CubeMX
- 点击菜单 Help -> Manage embedded software packages
- 展开 STM32F4,勾选需要的版本
- 点击 Install
- 等待下载和安装完成(网络不好的请看上面的离线安装方式)

WARNING
固件库版本说明
- 固件库版本会不断更新,建议使用最新稳定版
- 不同版本的固件库生成的代码可能略有差异
- 本教程预计会基于
STM32Cube_FW_F4_V1.28.x编写 - 如果你使用其他版本,代码细节可能略有不同,但原理是相同的
2.3 STM32CubeProgrammer 安装
STM32CubeProgrammer 是 ST 官方推出的一款通用编程/烧录软件,支持通过各种调试器(ST-Link、J-Link、UART 串口、USB DFU 等【可惜目前还不支持DAPLink】)将固件烧录到 STM32 芯片中。它也可以用于读取/擦除芯片 Flash、配置选项字节(Option Bytes)等操作。
2.3.1 STM32CubeProgrammer 简介
STM32CubeProgrammer 的功能:
| 功能 | 说明 |
|---|---|
| 固件下载 | 将 .hex/.bin/.elf 文件烧录到芯片 Flash |
| 固件读取 | 读取芯片 Flash 中的内容,无法直接读取设置了芯片保护的芯片 |
| Flash 擦除 | 全片擦除或扇区擦除 |
| Option Bytes | 配置读保护、写保护、Boot 模式等 |
| OTP 区域 | 读写一次性可编程区域 |
| 外部存储器 | 支持外部 QSPI Flash 等,需要有对应的烧录算法 |
| 多种连接方式 | ST-Link、J-Link、UART、USB DFU、SPI、I2C 等 |
STM32CubeProgrammer vs 其他烧录工具:
| 工具 | 优点 | 缺点 |
|---|---|---|
| STM32CubeProgrammer | ST 官方出品,功能全面 | 界面相对复杂,还在持续更新 |
| ST-LINK Utility(已停止更新) | 界面简洁 | 已被 STM32CubeProgrammer 替代 |
| J-Flash | 速度快,支持脚本 | 需要 J-Link 调试器 |
| FlyMcu | 小巧简单 | 仅支持串口下载 |
NOTE
ST-LINK Utility 是 ST 之前推出的烧录工具,现在已经停止更新,所有功能都整合到了 STM32CubeProgrammer 中。建议使用 STM32CubeProgrammer。
2.3.2 下载与安装
下载:
- 官方下载地址:https://www.st.com.cn/zh/development-tools/stm32cubeprog.html
- 点击 获取软件,选择适合你操作系统的版本
- 需要 ST 账号登录后下载
我这里是64位win11系统,所以我就选择STM32CubePrg-W64来下载了。

下载下来后,需要先解压一下,就可以得到软件安装包了。

安装:
- 右键这个安装包以管理员身份运行安装程序
- 按照向导完成安装,路径如
E:\DevTools\STM32CubeProgrammer\ - 重要:安装过程中会提示安装各种驱动程序,请全部选择安装:
- ST-Link 驱动
- DFU 驱动
- 虚拟串口驱动


TIP
安装 STM32CubeProgrammer 时会自动安装 ST-Link 驱动,如果你使用的是 ST-Link 调试器,这一步很重要。安装完成后,ST-Link 就可以在电脑上正常识别了。
安装完成的界面如下图所示:

2.3.3 STM32CubeProgrammer 界面介绍
安装完成后,打开 STM32CubeProgrammer,界面如下:

如何具体去使用这个工具,给天空星进行烧录程序,我们在后面的 五 如何下载程序到单片机 会给大家说明。
2.4 VS Code + EIDE 插件安装(可选)
Visual Studio Code(VS Code)是一款由微软推出的免费、开源、轻量级但功能强大的代码编辑器,被很多程序员戏称为 宇宙第一编辑器 。通过安装 EIDE(Embedded IDE) 插件,可以将 VS Code 打造成一个功能完善的嵌入式开发环境。
2.4.1 为什么选择 VS Code?
| 优势 | 说明 |
|---|---|
| 免费开源 | 完全免费,无授权限制 |
| 跨平台 | 支持 Windows、Linux、macOS |
| 界面现代 | UI 美观,操作流畅 |
| 代码补全强 | IntelliSense 智能补全非常好用 |
| 插件丰富 | 海量插件可扩展各种功能 |
| Git 集成 | 原生支持 Git 版本控制 |
| 轻量快速 | 启动速度快,占用资源少 |
NOTE
VS Code 适合哪些人?
- 已经熟悉 Keil MDK 开发,想要更现代化的开发体验
- 需要在 Linux 或 macOS 上进行开发
- 喜欢折腾,愿意花时间配置环境
- 从事多种编程语言的开发(VS Code 是通用编辑器)
对于初学者,建议先用 Keil 入门,等熟悉后再尝试 VS Code。
2.4.2 安装 VS Code
- 官方下载地址:https://code.visualstudio.com/
- 点击 Download 下载适合你操作系统的版本
- 运行安装程序
TIP
这个软件安装很简单,这里不再赘述。如果你安装有问题,请自己借助AI或者搜索引擎解决。
ps:默认是英文的,中文需要安装插件来实现
2.4.3 安装 EIDE 插件
EIDE(Embedded IDE)是由国人开发的一款 VS Code 嵌入式开发插件。
- 打开 VS Code
- 点击左侧边栏的 扩展 图标(或按
Ctrl+Shift+X) - 在搜索框中输入
EIDE - 找到 Embedded IDE,点击 安装 。

插件安装完成后:
- 左侧边栏会出现 EIDE 的图标(一个芯片形状)
- 可以通过该图标进入 EIDE 的工程管理界面
- EIDE 插件会自动开始安装需要的各类运行环境,请根据提示进行操作,比如该插件运行需要.NET 运行环境。
- 当
.NET6 运行时成功安装后,你需要重启 VSCode 刷新系统环境变量

TIP
如果你安装过程中出现了问题,请重点看EIDE官方文档的说明:链接
2.4.4 配置编译工具链
EIDE插件 本身只是一个 壳 ,需要配合实际的编译工具链才能工作。EIDE 支持多种工具链:
| 工具链 | 来源 | 特点 |
|---|---|---|
| AC5/AC6 | Keil MDK | 你没看错,他可以调用keil的编译器,但是需要你已安装 Keil MDK【商业用途需购买授权】 |
| GCC ARM | ARM 官方 | 免费开源,推荐【本教程在VS CODE部分使用这个工具链】 |
| IAR | IAR Systems | 商业软件【本教程暂不涉及】 |
arm-none-eabi-gcc 是一个专门为ARM架构微控制器设计的交叉编译工具链。所谓 交叉编译 ,是指编译过程发生在一个平台(比如的Windows或Linux开发主机)上,但生成的二进制代码是为了在另一个平台(比如ARM Cortex-M微控制器,天空星STM32版本)上运行。“none-eabi”部分意味着它生成的代码不依赖于任何操作系统,适合直接在硬件上运行,作为对比理解,这里的arm-none-eabi-gcc 其实就是对标Keil(MDK)里面的AC5,AC6编译器。总的来说,我们用这个主要就是用于编译ARM架构的嵌入式系统代码,生成的是可以直接在ARM微控制器上运行的二进制文件。
安装 GCC ARM 工具链:
下载地址:
下载 Windows 版本的压缩包,把它解压到一个你觉得合适的地方,比如E盘


文件名中的arm-gnu-toolchain,表示这是指一个工具链(toolchain),即一套用于编译、链接和调试程序的软件工具集合;15.2.rel1表示主版本号为"15.2"的第一个发布版本;mingw-w64表示它提供了跨平台的变异环境,w64表示他是mingw的扩展,同时支持32位系统和64位系统;I686则表示这个工具链是为 32 位的 x86 架构(i686)的 Windows 系统编译的。arm-none-eabi:
arm是指该工具链的目标处理器架构师ARM,none指目标平台没有操作系统,适用于裸机开发,不依赖于任何操作系统(需要注意,如果使用RT-Thread或者FreeRTOS等依旧可以用这个编译器编译,因为前者本质上是一种轻量级的RTOS,本身就是运行在裸机环境下的,RTOS本身并不改变硬件的底层架构);eabi是"Embedded ABI"的缩写,也就是嵌入式应用二进制接口,适用于嵌入式系统的标准接口。把这个编译链的文件路径添加到环境变量中
下载下来后将这个压缩包解压缩到一个目录后,目录里不要有空格或中文字符,然后把bin文件夹所处的目录添加至系统环境变量。
如下图所示,首先右键单击此电脑,单击属性,在弹出框中单击高级系统属性:

会跳出图中左边第一个系统属性对话框,选中栏目里面的高级,单击环境变量,选中用户变量里面的Path后再单击编辑按钮,在新出来的对话框中单击新建,然后把你解压的这个文件夹目录中的bin文件的完整地址粘贴上去。单击确定就好了。

- 验证安装
- 安装完成后,打开命令提示符(CMD)或 PowerShell
- 输入命令:
arm-none-eabi-gcc --version - 如果显示版本号,说明安装成功,如果没有的话就说明你安装失败了,请从本小节从头再看。

在 EIDE 中配置工具链:
- 点击 VS Code 左侧的 EIDE 图标
- 在 EIDE 面板中点击 设置 或齿轮图标
- 设置工具链 路径 【你也可以在线下载,可能版本会比较旧,一定要注意路径是编译器根目录噢,不是环境变量设置里面的bin目录了】

2.4.5 安装 Cortex-Debug 插件
Cortex-Debug 是 VS Code 上进行 ARM Cortex-M 调试的核心插件。
- 在 VS Code 扩展中搜索
Cortex-Debug - 找到 Cortex-Debug,点击 安装

Cortex-Debug 的功能:
- 断点调试
- 单步执行
- 查看变量和寄存器
- 查看外设寄存器(Peripheral)
- 内存查看
- 实时变量监视
2.4.6 安装 OpenOCD
OpenOCD(Open On-Chip Debugger)是一个开源的片上调试器软件,支持多种调试器硬件(包括 DAPLink、ST-Link、J-Link 等)。Cortex-Debug 需要配合 OpenOCD 或 J-Link GDB Server 使用。
EIDE插件是可以自动下载OpenOCD的,我们打开右侧的EIDE插件,展开 操作 栏,单击 安装实用工具 ,在弹出框中选择,安装OpenOCD,等待安装完成即可。

安装完成后,右下角会提示你重启 VS Code 来刷新环境变量,请你重启一下 VS Code 来确保其安装生效。
2.4.7 进行编译测试
我们在gitee的筑基学习板开源仓库中的例程,目前(26年2月3日)的例程在同一个工程中支持了 Keil MDK、VS Code+EIDE、CLion 的编译环境。我们先把这个仓库下载或者克隆下来:
进入到0_example\GPIO目录下,我们先用最简单的例程来测试一下,进入gpio-led-pb2-project这个文件夹,找到EIDE-Project.code-workspace这个文件,双击打开他来唤醒VS CODE:

工程加载完成后,点右下角的 Build 进行编译测试,出现 [ DONE ] build successfully ! 就代表可以正常编译成功,上面的环境我们就算是安装好了。

2.4.8 VS Code + EIDE 开发流程简介
配置完成后,使用 VS Code + EIDE 进行 STM32 开发的基本流程如下:

TIP
EIDE 的一个强大功能是可以直接导入 Keil 工程。如果你已经有一个 Keil 工程,可以用 EIDE 打开继续开发,也可以享受 VS Code 的编辑体验。不过我们的教程是从头新建的。
后续的例程我会尽量做到 在同一个工程里让Keil + VS Code + CLion三种编译环境共存。
2.5 CLion 安装(可选)
CLion 是 JetBrains 公司推出的一款专业的 C/C++ IDE,以其强大的代码补全、重构、导航功能著称。JetBrains 系列的 IDE 一直以 智能 著称,很多从事 Java、Python 开发的程序员都对 IntelliJ IDEA、PyCharm 赞不绝口。CLion 继承了这一传统,提供了非常优秀的代码分析和重构能力。
2.5.1 Why CLion?
| 优势 | 说明 |
|---|---|
| 智能补全 | 基于语义分析的代码补全,比 Keil 智能的多 |
| 强大的重构 | 重命名、提取函数、移动代码等重构功能非常强大 |
| 代码导航 | 快速跳转到定义、查找引用、类层次结构等 |
| 跨平台 | 支持 Windows、Linux、macOS |
| CMake 支持 | 使用现代化的 CMake 构建系统 |
| Git 集成 | 内置完善的 Git 版本控制支持 |
| 远程开发 | 支持通过 SSH 连接远程主机进行开发 |
CLion 的劣势:
| 劣势 | 说明 |
|---|---|
| 商业软件 | 商业使用需要付费购买许可证(不过25年5月7日后,CLion开始对非商业用途免费) |
| 资源占用 | 内存占用较大,建议 8GB 以上内存,我个人建议至少来16GB的空余吧,不然用着蹑手蹑脚的 |
| 配置复杂 | 嵌入式开发配置比 Keil 复杂得多,你得做好心理准备 |
| 启动较慢 | 工程索引需要时间 |
NOTE
CLion 适合哪些人?
- 有 C/C++ 开发经验,追求更好的开发体验
- 正在使用或愿意学习 CMake 构建系统
- 需要在 Linux 或 macOS 上进行嵌入式开发
- 已经购买了 JetBrains 全家桶许可证
对于初学者,强烈建议先使用 Keil MDK 入门,等熟练后再考虑 CLion,请记得贪多嚼不烂噢!
2.5.2 下载与安装 CLion
下载:
- 官方下载地址:https://www.jetbrains.com/clion/download/
- 选择适合你操作系统的版本下载

TIP
安装:
- 运行下载的安装程序
- 选择安装路径
- 建议勾选的选项:
- 创建桌面快捷方式
- 将 CLion 添加到 PATH

成功安装CLion
如果你成功安装CLion的话,会出现如下界面:

勾选 运行 CLion(R),然后点击 完成(F),就可以正常运行CLion。启动后你需要勾选你所在的区域,同意该软件的用户协议。
激活CLion(非商业用途)【推荐】
成功启动后可以查看设置里面的【管理许可证】登录来激活你的非商业用途。



如果还没有账号的话,需要你在弹出来的网页里先注册一个账号。
正常登录后就可以正常使用了。
激活CLion(商业用途)
和上面的非商业用途一样,也是登录账号就行,我们只需要用购买了CLion商业许可的账号来登录就可以了。不同的是我们可以点击中间的 付费许可证 来登录进行使用。

在弹出来的网页中,进行账号登录就可以了,
激活成功后就会提示你有效期了:

出现这个就说明你可以正常使用CLion了。
2.5.3 理解 CMake 构建系统
与 Keil 使用私有的工程文件格式(.uvprojx)不同,CLion 可以使用 CMake 作为构建系统。CMake 是一个开源的、跨平台的构建工具,通过编写 CMakeLists.txt 文件来描述项目的构建过程。
CMake 的基本概念:
你可以把 CMake 想象成一个 包工头 ,而把编译器(如 arm-none-eabi-gcc )想象成具体的 砌砖工 。CMake 并不直接编译代码,它的工作是指挥编译器应该如何工作。
在第九章中,我们会介绍实际工程CMakeLists.txt的内容。
TIP
为什么要学习 CMake?
- 跨平台:同一个 CMakeLists.txt 可以在 Windows、Linux、macOS 上使用
- IDE 无关:不绑定任何特定 IDE,其实你用CLion做的的天空星工程,也可以轻松迁移到VS Code上(不用EIDE插件都可以,只不过其配置过程会和CLion一样设置比较麻烦)
- 现代化:越来越多的开源项目使用 CMake
- 灵活性:可以精确控制编译过程的每个细节
2.5.4 配置 CLion 嵌入式开发环境
要使用 CLion 进行 STM32 开发,需要配置以下组件:
Step 1:安装 GCC ARM 工具链
参考 2.4.4 节的安装方法,确保已安装 GCC ARM Embedded 工具链。
arm-none-eabi-gcc 是一个专门为ARM架构微控制器设计的交叉编译工具链。所谓“交叉编译”,是指编译过程发生在一个平台(比如你的Windows或Linux开发主机)上,但生成的二进制代码是为了在另一个平台(比如ARM Cortex-M微控制器,天空星STM32版本)上运行。“none-eabi”部分意味着它生成的代码不依赖于任何操作系统,适合直接在硬件上运行,作为对比理解,这里的arm-none-eabi-gcc 其实就是对标Keil(MDK)里面的AC5,AC6编译器。总的来说,我们用这个主要就是用于编译ARM架构的嵌入式系统代码,生成的是可以直接在ARM微控制器上运行的二进制文件。
安装 GCC ARM 工具链:
下载地址:
下载 Windows 版本的压缩包,把它解压到一个你觉得合适的地方,比如E盘


文件名中的arm-gnu-toolchain,表示这是指一个工具链(toolchain),即一套用于编译、链接和调试程序的软件工具集合;15.2.rel1表示主版本号为"15.2"的第一个发布版本;mingw-w64表示它提供了跨平台的变异环境,w64表示他是mingw的扩展,同时支持32位系统和64位系统;I686则表示这个工具链是为 32 位的 x86 架构(i686)的 Windows 系统编译的。arm-none-eabi:
arm是指该工具链的目标处理器架构师ARM,none指目标平台没有操作系统,适用于裸机开发,不依赖于任何操作系统(需要注意,如果使用RT-Thread或者FreeRTOS等依旧可以用这个编译器编译,因为前者本质上是一种轻量级的RTOS,本身就是运行在裸机环境下的,RTOS本身并不改变硬件的底层架构);eabi是"Embedded ABI"的缩写,也就是嵌入式应用二进制接口,适用于嵌入式系统的标准接口。把这个编译链的文件路径添加到环境变量中
下载下来后将这个压缩包解压缩到一个目录后,目录里不要有空格或中文字符,然后把bin文件夹所处的目录添加至系统环境变量。
如下图所示,首先右键单击此电脑,单击属性,在弹出框中单击高级系统属性:

会跳出图中左边第一个系统属性对话框,选中栏目里面的高级,单击环境变量,选中用户变量里面的Path后再单击编辑按钮,在新出来的对话框中单击新建,然后把你解压的这个文件夹目录中的bin文件的完整地址粘贴上去。单击确定就好了。

- 验证安装
- 安装完成后,打开命令提示符(CMD)或 PowerShell
- 输入命令:
arm-none-eabi-gcc --version - 如果显示版本号,说明安装成功,如果没有的话就说明你安装失败了,请从本小节从头再看。

Step 2:安装 MinGW(Windows 用户)
CMake 需要一个 Make 工具来实际执行编译。在 Windows 上,我们使用 MinGW。
MinGW 是一个用于在Windows上编译和运行应用程序的编译工具集。支持编译标准的C/C++代码,并且适用于开发那些在Windows平台上运行的软件。比如,当我们需要在Windows上编写并运行一些工具、测试代码或开发桌面应用时,MinGW就是一个合适的选择。
在嵌入式开发中,通常需要在PC上编写和测试代码,然后使用交叉编译器(例如arm-none-eabi-gcc)生成嵌入式设备可执行的固件。因此,MinGW和arm-none-eabi-gcc的组合就允许我们在Windows环境下编写和测试代码,并最终生成能够在目标嵌入式设备上运行的代码。
MinGW并不直接用于编译和调试ARM系列单片机的嵌入式代码,而是为我们提供一个兼容Unix/Linux的工具环境,支持CMake和其他开发任务的顺利进行。它在构建系统、脚本处理以及非嵌入式代码开发中扮演重要角色,让我们在Windows下的开发体验更加接近于在Linux环境下的体验。CLion目前最新版本都内置了MinGW,但是本文为了统一确定的编译调试环境,所以还是下载了一个确定的最新版本。
下载链接,如果使用64位Windows系统的话建议大家选择 x86_64-15.2.0-release-posix-seh-ucrt-rt_v13-rev0 版本。

上面有很多个版本,在这些命名中,i686 是32位版本,x86_64 是64位版本;posix 和 win32 选项指的是线程模型。posix 使用POSIX线程,而 win32 使用Windows原生线程。一般选择 posix,因为它通常更兼容;SEH 和 Dwarf和调试信息的输出格式有关;msvcrt 使用微软的C运行时库。ucrt 使用通用C运行时(Universal CRT),是Windows上较新的运行时库。
和上面解压arm-none-eabi-gcc一样,解压到一个没有空格或中文字符的路径。然后把bin文件夹所处的目录添加至系统环境变量。添重启电脑并打开Windows PowerShell,输入gcc-v像下图里面有输出就说明这个组件你安装好了,如果没有输出或者输出是红色的字,你就需要重新检测一下是不是环境变量添加错了。

添加正常的话,打开控制台,输入 gcc -v ,如果有输出,就说明你前面的操作都是正常的。

Step 3:安装 OpenOCD
在本章 2.4.6 节中,我们的 openocd 是EIDE插件自行安装的,在Clion中,我们来手动安装一次:
OpenOCD(Open On-Chip Debugger)是一款开源的调试工具,主要用于嵌入式系统的调试。它允许开发者通过硬件调试接口(如JTAG和SWD)与微控制器进行交互,执行调试任务,如下载固件、设置断点、单步执行代码等。
OpenOCD的核心功能包括:
- 固件下载:将编译好的二进制文件(固件)通过调试接口烧录到嵌入式设备的存储器中。
- 断点设置:在程序中指定的代码行或地址处设置断点,当程序运行到这些位置时暂停执行,便于开发者检查和调试。
- 单步执行:逐行执行程序代码,以便详细分析每一步的运行情况,帮助发现代码中的问题。
- 寄存器和内存访问:可以直接查看和修改处理器寄存器和内存的内容,这对于调试低级别的嵌入式代码非常重要。
它是用C语言开发的,具有较高的性能和跨平台支持,能够在多个操作系统(如Linux、Windows、macOS)上运行。
支持常见的硬件调试器,如JLINK,STLINK,DAPLINK等。
可以在这个链接下载,建议直接下载最新的。

和上面解压arm-none-eabi-gcc一样,解压到一个没有空格或中文字符的路径。然后把bin文件夹所处的目录添加至系统环境变量。

重启电脑(其实你重启CMD终端也可以)并打开Windows PowerShell,输入openocd -v像下图里面有输出就说明这个组件你安装好了,如果没有输出或者输出是红色的字,你就需要重新检测一下是不是环境变量添加错了。

Step 4:在 CLion 中配置工具链
接下来开始配置工具链,选中设置的栏目中构建,执行,部署 里面的工具链,点击添加,新增一个工具链配置,这里我的命名是MinGW-ARM,这里不使用默认配置的原因是防止影响到普通c程序的编译运行,开发ARM系列单片机时就选择MinGW-ARM配置,开发普通c程序时就选择MinGW。

工具集就选择我们在 Step 2:安装 MinGW 中的bin目录,C编译器选择在 Step 1:安装 GCC ARM 工具链 安装的对应的C编译器【arm-none-eabi-gcc.exe】和C++编译器【arm-none-eabi-g++.exe】的路径。
然后切换到CMake栏目下,确认当前的工具链配置值为我们上面设置的MinGW-ARM,然后就可以点击下方确定按钮来保存设置了。

2.5.5 进行编译测试
我们在gitee的筑基学习板开源仓库中的例程,目前(26年2月3日)的例程在同一个工程中支持了 Keil MDK、VS Code+EIDE、CLion 的编译环境。我们先把这个仓库下载或者克隆下来:
进入到0_example\GPIO目录下,我们先用最简单的例程来测试一下,选择gpio-led-pb2-project这个文件夹,然后右键,选择Open Folder as CLion Project,用CLion来打开。

CMake成功加载后,点击右上角的编译按钮(一个像锤子的按钮),进行编译测试,当下方出现 构建 已完成 的提示,就说明我们前面的环境搭建是OK的,可以用CLion来编译了。

2.5.6 配置 CLion 下载和调试
CLion 支持使用 OpenOCD 进行嵌入式调试。
我们先打开设置,选择 构建、执行、部署 里面的 嵌入式开发,设置我们在前面解压 OpenOCD 的位置:

然后我们点击窗口右下角的 确定 按钮。
接下来我们开始设置工程的运行调试配置,因为写这章时第九章已经写完了,所以这里就借用 第九章的5.4 配置 OpenOCD 下载 章节的内容,为了教程的连续性,这里一并展示出来:
代码能编译了,下一步就是要把代码下载进芯片。
点击 CLion 右上角的 运行/调试配置 下拉框(一般显示为项目名,在我们这里就是project),选择 编辑配置。

点击弹出框
运行/调试配置左上角的 + 号,在弹出框中鼠标滚轮向下滑动,选择 OpenOCD 下载并运行。
名称:随便取,比如
下载到天空星。
可执行二进制文件:点击后面的文件选择你,在弹出框中选择我们刚刚在5.3.5进行编译测试 里生成的
project.elf文件。
面板配置文件(关键):
- 这里需要指定 OpenOCD 的配置文件。
- 点击右侧的文件夹图标,找到你 OpenOCD 安装目录下的
share/openocd/scripts。 - 我们需要两个配置:接口配置(CMSIS-DAP)和 目标芯片配置(STM32F4)。
- 但在 CLion 的界面里,我们通常提供一个整合的
.cfg文件。 - 实际操作:在项目根目录下新建一个名为
lckfb-skystar.cfg的文件,内容如下:
yamlsource [find interface/cmsis-dap.cfg] #source [find interface/stlink.cfg] # The target MCU. This should match your board source [find target/stm32f4x.cfg] reset_config srst_only1
2
3
4
5
6
7
8位置如下图所示:

回到 CLion 配置界面,选择这个新建的
lckfb-skystar.cfg。
上面那些都设置好了以后,点击 确定 保存。

确保硬件连接正常的话,此时我们就可以点击下载来运行了,动图演示一下这个过程,要确保一下你当前的 运行/调试配置 这里选择的是我们上面创建好的配置:

当控制台显示 ** Programming Finished **且右边弹出来【已下载固件】后,就能说明我们的下载环境搭建完成了。
WARNING
初学者注意
CLion + CMake 的学习曲线较陡峭。如果你是嵌入式开发初学者,强烈建议:
- 先使用 Keil MDK 完成本教程的学习
- 熟悉 STM32 开发流程后,再尝试 CLion
- 学习 CMake 的基础知识
三 调试器驱动安装
调试器(也叫仿真器、烧录器)是连接电脑和开发板的桥梁,用于将编译好的程序下载到单片机中,并支持在线调试(断点、单步执行、查看变量等)。不同的调试器需要安装对应的驱动程序才能正常工作。
3.1 调试器基础知识
在开始安装驱动之前,让我们先了解一些调试器的基础知识,这将帮助你更好地理解后续的内容。
3.1.1 什么是调试器?
调试器是一个硬件设备,它的主要功能包括:
| 功能 | 说明 |
|---|---|
| 程序下载 | 将编译好的固件(.hex/.bin/.elf)烧录到单片机的 Flash 中 |
| 在线调试 | 设置断点、单步执行、查看和修改变量、查看寄存器 |
| 实时跟踪 | 高级调试器支持 SWO/ITM 跟踪输出,J-Trace甚至支持进行嵌入式代码的覆盖率分析,跟踪单片机运行的每一条指令(需额外引脚) |
| Flash 操作 | 擦除、读取芯片 Flash 内容 |
| 芯片解锁 | 解除读保护、恢复被锁定的芯片 |
3.1.2 调试器的工作原理
调试器通过特定的接口(比如 SWD、JTAG,天空星的2x5P排针口只引出了SWD信号)与单片机的调试模块进行通信:

TIP
单片机内部的调试模块:
ARM Cortex-M 系列处理器内置了一个叫做 DAP(Debug Access Port) 的调试访问端口。DAP 是 ARM 定义的调试接口标准,它允许外部调试器:
- 访问处理器的内部寄存器
- 读写系统内存(包括 Flash 和 RAM)
- 控制处理器的运行(暂停、单步、运行)
- 设置硬件断点和观察点
3.1.3 常见下载调试接口对比
| 接口 | 引脚数 | 速度 | 特点 | 适用场景 |
|---|---|---|---|---|
| SWD | 2(+电源/地) | 快 | 引脚少,Cortex-M 专用 | STM32 开发首选 |
| JTAG | 4-5(+电源/地) | 中等 | 功能全面,支持菊花链 | 复杂系统、富裕引脚多 |
| SWO | 1(额外专用的脚) | - | SWD 的扩展,可用于 虚拟printf 输出 | 【不是用于下载的】调试输出,检测芯片工作状态,keil里面的虚拟示波器可以用得到 |
| 串口 ISP | 2(TX/RX) | 慢 | 无需专用调试器,需借助上位机 | 简单烧录用,无调试器时可使用 |
| USB DFU | 2(D+/D-) | 中等 | 使用 USB 接口,需借助上位机 | 简单烧录用,无调试器时可使用 |
IMPORTANT
SWD 是 STM32 开发的首选调试接口
SWD(Serial Wire Debug)只需要两根信号线(SWDIO 和 SWCLK),却能实现完整的调试功能。对于 Cortex-M 系列单片机(包括 STM32),SWD 比 JTAG 更加推荐:
- 引脚更少:仅需 2 根信号线,节省 IO 资源
- 速度更快:SWD 的最高时钟可达 50MHz,实际会受限于线材和单片机性能
- 功能完整:支持所有调试功能(断点、单步、内存访问等)
- 兼容性好:所有主流调试器都支持 SWD
我们立创开发板制作的DAPLink就是只支持SWD协议的调试器。
3.1.4 主流调试器对比
| 调试器 | 厂商 | 开源 | 价格 | 速度 | 特点 |
|---|---|---|---|---|---|
| DAPLink | 厂家众多,是开源的 | ✅ | 低 | 中等 | 开源方案,常集成串口 |
| ST-Link | ST | ❌ | 中等 | 快 | ST 官方,STM32 最佳支持 |
| J-Link | SEGGER | ❌ | 高 | 最快 | 专业级,功能最强 |
| ULink | Keil/ARM | ❌ | 高 | 快 | Keil 官方调试器 |
TIP
对于本教程,我们推荐初学者使用 DAPLink 调试器:
- 价格实惠,适合学习
- 免驱动(Windows 10+)
- 开源方案,资料丰富
- 天空星配套的调试器就是基于 DAPLink 原版来改的
常见的DAPLink
市面上常见的开发板厂家,基本都会推出一款自家的,基于开源DAPLink修改优化来的调试器,我们立创开发板推出的DAPLink就是基于开源的DAPLink修改而来的。
我们的仿真器下图所示:

常见的ST-Link
ST-Link 是 ST 公司官方推出的调试器,有专用的上位机可用,目前市面上流通最广的是 ST-Link V2(U盘形状的小棒子)和 ST-Link V3(速度更快,功能更强)。可以某宝直接搜 st link。
- 正版 V2:白色外壳,价格适中,稳定。
- 克隆版 V2:常见的是铝合金外壳,五颜六色,价格极低(十几块钱)。虽然也能用,但偶尔会掉固件或不支持最新的 STM32 芯片,其实这个也算盗版。
- V3:性能最高,但是价格也较高,有廉价版本的STLINK-V3MINIE(¥100左右),只做STM32单片机开发的用户可以购入,现在V3会对芯片的ID进行识别,如果你用的是非ST公司的芯片,直接就会检测不到芯片。
下图为 ST-LINK 的部分实物照片:

常见的J-Link
价格昂贵,目前市面上流通的大部分都是盗版,只要没有segger标牌的基本就是盗版。正版的价格动辄¥2000+。可以说只要你
Jlink购入价格少于2K块钱,基本就是盗版(除非是EDA版)。
- 价格:正版价格昂贵(¥2000+),主要面向企业用户。
- 注意:市面上百元左右的黑色 J-Link多为盗版。新手慎用盗版 J-Link,因为一旦驱动软件检测到盗版,可能会自动锁定硬件,导致调试器变砖。请选择合适的代理进行购买。
正版 J-Link 的价格画风一般是这样的: 
3.2 DAPLink 驱动安装
DAPLink 是一种开源的调试器方案,基于 ARM 官方的 CMSIS-DAP 标准。我们天空星配套的调试器就是基于 DAPLink 进行修改优化而来的。
3.2.1 什么是 DAPLink?
DAPLink:
- 这是 ARM mbed 项目开源的一个 CMSIS-DAP 实现
- 它运行在调试器内部的 MCU 上(通常是 STM32F103 ,目前市面上也出现了很多基于国产芯片修改而来的),你可以理解为 这个DAPLink其实就是一个单片机的固件,只要硬件合适,一个STM32F103开发板刷了这个固件之后就能变身为调试器。
- 除了调试功能,常见的DAPLink还集成了 USB 转串口功能,这样你就不需要再多用一个串口工具了,我们的DAPLink是支持这个串口功能的
TIP

本产品是基于 ARM 官方开源项目 DAPLink 优化设计的调试烧录器。主控采用高性能 STM32F103CBT6为主控芯片,具备 128KB 大容量 Flash,完美支持 DAPLink 的所有高级特性。
它不仅是一个调试器,更集成了 USB转串口 和 U盘拖拽下载(当前仅添加了STM32F407的下载算法) 功能,是嵌入式开发(STM32, GD32, HC32等)的绝佳搭档。
- 三合一功能:集 调试仿真 (CMSIS-DAP) + 虚拟串口 (CDC) + 拖拽下载 (MSC) 于一身。
- 真·免驱:采用微软 WINUSB 协议,Win10/Win11/MacOS/Linux 系统插上即用,告别繁琐的驱动安装。
- 多重保护:
- 过流保护:内置 500mA 自恢复保险丝,保护您的电脑 USB 接口。
- 静电防护:USB 接口及所有 IO 调试接口均配备 TVS/ESD 保护二极管阵列,抗静电干扰,从容应对干燥环境。
- 支持广泛:完美支持 Keil MDK, IAR, PyOCD, OpenOCD 等主流开发工具。
- 固件可升级:基于 CBT6 大容量芯片,支持通过 U 盘模式拖拽更新调试器自身的固件(上电前把简牛座那里的RST和GND短接起来,进入升级模式后就可以把新固件拖入虚拟U盘中来进行升级了)。
- 带SWO功能:用串口实现,最高支持2M,建议平时用1M,如果需要更稳定的trace,需要跟换其他版本的固件,在硬件设计上,我们的daplink是兼容其他两种固件的(ST-Link及J-LinkOB,需要各位自行发掘,我们只提供DAPLink版本的固件)。
3.2.2 DAPLink 驱动安装(Windows 10/11)
好消息是:立创DAPLink 使用的是标准WinUSB 驱动,Windows 10 及以上版本通常可以免驱动直接使用。
验证步骤:
将 DAPLink 调试器插入电脑的 USB 接口
等待 Windows 自动识别(通常几秒钟)
打开 设备管理器:
- 右键"此电脑" -> "管理" -> "设备管理器"
- 或按
Win+X,选择"设备管理器"
检查设备是否正常识别:

如果设备显示正常(没有黄色感叹号或问号),说明驱动已经自动安装好了。
3.2 ST-Link 驱动安装【你没有就不用安装】
ST-Link 是 ST(意法半导体)官方推出的调试器,市面上也有很多第三方生产的 ST-Link 兼容调试器。
3.2.1 ST-Link 的版本
| 版本 | 接口 | 特点 |
|---|---|---|
| ST-Link V1 | USB | 早期版本,已淘汰 |
| ST-Link V2 | USB | 常见版本,支持 SWD/JTAG |
| ST-Link V2-1 | USB | 集成虚拟串口 |
| ST-Link V3 | USB | 最新版本,速度更快,功能更强 |
3.2.2 驱动安装方法
方法一:通过 STM32CubeProgrammer 安装(推荐)
如果你已经安装了 STM32CubeProgrammer(参考 2.3 节),那么 ST-Link 驱动已经自动安装好了。安装 CubeProgrammer 时会弹出驱动安装提示,全部选择"安装"即可。
方法二:单独安装 ST-Link 驱动
如果没有安装 STM32CubeProgrammer,可以单独下载 ST-Link 驱动:
下载地址:https://www.st.com/en/development-tools/stsw-link009.html
需要登录 ST 账号后下载
解压下载的文件
根据系统版本运行对应的安装程序:
- 64 位系统:
dpinst_amd64.exe - 32 位系统:
dpinst_x86.exe
- 64 位系统:
按照向导完成安装
3.2.3 验证驱动安装
- 将 ST-Link 插入电脑
- 打开设备管理器
- 检查是否出现以下设备:

或者打开 STM32CubeProgrammer:
- 选择 ST-LINK 连接方式
- 点击刷新按钮
- 应该能看到 ST-Link 的序列号

3.2.4 ST-Link 固件升级
ST-Link 的固件可以升级,新版固件可能修复 bug 或添加新功能。
使用 STM32CubeProgrammer 升级:
- 打开 STM32CubeProgrammer
- 连接 ST-Link(无需连接目标板)
- 点击菜单 ST-LINK下面的 固件升级
- 如果有新版本可用,点击升级

TIP
定期检查 ST-Link 固件更新是个好习惯,新版固件可以提升稳定性和兼容性。
3.3 J-Link 驱动安装【你没有就不用安装】
J-Link 是 SEGGER 公司推出的高性能调试器,功能强大,速度快,但价格也相对较高。它被广泛应用于专业的嵌入式开发中。
3.3.1 J-Link 的优势
| 优势 | 说明 |
|---|---|
| 速度快 | 下载速度比其他调试器快很多 |
| 功能全 | 支持 SWD、JTAG、SWO、ETM 等多种接口 |
| 芯片支持广 | 支持几乎所有 ARM 芯片和众多其他厂商芯片 |
| 软件丰富 | 配套 J-Link Commander、RTT Viewer 等工具 |
| 持续更新 | SEGGER 持续更新驱动和固件 |
3.3.2 驱动安装方法
前往 SEGGER 官网下载 J-Link Software and Documentation Pack:
选择适合你操作系统的版本下载(Windows x64)
运行安装程序
按照向导完成安装
3.3.3 验证驱动安装
将 J-Link 插入电脑
打开设备管理器,检查 通用串行总线设备 下是否有
J-Link设备,如果是黄色感叹号,有可能你驱动还是没有安装成功,
3.3.4 J-Link 配套工具介绍
安装 J-Link 软件包后,会获得多个有用的工具:
| 工具 | 用途 |
|---|---|
| J-Link Commander | 命令行调试工具,可执行各种调试命令 |
| J-Link GDB Server | GDB 服务器,供 Eclipse/VS Code 等调试使用 |
| J-Link RTT Viewer | 实时传输(RTT)数据查看工具,比串口 printf 更快 |
| J-Link SWO Viewer | 查看 SWO 调试输出 |
| J-Flash | 独立的烧录工具,支持批量烧录 |
| Ozone | SEGGER 出品的专业调试器软件,可以以极高的采样率查看变量并可以数据可视化 |
NOTE
关于 J-Link EDU
SEGGER 推出了教育版 J-Link(J-Link EDU Mini),价格相对便宜,功能与标准版相同,速度会稍微慢一点,仅限于非商业用途。学生和爱好者可以考虑购买 J-Link EDU Mini。
3.4 调试器选择建议
看到这里,你可能会问:这么多调试器,我该选哪个?
初学者推荐:DAPLink
| 理由 | 说明 |
|---|---|
| 价格便宜 | 几十元即可购买 |
| 免驱动 | Windows 10+ 即插即用 |
| 功能够用 | 下载、调试、串口一体 |
| 开源方案 | 资料丰富,容易获取帮助 |
进阶用户推荐:ST-Link 或 J-Link
如果预算充足,或者对调试速度、功能有更高要求,可以考虑:
- ST-Link V2/V3:与 STM32 配合最佳,价格适中
- J-Link:速度最快,功能最强,但价格较贵
天空星筑基学习板推荐的调试器:立创DAPLink,我们后续的学习和教程编写中,我也会使用这个。
四 串口工具与辅助软件安装
在嵌入式开发中,串口(UART)是最常用的调试手段之一。通过串口,我们可以将单片机内部的调试信息打印到电脑上查看,也可以从电脑向单片机发送控制命令。这种调试方式简单、直观、成本低,是每个嵌入式工程师的必备技能。
4.1 串口通信基础知识
在安装串口工具之前,让我们先了解一些串口通信的基础知识。
4.1.1 什么是串口(UART)?
UART(Universal Asynchronous Receiver/Transmitter),通用异步收发器,是一种常见的串行通信接口。它的特点是:
- 异步:不需要专门的时钟线,通过约定的波特率同步
- 全双工:可以同时发送和接收数据
- 简单:只需要两根数据线(TXD 和 RXD)
- TXD(Transmit Data):数据发送端,将数据从发送设备发送到接收设备。
- RXD(Receive Data):数据接收端,用于接收从发送设备发来的数据。
4.1.2 串口通信的关键参数
使用串口通信时,通信双方必须约定好以下参数:
| 参数 | 说明 | 常用值 |
|---|---|---|
| 波特率 | 每秒传输的位数(bps) | 9600, 115200, 921600 |
| 数据位 | 每帧数据的位数 | 8(最常用) |
| 停止位 | 每帧结束的标志位数 | 1(最常用) |
| 校验位 | 用于错误检测 | None(无校验,最常用) |
波特率是最重要的参数。如果通信双方的波特率不一致,接收到的数据就会是乱码。
IMPORTANT
波特率的选择
- 9600:传统默认值,速度慢但兼容性好
- 115200:现代常用值,速度快,推荐使用
- 921600 或更高:高速传输,需要硬件支持
本教程中我们尽量所有工程统一使用 115200 波特率。不过在需要大量数据输出时,我们会提高波特率来降低阻塞时间。
上图是一个典型的UART串行通信数据帧结构的示意图,展示了UART帧中的起始位、数据位、校验位和停止位,大家可以结合理解:
TIP
空闲状态下串口是高电平,发出低电平表示起始位,表示数据开始Start;
接下来就是数据位了(D0-D7),如果你设置是8bit,那么这里就会有8个位,每个位的持续时间是波特率的倒数。假设波特率为 9600 bps,那么每个位的持续时间(Bit Time)为Tbit=1/9600≈104.17us。
带*号的p是Parity的缩写,也就是奇偶校验位的缩写,是可选的,普通的通讯中不需要使能。
最后的Stop就是停止位了,一般都是用1位的。当传输完成后数据线又会恢复为高电平,表示这一帧传输结束,重新变为空闲状态。
总结一下:
- 发送端:先发送起始位,将TX线拉低,然后依次发送数据位,接着发送可选的奇偶校验位,最后发送停止位。
- 接收端:检测起始位的到来,然后按顺序接收数据位,校验位(如果有),并通过停止位判断传输结束。
TIP
上面这些只是对串口的简单介绍,后续我们学习到串口章节时我会再详细讲介绍的。
4.2 串口驱动安装
立创DAPLINK的串口功能也是免驱的,他是不需要额外安装驱动就可以使用的,但是如果你用的是专用的串口工具,比如说CH340,CH343或者FT232这种芯片的,就需要你进行驱动安装后才能正常稳定使用的。
4.2.1 常见 USB 转串口芯片
| 芯片型号 | 厂商 | 特点 | 驱动下载 |
|---|---|---|---|
| CH340/CH343 | 南京沁恒 | 国产,便宜,常见 | wch.cn |
| CP2102/CP2104 | Silicon Labs | 稳定,常见 | silabs.com |
| FT232 | FTDI | 老牌,稳定,较贵 | ftdichip.com |
TIP
立创 DAPLink 调试器集成了虚拟串口功能,无需额外的 USB 转串口模块。DAPLink 的虚拟串口使用 CDC(Communications Device Class)标准,Windows 10 及以上版本通常可以免驱动使用。
立创开发板团队截止今天(2026年2月4日),总共推出了三款串口工具,涉及CH340,CH343P,FT232这三种芯片,其差异及性能如下表所示:
| 串口工具 | 高性价比(国产芯片) | 工业级(国产芯片) | 工业级(进口芯片) |
|---|---|---|---|
| 实物图 | ![]() | ![]() | ![]() |
| 名称 | USB转TTL-CH340X | USB转TTL-CH343P | USB转TTL-FT232 |
| 型号 | LCKFB-CH340X-USB-TO-TTL-TYPE-C | LCKFB-CH343P-USB-TO-TTL-TYPE-A | LCKFB-FT232-USB-TO-TTL-TYPE-A |
| 立创商城编号 | C49247784 | C50198964 | C50198965 |
| 到手即用 | ❌️需要焊接排针 | ✅ | ✅ |
| 具体芯片选型 | CH340X 立创商城编号:C3035748 | CH343P 立创商城编号:C2846043 | FT232RNL-REEL 立创商城编号:C5246810 |
| 主控芯片工作温度范围 | -20℃ 至 70℃【消费级】 | -40℃ 至 85℃【工业级】 | -40℃ 至 85℃【工业级】 |
| 串口通讯波特率范围 | 50 bps ~ 2 Mbps | 50 bps~6 Mbps | 300 bps to 3 Mbps |
| 硬件流控(RTS CTS) | ✅ | ✅ | ✅ |
| 是否有三防漆防护 | ❌️ | ✅50-200um 透明UV三防漆 防霉菌、防潮湿、防盐雾。喷涂处有绝缘特性。【连接器部分不能喷涂三防漆,否则会导致接插口接触不良,所以板面并非100%喷涂,该板为单面贴片,只在正面喷涂三防漆】 | ✅50-200um 透明UV三防漆防霉菌、防潮湿、防盐雾。喷涂处有绝缘特性。【连接器部分不能喷涂三防漆,否则会导致接插口接触不良,所以板面并非100%喷涂,该板为单面贴片,只在正面喷涂三防漆】 |
| USB接口 | TYPE-C 母口 | TYPE-A 公口 | TYPE-A 公口 |
| USB口过流保护(自恢复保险丝) | ✅ | ✅ | ✅ |
| USB口防护(防静电,防过压过流,防反接) | ✅ BST236A054U+自恢复保险丝 实现以下功能 1.USB数据口静电防护2.钳位(过压)保护,TVS3.过流保护4.防反接(作用不大)USB接口也不会接反 | ✅BST236A054U+自恢复保险丝 实现以下功能 1.USB数据口静电防护2.钳位(过压)保护,TVS3.过流保护4.防反接(作用不大)USB接口也不会接反 | ✅BST236A054U+自恢复保险丝 实现以下功能 1.USB数据口静电防护2.钳位(过压)保护,TVS3.过流保护4.防反接(作用不大)USB接口也不会接反 |
| 串口接口 | 2*5P排针,需自行焊接定义如下:TNO|3V3|GND|TXD|RXD N C|5V0|GND|CTS|RTS | 2*5P专用定做简牛座,已经焊接好。搭配对应带全凸排母可以防呆(防止接反)定义如下:TNO|3V3|GND|TXD|RXD E5V|5V0|GND|CTS|RTS | 2*5P专用定做简牛座,已经焊接好。搭配对应带全凸排母可以防呆(防止接反)定义如下:TNO|3V3|GND|TXD|RXD E5V|5V0|GND|CTS|RTS |
| 串口IO电平 | 只支持3.3V的IO电平,但芯片IO支持5V耐压,具备防内倒灌的功能。 | 默认为3.3V的IO电平,如果需要5.0V的IO电平,需要将排针处的【E5V】与【5V0】短接起来,此时IO电平即为5.0V。 | 默认为3.3V的IO电平,如果需要5.0V的IO电平,需要将排针处的【E5V】与【5V0】短接起来,此时IO电平即为5.0V。 |
| 指示灯 | PWR【红灯】:电源指示灯,接入电源,3.3V的LDO工作正常则亮。 RX【蓝灯】:串口发送指示,当RX线上的电平变为低电平时灯亮,可用来简单观察信号是否正常被接收。 TX【绿灯】:串口发送指示,当TX线上的电平变为低电平时灯亮,可用来简单观察信号是否正常被接收。PS:RX,TX对应灯的亮度受波特率影响很大,波特率小时由于低电平持续时间长,会比较亮,波特率太大时由于低电平持续时间过长,会导致人眼观察不到灯的闪烁。比如你在2M波特率的情况下发送一个字节,人眼大概率是观察不到这个发送灯的闪烁的。 | PWR【红灯】:电源指示灯,接入电源,3.3V的LDO工作正常则亮。 RX【蓝灯】:串口接收指示,当RX线上的电平变为低电平时灯亮,可用来简单观察信号是否正常被接收。 TX【绿灯】:串口发送指示,当TX线上的电平变为低电平时灯亮,可用来简单观察信号是否正常被接收。 PS:RX,TX对应灯的亮度受波特率影响很大,波特率小时由于低电平持续时间长,会比较亮,波特率太大时由于低电平持续时间过长,会导致人眼观察不到灯的闪烁。比如你在2M波特率的情况下发送一个字节,人眼大概率是观察不到这个发送灯的闪烁的。 | PWR【红灯】:电源指示灯,接入电源,3.3V的LDO工作正常则亮。 RX【蓝灯】:串口接收指示,接到芯片的RXLED#脚,当FT232RNL通过 RXD 引脚从外部设备接收数据并缓存至内部 FIFO时该LED被点亮,指示实时串口接收数据流。 TX【绿灯】:串口发送指示,接到芯片的TXLED#脚,当FT232RNL正在通过 TXD 引脚向外部设备发送数据时该LED被点亮,指示实时串口发送数据流。 PS:RX,TX对应灯被专用引脚控制,并不是直接接到对应线上的,其使用数字单稳态电路,即使数据传输的百分比很小(就是波特率很大,发送数据量很小),我们也能观察到这个灯的闪烁。 |
| 是否有外壳(防止板子与外部器件短路) | ❌️ | ✅【外壳为PC材质(聚碳酸酯),深褐色,低透光】温度范围:-45℃~125℃PCB与外壳之间有专用热熔胶固定 | ✅【外壳为PC材质(聚碳酸酯),深褐色,低透光】温度范围:-45℃~125℃ PCB与外壳之间有专用热熔胶固定 |
| 输出电源限流(3.3V和5.0V对外输出) | ❌️ | ✅3.3V限流约 618mA【理论值】,实际生效后约400mA 5.0V限流约 425mA【理论值】,实际生效后约300mA 串口正常运行的情况下,3.3V或5.0V短路或超过限流值均不会导致串口掉线,但3.3V和5.0V不能同时短路,会导致USB供电功率不足。 | ✅3.3V限流约 618mA【理论值】,实际生效后约400mA 5.0V限流约 425mA【理论值】,实际生效后约300mA 串口正常运行的情况下,3.3V或5.0V短路或超过限流值均不会导致串口掉线,但3.3V和5.0V不能同时短路,会导致USB供电功率不足。 |
| 输出电源限流(3.3V和5.0V对外输出) | ❌️ | ✅限流的芯片集成改功能 | ✅限流的芯片集成改功能 |
| 适用系统 | Windows11/10/8.1/8/7,Server 2012/2008 Linux macOS Android 未列举完全,详情请看各自芯片官方的介绍 | Windows11/10/8.1/8/7,Server 2012/2008 Linux macOS Android 未列举完全,详情请看各自芯片官方的介绍 | Windows11/10/8.1/8/7,Server 2012/2008 Linux macOS Android 未列举完全,详情请看各自芯片官方的介绍 |
| IO防护(ESD)【要考虑负载电容】靠近芯片 | ✅ | ✅ | ✅ |
| 信号隔离 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 |
| 电源隔离 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 | ❌️后续会出专用隔离TTL和隔离RS485 敬请期待 |
TIP
这三个串口工具的资料和购买地址请来这里查看:
4.2.2 CH340 驱动安装
如果你使用的是我们的USB转TTL-CH340X或者其他使用CH340作为主控芯片的串口工具,则需要安装 CH340 驱动:
Windows
- 点击链接下载驱动(WCH官方): https://www.wch.cn/downloads/CH341SER_EXE.html

- 运行 CH341SER.EXE,按提示安装;若已装旧版,先“卸载”后再“安装”。

点击安装,等待一段时间后就会提示你驱动安装成功了。
此时你打开设备管理器,点开端口(COM和LPT),如果此时出现了有 CH340 字样的端口号就说明你的驱动安装成功了。记住这个串口号,就可以去你所使用的串口软件那进行使用了。

TIP
ps:如果你不满意这个串口号,也可以自己进行COM号的修改,记得系统里的COM口号千万不要重复了。
- 设备管理器 → 端口 → 设备属性 → 端口设置 → 高级 → COM 端口号
如下图所示进行修改

其他系统请自行去WCH官网寻找驱动
CH341SER.EXE - 南京沁恒微电子股份有限公司这个链接的下方就会有其他系统的驱动程序:

驱动程序支持列表: 1、 CH341SER.EXE(Windows系统驱动,包含WIN10/WIN11系统32/64位); 2、 CH341SER_ANDROID.ZIP(安卓免驱应用库及例程); 3、 CH341SER_LINUX.ZIP(Linux系统驱动) 4、 CH34XSER_MAC.ZIP(苹果系统驱动) 5、 COMTransmit.ZIP(Windows串口调试软件)
TIP
记住 COM 口号
每次连接 USB 转串口设备,Windows 会为其分配一个 COM 口号(如 COM3、COM5 等)。打开串口调试助手时,需要选择正确的 COM 口号才能通信。
COM 口号可能会变化(特别是换了 USB 口或重装驱动后),如果连接不上,先检查设备管理器中的实际 COM 口号和你在软件中选择的是不是一样的。
4.3 串口调试助手
串口调试助手用于在电脑上显示和发送串口数据。市面上有很多选择,这里推荐几款常用的。
4.3.1 VOFA+(强烈推荐)
VOFA+ 是一款国产的数据可视化和调试工具,功能非常强大。它远不止是一个串口助手,更是一个数据可视化平台。
主要功能:
| 功能 | 说明 |
|---|---|
| 串口收发 | 基础的串口数据收发功能 |
| 数据曲线 | 实时绘制数据曲线,直观观察数据变化 |
| 多种协议 | 支持 FireWater、JustFloat、RawData 等协议 |
| 图像显示 | 甚至可以通过串口数据来显示摄像头或图像传感器数据 |
| 控件交互 | 可以添加按钮、滑块等控件发送命令 |
| TCP/UDP | 除了串口,还支持网络通信 |
下载与安装:
- 官方网站:https://www.vofa.plus/
- 下载安装包后,按照向导安装即可
VOFA+ 界面预览:

VOFA+ 的数据协议:
为了让 VOFA+ 正确解析数据并绘制曲线,需要按照特定的协议格式发送数据:
| 协议 | 格式示例 | 说明 |
|---|---|---|
| FireWater | 1.23,4.56,7.89\n | 逗号分隔,换行结尾,简单易用 |
| JustFloat | [4字节浮点] [4字节浮点] ... | 二进制格式,效率高 |
| RawData | 任意格式 | 原始数据显示,不解析 |
FireWater 协议示例代码:
// 在 STM32 中使用 VOFA+ FireWater 协议发送数据
float temperature = 25.5f;
float humidity = 60.0f;
// 格式:数值用逗号分隔,最后以换行符结尾
printf("%.2f,%.2f\n", temperature, humidity);2
3
4
5
6
TIP
VOFA+ 是本教程推荐的串口工具
后续章节中涉及到串口打印、数据可视化的内容,我们都会使用 VOFA+。建议现在就安装好,并熟悉基本操作。
4.3.2 MobaXterm
MobaXterm 是一款功能非常丰富的终端工具,集成了 SSH、Telnet、串口终端、X Server、文件传输等多种功能于一身,是嵌入式开发者的瑞士军刀。如果我们后续要使用系统,比如RT-Thread,那这个工具进行命令的交互就很方便了。
主要功能:
| 功能 | 说明 |
|---|---|
| SSH/Telnet | 远程登录 Linux 服务器 |
| Serial | 串口终端【单片机开发基本只用这个】 |
| SFTP/SCP | 安全文件传输 |
| X11 Server | 显示 Linux 图形界面 |
下载与安装:
- 官方网站:https://mobaxterm.mobatek.net/download.html
- 有 Home Edition(免费版)和 Professional Edition(付费版)
- 免费版功能已经足够日常使用
使用串口功能:
- 打开 MobaXterm
- 点击 Session -> Serial
- 选择 COM 口和波特率
- 点击 OK 连接

五 如何下载程序到单片机
程序编译完成后,需要将生成的固件(通常是 .hex 或 .bin 文件)下载到单片机的 Flash 存储器中才能运行。根据不同的硬件接口和工具,有以下几种常见的下载方式。
5.1 下载方式概述
在开始详细介绍之前,让我们先了解 STM32 支持的几种程序下载方式:
| 下载方式 | 硬件要求 | 速度 | 是否支持硬件调试(直接看寄存器,打断点) | 适用场景 |
|---|---|---|---|---|
| SWD(调试器,如 DAPLink / ST‑Link / JLink) | 调试器 + SWD 接口(SWDIO/SWCLK) | 快 | ✅ 支持 — 完整的单步/寄存器/断点调试 | 开发调试首选;固件开发与单步排查必备 |
| 串口 ISP(厂商 ROM Bootloader over UART) | USB 转串口 + UART 接口 | 中等 | ❌ 不支持(仅烧写/擦写) | 无调试器时的常用方案,适合早期或极简设备 |
| USB DFU(ROM 上的 USB 引导或自定义 DFU) | USB 接口(且 MCU 必须在 ROM 中支持 DFU 或自带 USB 引导) | 中等 | ❌ 不支持(仅下载) | 设备带 USB 且需要方便的现场升级或用户刷写时使用 |
用USB来下载固件并不是每个芯片都支持,也不是说只要有USB接口就支持,比如ST的芯片STM32F4系列支持,STM32F1系列就不支持。要支持这个功能,芯片厂家就需要提前在芯片内部固化一段程序,会增加一定的成本。
IMPORTANT
学习阶段请使用调试器下载(比如用我们的立创DAPLink)
在学习和开发阶段,强烈建议使用调试器进行程序下载。原因是:
- 支持在线调试:可以设置断点、单步执行、查看变量,极大提高调试效率
- 下载速度快:比串口下载快得多
- 操作简单:电脑上点一下按钮就能下载
- 无需操作硬件:不用操作 BOOT 引脚
串口 ISP 和 USB DFU 主要用于没有调试器的情况,或者最简单的生产环节的批量烧录(实际的批量生产还是直接买个脱机烧录器最好,其底层原理也是基于调试器的,只不过脱离了电脑也可以用)。
5.2 使用外部调试器下载(推荐)
这是最常用、最灵活的下载方式,使用外部调试器通过 SWD 或 JTAG 接口连接单片机进行下载和调试。
5.2.1 什么是 SWD 和 JTAG?
SWD(Serial Wire Debug) 和 JTAG(Joint Test Action Group) 都是调试接口标准,用于连接调试器和目标芯片。
SWD 接口详解:
SWD 是 ARM 公司为 Cortex-M 系列处理器设计的两线制调试接口,使用以下信号:
| 信号 | 全称 | 方向 | 功能 |
|---|---|---|---|
| SWDIO | Serial Wire Data I/O | 双向 | 数据输入/输出 |
| SWCLK | Serial Wire Clock | 调试器→目标 | 时钟信号 |
| SWO | Serial Wire Output | 目标→调试器 | 跟踪输出(可选,非必需) |
| nRST | Reset | 调试器→目标 | 复位信号(可选,非必需) |
JTAG 接口详解:
JTAG 是更通用的调试接口,使用以下信号:
| 信号 | 全称 | 方向 | 功能 |
|---|---|---|---|
| TDI | Test Data In | 调试器→目标 | 测试数据输入 |
| TDO | Test Data Out | 目标→调试器 | 测试数据输出 |
| TCK | Test Clock | 调试器→目标 | 时钟信号 |
| TMS | Test Mode Select | 调试器→目标 | 模式选择 |
| nTRST | Test Reset | 调试器→目标 | 测试复位(可选) |
SWD vs JTAG 对比:
| 特性 | SWD | JTAG |
|---|---|---|
| 信号线数量 | 2 根 + 可选SWO | 4-5 根 |
| 速度 | 较快(最高 50MHz) | 中等 |
| 功能 | 调试、下载 | 调试、下载、边界扫描 |
| 菊花链 | 不支持 | 支持(多设备串联) |
| 适用芯片 | ARM Cortex-M 系列 | 几乎所有芯片 |
| 推荐度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
NOTE
对于 STM32 开发,我们使用 SWD 接口,天空星在TYPE-C旁边引出的那个2x5P排针处也只引出了SWD通讯接口
SWD 只需要 2 根信号线,已经能够实现所有调试功能,是 Cortex-M 系列单片机的首选调试接口。
5.2.2 市面上常见的调试器
我们在前面3.1.4 主流调试器对比章节中,已经大概介绍过了,这里只是稍微提一嘴。
| 调试器名称 | 特点 | 价格 | 推荐度 |
|---|---|---|---|
| DAPLink | 开源方案,基于 CMSIS-DAP 标准,兼容性好,我们推出的DAPLink就集成了一路串口功能 | 便宜 | ⭐⭐⭐⭐⭐ |
| ST-Link | ST 官方出品,与 STM32 配合最佳,部分型号(V2.1版本以上)集成串口 | 中等 | ⭐⭐⭐⭐ |
| J-Link | SEGGER 出品,速度快,功能强,支持多种芯片 | 较贵 | ⭐⭐⭐⭐ |
本教程配套的调试器是立创开发板推出的 LCKFB DAPLink,具有以下优点:
- ✅ 价格实惠
- ✅ 免驱动(Windows 10+)
- ✅ 支持 SWD 调试
- ✅ 集成 USB 转串口功能
- ✅ 内置 500mA 自恢复保险丝,USB 接口及所有 IO 调试接口均配备 TVS/ESD 保护二极管阵列
- ✅ 完美支持 Keil MDK, IAR, PyOCD, OpenOCD 等主流开发工具
- ✅ 与天空星开发板完美兼容,这个调试器的接口定义就是按照天空星的调试脚顺序来设计的,也可以说完全就是为了这篇教程才做的
5.2.3 DAPLink 调试器的连接方法
天空星核心板引出了一个调试接口,2x5P的排针,包含了 SWD 调试信号和一路串口。
连接方式:
使用杜邦线或排线将 DAPLink 调试器与天空星开发板连接:

| DAPLink仿真器 序号 | DAPLink仿真器 引脚 【与面板对应】 | 天空星2X5P排针调试口 | DAPLink的引脚说明 |
|---|---|---|---|
| 1️⃣ | RST | RST | 复位引脚。用于控制目标芯片复位。在下载程序或调试时,DAPLink通过拉低此引脚使MCU进入复位状态,可以强行复位进入低功耗状态的单片机,如果各位在调试器设置界面选择为引脚复位则需要连接本脚。 |
| 2️⃣ | 5V0 | 5V0 | 5V电源输出。直接取自USB电源,经过了限流保护。可为天空星开发板(或者你的其他板子)供电。 |
| 3️⃣ | DIO | DIO | 串行数据线 (Serial Wire Data I/O)。SWD协议的双向数据信号线,用于调试器与芯片内核进行数据交互。 |
| 4️⃣ | CLK | CLK | 串行时钟线 (Serial Wire Clock)。SWD协议的时钟信号,由DAPLink产生,作为时钟来确定数据传输的时序。 |
| 5️⃣ | SWO | SWO | 串行线输出 (Serial Wire Output)。用于ITM调试信息输出,可代替串口打印,实现更高速、非阻塞的变量追踪(Trace)。时钟最高2M,但建议各位使用1M的时钟,这个是用内部芯片STM32F103CBT6的串口来实现的,没有其他商业调试器那么稳定。 |
| 6️⃣ | 3V3 | 3V3 | 3.3V电源输出。由DAPLink仿真器的内部LDO稳压产生,可为小功耗目标板供电,或作为目标板IO电压的参考基准。 |
| 7️⃣ | GND | GND | 电源地。必须连接 这是信号传输的基准电平,不共地会导致通讯失败。 |
| 8️⃣ | GND | GND | 备用接地引脚,可共用来增强回路稳定性。 |
| 9️⃣ | TXD | U1R | 虚拟串口发送。连接目标板的 RX 端。DAPLink发出的数据,目标板来接收。 |
| 🔟 | RXD | U1T | 虚拟串口接收。连接目标板的 TX 端。目标板打印的 printf 数据,由此引脚进入DAPLink并传至电脑。虽然说是虚拟串口,初学者就把他当成普通串口来理解就可以。 |

WARNING
连接注意事项
- GND 必须连接:调试器和目标板必须共地,否则通信会失败
- 先接 GND:连接时建议先接 GND,再接其他线
- 电压匹配:确保调试器和目标板的电压一致(都是 3.3V)
你也可以像下图一样,直接把天空星和DAPLink对插用杜邦线连起来,他们各自的引脚定义正好是兼容的。

5.2.4 在 Keil MDK 中配置 DAPLink 下载
连接好硬件后,需要在 Keil 中进行正确配置才能下载程序。
Step 1:打开工程配置
打开你的 Keil 工程,可以参考2.1.7 进行编译测试小节中打开的那个工程。
点击菜单栏的 Options for Target 按钮(魔术棒图标 🔧),下图所示1️⃣的地方,2️⃣先不用管

Step 2:配置调试器
- 切换到 Debug 选项卡
- 在右侧的下拉框中选择 CMSIS-DAP Debugger,如果你是其他调试器的话就需要选择你实际使用的调试器选项
- 点击右边的 Settings 按钮

Step 3:验证调试器连接
在弹出的 Cortex-M Target Driver Setup 窗口中,先选择菜单栏的第一个Debug,然后选择当前使用的调试器,也就是LCKFB DAPLink CMSIS-DAP,正常情况下,在SW Device那里的IDCODE会显示一个ID值,对于天空星STM32系列核心板来说,这个值是0x2BA01477。
- 假如你左边的
CMSIS-DAP-JTAG/SW Adapter选项框里面没有对应调试器的话,可能是调试器和电脑之间没有连接好,先重新插拔试一下,最好直接接电脑的USB口,不要经过USB扩展坞。 - 假如你右边的
SW Device里面没有IDCODE显示出来,那可能是调试器和天空星开发板之间没有的连接不稳定或者接错了,同时,如果线材质量不够好的话,也需要把MAX Clock的速度要降低一点,可以从10MHz先降到1MHz试试。 - Port接口这里我们选择SW方式,但是我们天空星的板子引出来的2X5P排针中,我们只引出了SWD用到的DIO和CLK,相比JTAG下载方式占用的引脚更少。

TIP
检查项:
| 项目 | 正常状态 | 异常处理 |
|---|---|---|
| 调试器名称 | 显示 "LCKFB DAPLink" 或类似 | 检查 USB 连接、驱动安装 |
| IDCODE | 显示 "0x2BA01477" 或类似 | 检查 SWD 连线、目标板供电 |
| Port | 选择 SW(SWD 模式) | - |
TIP
IDCODE 0x2BA01477 是什么?
这是 ARM Cortex-M4 内核的调试端口标识码。如果能看到这个值,说明调试器已经成功与芯片的调试模块建立了通信。不同系列的芯片 IDCODE 可能不同。
Step 4:配置 Flash 下载
然后我们切换到第3页Flash Download,将这里的 Reset and Run 给勾选上。目的是让我们的程序在下载后就立即运行,如果不勾选这个,你需要按一下板子上的复位按键单片机才会开始运行。最后在关闭这个对话框之前,一定要点击OK,否则之前设置的全部都不会保存,如果你没有点OK,而是直接关掉了这个对话框,那么本小节前面的全部设置都需要重新设置。

IMPORTANT
务必勾选 "Reset and Run"!
如果不勾选这个选项,程序下载后不会自动运行,需要手动按复位键。很多初学者下载成功后发现程序不运行,就是因为忘记勾选这个选项。
Step 5:下载程序
- 点击工具栏的 Rebuild(全编译)按钮,确保程序编译成功

- 点击工具栏的 Download(下载)按钮,将程序下载到芯片

下载成功的提示:
如果下载成功,Build Output 窗口会显示类似信息:
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at xxxxxx2
3
4
5
5.2.5 常见下载失败问题排查
如果下载失败,请按照以下步骤排查:
5.2.6 ST-Link 调试器的使用
如果你使用的是 ST-Link 调试器,配置方法类似,这里不再啰嗦,唯一要注意的就是在Debug 选项卡中要选好对应的调试器。
5.2.7 J-Link 调试器的使用
如果你使用的是 J-Link 调试器,配置方法类似,这里不再啰嗦,唯一要注意的就是在Debug 选项卡中要选好对应的调试器。
5.3 使用串口下载(ISP 模式)
STM32 芯片内置了 Bootloader(引导程序),支持通过串口(UART)进行程序下载,这种方式也叫 ISP(In-System Programming)。这个引导程序是芯片厂家在出厂时就固化在芯片内部的,我们是修改不了的。
5.3.1 进入串口下载模式
STM32 通过 BOOT0 和 BOOT1 引脚的电平来决定启动模式:
| BOOT0 | BOOT1(PB2) | 启动模式 |
|---|---|---|
| 0 | X(任意) | 从 Flash 启动(正常运行) |
| 1 | 0 | 从系统存储器启动(串口或者USB下载模式) |
| 1 | 1 | 从 SRAM 启动 |
TIP
天空星开发板在设计时,为了引出更多可用IO,所以将BOOT1也就是PB2作为控制 LED 亮灭的引脚,这个引脚的主要功能是在复位后决定微控制器的启动模式。具体来说,它用于选择系统 SRAM 作为启动空间。一般是用来作为程序在内存中进行调试使用的,一般情况下很少用到,所以在本开发板中就直接用 R30 下拉电阻给强制下拉了。默认是不会进入内置 SRAM 启动的。

当系统启动之后,这个 BOOT1 就可以作为普通 IO 口(PB2)使用了。
所以,对于天空星系列开发板来说,就只有两种启动模式:
| BOOT0 | 启动模式 |
|---|---|
| 0 | 从 Flash 启动(正常运行) |
| 1 | 从系统存储器启动(串口或者USB下载模式) |

结合原理图,也就是说在开发板上电时,你按下BOOT0按键,此时天空星开发板就会进入串口或者USB下载模式了。
操作步骤:
- 按住板上的 BOOT0 按键不要松开。
- 按一下 复位(RST-黑色的按钮) 按键(或重新上电),此时天空星开发板就会进入从系统存储器启动(串口或者USB下载模式)。
TIP
大家一定要理解,我们在上面步骤2里面重新上电或者按复位按钮,无非就是要让系统重新启动一下去读取BOOT0按键的高低点评状态,我见过很多用户就直接在那长按BOOT按键,复位的时候又松开了,这个是没有用的,因为单片机(MCU)只会在“复位信号结束的那一瞬间(NRST引脚电平由低变高)”或者“刚上电启动的起始时刻”去采样(读取)BOOT0 引脚的电平状态。
只有在系统重新启动这个关键时间节点上,BOOT0 保持为高电平,芯片内部的硬件电路才会将系统存储器(System Memory) 映射到启动地址(0x0000 0000),从而执行出厂自带的 Bootloader 代码,进入串口或 USB 下载模式。一旦复位完成,代码开始运行,再怎么按 BOOT0 键都无法改变当前的运行模式了。
5.3.2 使用串口工具进行下载
可以使用 STM32CubeProgrammer 工具通过串口下载程序。
将 USB 转串口模块连接到单片机的 UART1(PA9-TX、PA10-RX),就在2x5P排针口那里。下面以CH343P串口工具做举例。

让单片机进入串口下载模式(参考上一节【5.2.1 进入串口下载模式】)。
打开 STM32CubeProgrammer,选择 UART 连接方式。
选择正确的 COM 口和波特率(通常为 115200)。
点击 连接。
加载
.hex或.bin固件文件。点击 下载 开始下载。
下载完成后,按板子上的复位键正常启动程序。

NOTE
天空星调试口上引出了串口,可以直接使用 配套DAPLink 自带的串口功能进行 ISP 下载,无需额外的 USB 转串口模块。
5.4 使用 USB DFU 下载
STM32F4 系列支持 USB DFU(Device Firmware Upgrade) 模式,可以通过 USB 接口直接下载程序,无需调试器或串口模块。
5.4.1 进入 USB DFU 模式
这里和 5.2.1 进入串口下载模式 章节高度一致,毕竟都是从系统存储器启动
STM32 通过 BOOT0 和 BOOT1 引脚的电平来决定启动模式:
| BOOT0 | BOOT1(PB2) | 启动模式 |
|---|---|---|
| 0 | X(任意) | 从 Flash 启动(正常运行) |
| 1 | 0 | 从系统存储器启动(串口或者USB下载模式) |
| 1 | 1 | 从 SRAM 启动 |
TIP
天空星开发板在设计时,为了引出更多可用IO,所以将BOOT1也就是PB2作为控制 LED 亮灭的引脚,这个引脚的主要功能是在复位后决定微控制器的启动模式。具体来说,它用于选择系统 SRAM 作为启动空间。一般是用来作为程序在内存中进行调试使用的,一般情况下很少用到,所以在本开发板中就直接用 R30 下拉电阻给强制下拉了。也就是说BOOT1在启动时一直会是低电平,也就是0,不会进入内置 SRAM 启动的。

当系统启动之后,这个 BOOT1 就可以作为普通 IO 口(PB2)使用了。
所以,对于天空星系列开发板来说,就只有两种启动模式:
| BOOT0 | 启动模式 |
|---|---|
| 0 | 从 Flash 启动(正常运行) |
| 1 | 从系统存储器启动(串口或者USB下载模式) |

结合原理图,也就是说在开发板上电时,你按下BOOT0按键,此时天空星开发板就会进入串口或者USB下载模式了。
操作步骤:
- 将天空星开发板上的TYPE-C连入电脑。
- 按住板上的 BOOT0 按键不要松开。
- 按一下 复位(RST-黑色的按钮) 按键(或重新上电),此时天空星开发板就会进入从系统存储器启动(串口或者USB下载模式)。
TIP
大家一定要理解,我们在上面步骤2里面重新上电或者按复位按钮,无非就是要让系统重新启动一下去读取BOOT0按键的高低点评状态,我见过很多用户就直接在那长按BOOT按键,复位的时候又松开了,这个是没有用的,因为单片机(MCU)只会在“复位信号结束的那一瞬间(NRST引脚电平由低变高)”或者“刚上电启动的起始时刻”去采样(读取)BOOT0 引脚的电平状态。
只有在系统重新启动这个关键时间节点上,BOOT0 保持为高电平,芯片内部的硬件电路才会将系统存储器(System Memory) 映射到启动地址(0x0000 0000),从而执行出厂自带的 Bootloader 代码,进入串口或 USB 下载模式。一旦复位完成,代码开始运行,再怎么按 BOOT0 键都无法改变当前的运行模式了。
如果你上面操作正常,你此时就可以在设备管理器中看到一个STM32设备了:

5.4.2 使用 STM32CubeProgrammer 下载
再开始操作前,我们先将开发板使用 type-C 线连接电脑:

- 打开 STM32CubeProgrammer,选择 USB 连接方式。
- 让单片机进入DFU模式(参考上一节【5.3.1 进入USB DFU下载模式】)。
- 选择USB点击刷新按钮,找到 DFU 设备。
- 点击连接。
- 加载
.hex或.bin固件文件。 - 点击下载。
- 下载完成后,按板子上的复位键正常启动程序。

六 常用硬件工具介绍
除了软件开发环境,嵌入式工程师还需要一些硬件工具来辅助调试和分析电路。这里简单介绍几种最常用的工具。
6.1 万用表
万用表是电子工程师最基本的工具,用于测量电压、电流、电阻等基本电气参数。
常见用途:
- 测量电源电压是否正常(如 3.3V、5V)。
- 测量 GPIO 引脚的电平状态(高电平 / 低电平)。
- 测试电路的通断(蜂鸣档)。
- 测量电阻阻值。
使用建议:
- 对于初学者,一个几十块钱的基础数字万用表就足够了。
- 测量电压时,红表笔接测量点,黑表笔接 GND。
- 测量前先选择正确的量程和档位。
我在本教程中会使用 LC(立创) 数字式手持万用表 LCSC530+来作为万用表使用案例。
【TODO】后续用到的时候再详写吧
6.2 示波器
示波器是观察电信号波形的工具,可以直观地看到信号的频率、幅度、占空比、上升沿/下降沿等信息。
常见用途:
- 观察 PWM 信号的波形和占空比。
- 调试串口、SPI、I2C 等通信协议的时序,但是没有逻辑分析仪那么方便。
- 分析信号完整性问题(如过冲、振铃)。
- 测量信号的频率和周期。
【TODO】后续用到的时候再详写吧
6.3 逻辑分析仪
逻辑分析仪专门用于分析数字信号,可以同时采集多个通道的信号,并以时序图的形式显示出来。与示波器相比,它更擅长分析多通道、低速的数字信号。
常见用途:
- 分析串口(UART)、SPI、I2C、CAN 等通信协议的数据内容。
- 调试复杂的数字时序问题。
- 同时观察多个 GPIO 引脚的状态变化。
【TODO】后续用到的时候再详写吧
七 本章小结
恭喜你完成了开发环境的搭建!这是踏入嵌入式世界最重要的一步。虽然过程可能有些繁琐,但一旦环境配置好了,后续的学习会顺畅很多。
让我们回顾一下本章完成的工作:
- ✅ 安装了 Keil MDK 开发环境和 STM32F4 设备支持包。
- ✅ 安装了 STM32CubeMX 和 STM32CubeProgrammer。
- ✅ (可选)安装了 VS Code + EIDE 或 CLion 开发环境。
- ✅ 安装了调试器驱动(DAPLink / ST-Link / J-Link)。
- ✅ 安装了串口驱动和串口调试工具(VOFA+ / MobaXterm)。
- ✅ 了解了程序下载方式(SWD、串口 ISP、USB DFU)。
- ✅ 了解了常用的硬件调试工具(万用表、示波器、逻辑分析仪)。
在下一章中,我们需要先打开一些现有的例程试试,跑跑例程,实际体验一下从工程打开到实际下载体验的过程。


