使用 OpenOCD 来调试 STM32

STM32 在 Windows 上的交叉编译二 调试

在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 ,已经让 CubeMX 生成的工程成功编译,并下载到板子上了。
这篇博客主要继续介绍接下来的步骤,调试。硬件是使用的 ST-LINK ,别的也无所谓,只要是 OpenOCD 支持的就可以。

OpenOCD & GDB

这里还是,介绍的文章特别多,好的也很多。本人博客简单讲原理,大家一起从原理上理解了,会用了。我也就达到目的了。

OpenOCD(On-Chip Debugger) 很多这种缩写只要看到全部的单词也就能猜到其意义。这个东西就是一个针对不同单片机调试器的配饰器,什么 J-Link 、ST-Link 支持的还比较多。

依靠 OpenOCD 打通了开发机和单片机调试器的通路,那么还需要一个能够对于代码解析,发送对应调试命令的工具。很显然这个工具就是我们大多数人所熟知的 GDB 了。

OpenOCD 下载

下载地址 Github:
https://github.com/xpack-dev-tools/openocd-xpack/releases

或者从我的网盘下载:
链接:https://pan.baidu.com/s/1TOcZRSXVSfGCq2lcG3bJvw?pwd=fplu
提取码:fplu

CSDN 0 积分下载(我设置的是 0 ):
https://do

### 如何使用 OpenOCD 调试 STM32 微控制器 #### 工具链概述 OpenOCD 是一款开源的硬件调试工具,支持多种微控制器和开发板。它可以通过 JTAG 或 SWD 接口连接到目标设备并提供 GDB 远程调试功能[^2]。 --- #### 安装必要的软件环境 为了配置 OpenOCD调试 STM32 微控制器,需要先安装以下组件: 1. **STM32CubeMX**: 用于生成初始化代码。注意该工具依赖 Java Runtime Environment (JRE),因此需提前安装最新版 JRE[^1]。 2. **GNU Arm Embedded Toolchain**: 提供 GCC 和 GDB 编译器/调试器。 3. **OpenOCD**: 主要负责与硬件通信。 4. **VSCode 插件**(可选): 如果偏好集成开发环境,则可通过插件简化操作流程。 --- #### 配置 OpenOCD 以下是具体步骤说明: ##### 1. 下载并安装 OpenOCD 在 Linux 系统下,通常通过包管理器获取 OpenOCD。例如 Ubuntu 可运行命令 `sudo apt-get install openocd`。对于其他平台,请访问官方文档确认兼容性和安装指南。 ##### 2. 准备配置文件 每种型号的 STM32 单片机都需要对应的配置脚本才能正常工作。这些文件一般位于 `/usr/share/openocd/scripts/target/` 中。如果未找到特定芯片的支持文件,可以从社区资源补充或手动创建。 示例路径如下所示: ```bash /usr/share/openocd/scripts/interface/stlink.cfg # ST-Link 驱动设置 /usr/share/openocd/scripts/target/stm32f1x.cfg # 对应 F1 系列 MCU 的定义 ``` ##### 3. 启动 OpenOCD 服务 打开终端窗口执行启动指令,指定接口及目标参数: ```bash openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg ``` 此过程会建立监听端口,默认为 TCP 3333(Telnet 控制台)以及 TCP 6666(GDB Server)。此时保持后台持续运行状态以便后续调用[^3]。 --- #### 设置 GDB 调试环境 完成上述准备工作之后,还需借助 GNU Debugger 实现源码级跟踪分析等功能。 ##### 加载 ELF 文件至内存位置 假设已编译好项目镜像名为 `project.elf` ,则按照下面方式加载: ```gdb target remote :6666 # 建立远程链接 monitor reset halt # 复位停止 CPU 执行流 load # 将二进制数据写入闪存区 continue # 继续运行应用程序直至断点触发 ``` ##### 断点控制语句示范 利用简单的 C++ 示例展示基本语法结构: ```cpp int main() { int a = 5; int b = 7; // 设定此处作为暂停观察变量值变化情况的位置 printf("%d\n",a+b); } ``` 对应输入命令序列如下所列: ```gdb break main.cpp:3 # 在第3行处设立临时中断标志 run # 开始新一轮测试周期直到遇到预定条件为止 print a # 查看当前局部存储单元内的数值状况 step # 单步前进查看下一步逻辑走向 quit # 结束整个会话退出界面返回初始态 ``` --- #### 整合 VS Code 流程(扩展阅读) 若倾向于图形化交互体验而非纯命令行模式的话,推荐考虑 Visual Studio Code 方案。其内置丰富的拓展市场可供挑选适合个人习惯的最佳实践方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值