STM32 命令行工具链手册:编译烧录调试自动化指南

这篇文章整理了 STM32F103C8T6 项目的命令行编译、烧录、调试工具链。有了命令行工具链,AI 可以自主完成"编译→读报错→修复→重试"的闭环,也是实现 Harness Engineering 的基础设施。


快速开始

如果你已经搭建好环境,以下是最小验证路径:

# 1. 编译
unify_builder.exe -p build/STM32F103C8/builder.params

# 2. 烧录(需连接 J-Link)
JLink.exe -device STM32F103C8 -if SWD -speed 4000 -autoconnect 1 -CommandFile build/STM32F103C8/commands.jlink

# 3. 查看串口输出
python tools/serial_monitor.py COM8 115200

详细配置和参数说明见下文。

前置条件

条件说明
硬件STM32F103 开发板 + J-Link 调试器(SWD 接口)
软件VS Code + EIDE 扩展(会自动安装编译工具链)
操作系统Windows(工具链依赖 Windows 路径格式)
PythonPython 3.x(串口监视器依赖 pyserial)

一、工具链概述

1.1 组成

组件工具来源功能
编译器ARM Compiler 5.06 (armcc)EIDE 扩展编译 C 代码
构建工具unify_builder.exeEIDE 扩展项目构建系统
烧录工具JLink.exeEIDE 工具包J-Link 命令行烧录
调试服务器JLinkGDBServerCL.exeEIDE 工具包GDB 调试服务
调试客户端arm-none-eabi-gdb.exeEIDE 工具包GDB 调试器

1.2 工具路径

EIDE 扩展目录(用环境变量表示):
%USERPROFILE%\.vscode\extensions\cl.eide-<版本号>\res\tools\win32\unify_builder\

Bash 环境:
$USERPROFILE/.vscode/extensions/cl.eide-*/res/tools/win32/unify_builder/

EIDE 工具包目录:
~/.eide/tools/
├── gcc_arm/bin/           # ARM GCC 工具链
├── jlink/                 # J-Link 工具
│   ├── JLink.exe
│   └── JLinkGDBServerCL.exe
└── openocd/               # OpenOCD (备选)

1.3 项目配置文件

文件位置说明
builder.paramsbuild/STM32F103C8/编译参数配置
commands.jlinkbuild/STM32F103C8/J-Link 烧录命令
eide.yml.eide/项目配置

二、编译系统

2.1 命令格式

unify_builder.exe -p <builder.params路径> [选项]

2.2 常用选项

选项说明
-p <path>指定 builder.params 文件路径
--rebuild强制重新编译所有文件
--dry-run模拟运行,不实际编译

2.3 完整命令示例

# Windows CMD / PowerShell
"C:\Users\<用户名>\.vscode\extensions\cl.eide-<版本>\res\tools\win32\unify_builder\unify_builder.exe" -p "D:\EIDE-Project\build\STM32F103C8\builder.params"

# Git Bash (推荐使用脚本)
./.claude/skills/eide-stm32-dev/scripts/build-flash.sh

2.4 编译输出解读

Program Size: Code=3000 RO-data=336 RW-data=52 ZI-data=1836

Total RO  Size (Code + RO Data)    3336 (   3.26kB)  ← 只读段
Total RW  Size (RW Data + ZI Data) 1888 (   1.84kB)  ← RAM 使用
Total ROM Size (Code + RO + RW)    3388 (   3.31kB)  ← Flash 使用

RAM: [##                  ] 9.2%      1.8KB/20.0KB
ROM: [#                   ] 5.2%      3.3KB/64.0KB
字段含义
Code代码段大小
RO-data只读数据(常量、字符串)
RW-data已初始化全局变量
ZI-data未初始化全局变量(BSS 段)

2.5 常见编译错误

错误类型示例解决方法
语法错误Error: #65: expected a ";"检查行末分号
未定义标识符Error: #20: identifier "XXX" is undefined检查头文件包含或宏定义
类型不匹配Warning: #188-D: enumerated type mixed添加显式类型转换

三、烧录系统

3.1 J-Link 命令格式

JLink.exe -device STM32F103C8 -if SWD -speed 4000 -autoconnect 1 -CommandFile <命令文件>

3.2 参数说明

参数值说明
-deviceSTM32F103C8目标芯片型号
-ifSWD调试接口
-speed4000通信速度 (kHz)
-autoconnect1自动连接
-CommandFilexxx.jlink命令脚本文件

3.3 命令文件格式

r              # 复位目标
halt           # 停止 CPU
loadfile xxx.hex  # 加载 HEX 文件
r              # 复位
go             # 运行
exit           # 退出

3.4 烧录输出解读

J-Link>loadfile "D:\EIDE-Project\build\STM32F103C8\EIDE-Project.hex"
Downloading file...
J-Link: Flash download: Bank 0 @ 0x08000000: 1 range affected (1024 bytes)
J-Link: Flash download: Total: 0.506s
O.K.
信息含义
Bank 0 @ 0x08000000Flash 起始地址
1 range affected影响的地址范围数
1024 bytes烧录数据大小
O.K.烧录成功

四、调试系统

4.1 架构

┌─────────────────┐     TCP/IP      ┌─────────────────┐     SWD      ┌─────────────┐
│  GDB Client     │ ◄─────────────► │  J-Link GDB     │ ◄──────────► │  STM32F103  │
│  arm-none-eabi  │     :3333       │  Server         │              │  目标板     │
│  -gdb           │                 │                 │              │             │
└─────────────────┘                 └─────────────────┘              └─────────────┘

4.2 启动 GDB Server

JLinkGDBServerCL.exe -if SWD -device STM32F103C8 -speed 4000 -port 3333

4.3 GDB 常用命令

命令缩写说明
target remote localhost:3333-连接 GDB Server
monitor reset-复位目标
monitor halt-停止目标
load-加载程序
break mainb main在 main 设置断点
break file.c:123b file.c:123在指定行设置断点
continuec继续运行
steps单步进入
nextn单步跳过
finish-运行到函数返回
info registersi r查看寄存器
info breakpointsi b查看断点
backtracebt查看调用栈
print varp var打印变量值
x/10x 0x20000000-查看内存
quitq退出

4.4 GDB 调试脚本示例

target remote localhost:3333
monitor reset
monitor halt
file build/STM32F103C8/EIDE-Project.axf
load
break main
continue
info registers
backtrace

五、辅助工具

5.1 串口监视器

串口监视器用于实时查看 MCU 的调试输出。这里使用的是自定义 Python 脚本(基于 pyserial),支持自动重连和日志保存。

# 列出可用串口
python tools/serial_monitor.py

# 连接串口
python tools/serial_monitor.py COM8 115200

# 连接并自动复位(-r 参数会在连接后发送复位命令)
python tools/serial_monitor.py COM8 115200 -r

依赖安装:

pip install pyserial

用途:AI 可以通过串口监视器读取 MCU 的调试打印,验证程序运行状态,定位运行时问题。

5.2 清理脚本

# 清理编译中间文件
./.claude/skills/eide-stm32-dev/scripts/clean.sh

六、为什么用命令行

VS Code EIDE 扩展提供了图形界面(Ctrl+F9 编译、F7 烧录),为什么还要折腾命令行?

场景图形界面命令行
AI 自主迭代无法调用AI 可直接执行脚本
CI/CD 集成不支持天然支持
批量操作手动逐个脚本循环
远程开发依赖 IDESSH 即可

核心价值:命令行是 AI 与工具链之间的接口。没有命令行接口,AI 就无法自主完成编译→修复→验证的闭环。


七、快速参考

7.1 命令速查表

功能命令
编译unify_builder.exe -p builder.params
重新编译unify_builder.exe -p builder.params --rebuild
烧录JLink.exe -device STM32F103C8 -if SWD -CommandFile xxx.jlink
启动调试服务JLinkGDBServerCL.exe -if SWD -device STM32F103C8 -port 3333
GDB 连接target remote localhost:3333

7.2 端口速查

端口用途
3333GDB 连接端口
3334SWO 输出端口
3335Telnet 端口

7.3 常见问题

问题解决方法
builder.params 不存在在 VS Code 中按 Ctrl+F9 编译一次
J-Link 连接失败检查 SWD 接线、目标板供电
编译错误定位查看输出中的 文件名:行号: Error

八、环境兼容性

8.1 路径格式

环境路径格式说明
Windows CMDD:\path\to\file反斜杠
Git Bash/d/path/to/fileUnix 风格
J-LinkD:\path\to\file只认 Windows 格式

8.2 路径转换(Bash)

# Unix 路径转 Windows 路径
# /d/path/to/file → D:\path\to\file
WIN_PATH=$(echo "$UNIX_PATH" | sed 's|^/\([a-z]\)/|\U\1:/|' | sed 's|/|\\|g')

8.3 脚本类型选择

环境推荐脚本类型
Windows CMD.bat / .ps1
Git Bash.sh
跨平台Python

文档版本:2026-05-04


相关文章

  • [[00-Inbox/博客_从WS2812驱动到消消乐游戏-嵌入式开发实战复盘]] — 完整开发故事和问题排查过程
  • [[00-Inbox/博客_AI驱动嵌入式开发-Harness-Engineering实践指南]] — 给 AI 配工具的方法论总结
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐