【发布时间】:2021-01-30 19:23:58
【问题描述】:
我有一个带有 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。
【问题讨论】:
-
“代码似乎将必要的引脚配置为 alt 模式以启用串行线调试,所以我认为这不是问题,但很难验证。”听起来这就是你的问题的原因。交替引脚配置。
-
我发现问题在于将时钟配置设置为不可能的事情,这导致芯片冻结。但这并不能真正回答我的问题,这可能会再次出现。