stm32 - 如何在 STM32F205 上调试程序启动?
问题描述
我有一个带有 STM32 微控制器和 ST-Link v2 的嵌入式板。此设置通常有效:我可以对闪存进行编程,并与 ST 的 CubeProgrammer 工具或 openocd 连接。我可以将 gdb 附加到后者,并逐步执行代码。到目前为止,一切都很好。我的物理或电气设置似乎没有任何问题。
我有一个程序……不太好。初始化早期的一些事情是将芯片挂起到我无法再用任何工具连接到它的地步。我可以通过使用 CubeProgrammer 的“Under reset”模式来拯救它,在启动时按住板上的复位开关,然后在坏程序楔入芯片之前连接。
以这种方式连接后,芯片停止。我可以刷新一个已知的好程序。或者,我可以使用 CubeProgrammer 的 MCU 核心屏幕通过坏程序的启动一次“步进”一条指令。这行得通,直到我点击“运行”,然后我很快得到一个对话框“警告:与设备 0x411 的连接丢失”,并且芯片不再可用,直到我像上面那样刷新它。似乎代码正在将必要的引脚配置为 alt 模式以启用串行线调试,所以我认为这不是问题,但很难验证。
因此,该程序中的某些内容似乎表现不佳。我想做的是通过 openocd 设置 gdb 来调试启动。用一个好的程序,我可以在程序运行的时候连接openocd,附加gdb,一切正常。但我不知道如何让 openocd 做 CubeProgrammer 在“Under reset”模式下所做的事情,所以我可以在 gdb 控制下执行芯片的初始化。
我怎样才能做到这一点?或者,除了 openocd+gdb 之外,还有其他我应该尝试的工具吗?我熟悉gdb,但我可以尝试其他工具。主机环境是 macOS。
解决方案
像这样创建一个 openOCD 配置文件:
#
# stlink to stm32f2xx by swd with system reset and no test reset
#
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f2x.cfg]
reset_config srst_only connect_assert_srst
并使用 -f 标志打开OCD 以使用它。
推荐阅读
- amazon-web-services - 在 ECS (AWS) 中更新服务后 CodeDeploy 不会自动运行
- html - 如何使用服务器将我的文件存储在我的网站中?
- javascript - AWS Cloudfront Lambda@Edge 奇怪的异步/回调用法
- java - 有没有办法定义 cdi 销毁实例的顺序?
- jquery-validate - 根据下拉选择更改文本框上的正则表达式验证
- javascript - 如何使用 vanilla JavaScript 检测和显示 WiFi 信号强度
- javascript - 获取两个div的实时位置并更新连接线
- vue.js - Vue 3 .vue 文件的新实例
- css - React 的最佳实践。悬停或鼠标输入/鼠标离开?
- javascript - 加载资源失败:服务器响应状态为 404 (Not Found) Node.js socket.io