无法使用 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 设置:
我目前正在尝试为嵌入式开发设置 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 设置: