STM32CubeIDE ST-LINK 服务器(又称 GDB server)是一款运行于 PC 的命令行应用程序,通过 ST-LINK JTAG 探头连接 Arm Cortex-M 内核的 STM32 设备,基于远程串行通信协议(RSP)与 GDB 客户端配合,实现目标设备的程序加载、断点调试、Flash 操作等核心调试功能,是 STM32 32 位产品开发的关键工具。
资料获取:STM32CubeIDE ST-LINK 服务器
1. 核心定位与调试架构
1.1 核心作用
作为 GDB 客户端与 STM32 目标设备之间的通信桥梁,承接客户端的调试命令(如加载程序、设置断点),通过 ST-LINK 探头执行硬件操作,再将结果反馈给客户端,全程透明化 Flash 编程与硬件控制过程。
1.2 调试架构组成
- 硬件层面:PC(运行服务器)、ST-LINK JTAG 探头(通过 USB 连接 PC,JTAG 电缆连接目标设备)、STM32 Cortex-M 目标设备。
- 软件层面:ST-LINK GDB 服务器(处理 RSP 消息)、GDB 客户端(本地或远程运行,发送调试命令)、STM32CubeProgrammer(配套工具,负责 Flash 下载、擦除等高级操作)。
2. 核心功能与特性
2.1 双工作模式适配不同场景
- 持续模式(-e 选项启用):客户端断开连接后服务器保持运行,支持反复启动调试会话,无需重启服务器。
- 非持续模式(默认):客户端关闭连接后服务器直接退出,重新调试需重启服务器。
- 异常处理:无论何种模式,服务器与目标设备通信出错时均会关闭连接并关机。
2.2 全面调试支持
- 存储介质适配:支持 RAM 和 Flash 调试,自动区分存储模式,无需额外命令配置栈指针(SP)和程序计数器(PC)。
- 断点与监控点:软件断点(break 命令,无数量限制)、硬件断点(hbreak 命令,数量依赖设备);支持 rwatch(读变量)、watch(写变量)、awatch(访问变量)三类监控点。
- 特殊功能:支持 SWO 数据输出(需配置 - z/-a/-b 选项)、多核调试(-m 选项指定 apID)、多客户端共享 ST-LINK 探头(-t 选项)。
2.3 Flash 与设备控制
依托 STM32CubeProgrammer 实现 Flash 下载、擦除(全片擦除命令monitor flash mass_erase)、选项字节设置等操作,加载程序时自动触发 Flash 编程,高级操作可直接调用配套工具。
3. 启动配置与使用流程
3.1 启动方式与核心选项
服务器支持三种启动方式:命令行输入选项、加载配置文件、默认选项启动,核心常用选项如下:
- -h/--help:显示使用帮助信息。
- -p <端口>:指定 TCP 监听端口,默认 61234。
- -d/--swd:启用 SWD 调试模式,替代默认 JTAG 模式。
- -e/--persistant:启用持续工作模式。
- -f <文件>:指定日志文件名称,默认 debug_log.txt。
- -l <级别>:设置日志级别(0-31),默认 31 级(完全记录),0 级禁用记录。
- -cp <路径>:指定 STM32CubeProgrammer 的安装路径。
3.2 配置文件格式
支持通过配置文件加载启动选项,规则简洁:# 开头的行视为注释,每个选项单独一行,示例包含 - e(持续模式)、-f(日志文件)、-l(日志级别)等常用配置,可直接参考附录模板修改。
3.3 标准调试流程
- 启动服务器:切换至服务器安装目录,输入命令(如
ST-LINK_gdbserver.exe -d -v -cp <CubeProgrammer路径>),连接目标设备并等待客户端接入。 - 启动 GDB 客户端:输入
arm-none-eabi-gdb <program.elf>(program.elf 为待调试程序)。 - 连接服务器:持续模式用
target extended-remote <IP>:<端口>,非持续模式用对应专用命令。 - 加载程序:输入
load <program.elf>,自动擦除 Flash 对应页面并写入程序。 - 调试操作:设置断点(如
break main)、运行程序(continue)、单步执行(step/next),按 Ctrl-C 停止程序。 - 退出会话:输入
quit命令关闭客户端与调试会话。
4. 故障排除与错误代码
4.1 常见故障解决步骤
当服务器无法启动或挂起时,按以下流程排查:
- 关闭服务器及所有关联客户端,断开目标设备电源与 ST-LINK USB 电缆。
- 重新连接 ST-LINK 电缆,为目标设备上电,检查 SWD/JTAG 接口配置。
- 更换端口号重启服务器,尝试调试其他项目排除配置问题。
- 更换 USB 电缆,或用 STM32CubeProgrammer 测试设备连接(擦除 Flash 并编程后重试)。
4.2 核心错误代码速览
| 代码 | 错误类型 | 关键原因 |
|---|---|---|
| 1 | TARGET_CONNECT_ERR | 端口被 STM32CubeProgrammer 占用 |
| 2 | TARGET_DLL_ERR | 未连接 ST-LINK 探头 |
| 4 | TARGET_NO_DEVICE | ST-LINK 已连接,但未连接目标主板 |
| 5 | TARGET_UNKNOWN_MCU_TARGET | SWD 引脚连接时未启用 - d 选项 |
| 16 | TARGET_STLINK_SELECT_REQ | 多主板连接,需用 - i 选项指定 ST-LINK 序列号 |
STM32CubeIDE ST-LINK 服务器以轻量、高效的命令行形式,提供了 STM32 Cortex-M 设备的全流程调试能力,支持灵活的启动配置、双工作模式与丰富的调试功能,配合 STM32CubeProgrammer 与 GDB 客户端,构成了完整的开发调试生态。其简洁的操作逻辑、全面的故障处理机制,能有效降低开发门槛,加速 STM32 项目的调试与落地。
599