无法使用 OpenOCD/Clion 启动调试会话

Unable to start debug session with OpenOCD/Clion

我目前正在尝试为嵌入式开发设置 CLion。 运行 'build' 本身创建可执行文件没有任何问题,但尝试启动调试器失败并出现以下错误:

/usr/bin/openocd -s /usr/share/openocd/scripts -f /home/username/Projects/STMicroelectronics/STM32CubeIDE/workspace_1.9.0/blackpill/stm32f411ceu6_black_pill.cfg -c "tcl_port disabled" -c "gdb_port disabled" -c "tcl_port disabled" -c "program \"/home/username/Projects/STMicroelectronics/STM32CubeIDE/workspace_1.9.0/blackpill/Debug/blackpill.elf\"" -c reset -c shutdown

Open On-Chip Debugger 0.11.0
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
srst_only separate srst_nogate srst_open_drain connect_deassert_srst

Info : clock speed 2000 kHz
Info : STLINK V2J39S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 2.465774
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Error executing event examine-end on target stm32f4x.cpu:
/usr/share/openocd/scripts/mem_helper.tcl:37: Error: wrong # args: should be "expr expression"
in procedure 'program' 
in procedure 'mmw' called at file "/usr/share/openocd/scripts/target/stm32f4x.cfg", line 85
at file "/usr/share/openocd/scripts/mem_helper.tcl", line 37
Info : gdb port disabled
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Error executing event examine-end on target stm32f4x.cpu:
/usr/share/openocd/scripts/mem_helper.tcl:37: Error: wrong # args: should be "expr expression"
in procedure 'program' 
in procedure 'ocd_process_reset' 
in procedure 'ocd_process_reset_inner' called at file "embedded:startup.tcl", line 288
in procedure 'mmw' called at file "/usr/share/openocd/scripts/target/stm32f4x.cfg", line 85
at file "/usr/share/openocd/scripts/mem_helper.tcl", line 37
Error: timed out while waiting for target halted
embedded:startup.tcl:530: Error: ** Unable to reset target **
in procedure 'program' 
in procedure 'program_error' called at file "embedded:startup.tcl", line 567
at file "embedded:startup.tcl", line 530

我 运行 在 Fedora Linux 35 上使用以下配置:

source [find interface/stlink.cfg]

# increase working area to 64KB
set WORKAREASIZE 0x10000

transport select hla_swd

source [find target/stm32f4x.cfg]
reset_config srst_only

我查看了脚本 (stm32f4x.cfg),错误发生在此处:

proc mmw {reg setbits clearbits} {
        set old [mrw $reg]
        set new [expr ($old & ~$clearbits) | $setbits]
        mww $reg $new
}

特别是在 set new 行。我可以通过伪造结果(稍后会中断)来强制脚本越过该行,但我不确定那里应该有什么。

我可以使用 STM32CubeIDE 毫无问题地将代码上传到我的 stm32f411,所以我知道我的计算机和设备之间的连接正常。问题似乎与 OpenOCD 配置有关。

我对嵌入式开发还很陌生,如果有更多信息需要帮助,请告诉我。谢谢!

“无法重置目标”是您发布内容中的关键行。

如果您没有可用的硬件重置线,请尝试更改您的 openOCD 配置以包括:

reset_config none

设法解决了这个问题。问题在于当前版本的 OpenOCD 不完全支持 STM32 设备。 ST Microelectronics 确实提供了他们自己的 OpenOCD 版本,为我解决了这个问题。

自定义版本的 OpenOCD 可以在这里找到:https://github.com/STMicroelectronics/OpenOCD

完成后,进入 OpenOCD 目录并运行执行以下命令:

./bootstrap

./configure --enable-stlink

make

sudo make install

注意:根据您需要的支持,配置标志可能会有所不同。 运行 ./configure --help 查看可用选项

您现在应该已将 OpenOCD 安装到 /usr/local/bin/openocd

我的其余配置没问题,但我确实必须按照 Tom V 的建议将 reset_config 设置为 none(谢谢!)

如果有帮助,这是我的 CLion 设置: