我目前正在尝试为嵌入式开发设置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 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线路上。我可以通过伪造结果来迫使脚本越过这一行(结果稍后才会中断),但我不确定应该有什么内容。
我可以上传代码到我的stm32f411没有任何问题使用STM32CubeIDE,所以我知道我的计算机和设备之间的连接是工作的。这个问题似乎与OpenOCD配置有关。
我对嵌入式开发非常陌生,所以请告诉我是否有更多的信息会有帮助。谢谢!
发布于 2022-03-29 00:27:14
想出了这个办法。问题在于当前版本的OpenOCD不完全支持STM32设备。ST微电子公司确实提供了他们自己的OpenOCD版本,为我解决了这个问题。
OpenOCD的自定义版本可以在这里找到:https://github.com/STMicroelectronics/OpenOCD
有了这些之后,进入OpenOCD目录并运行以下命令:
./bootstrap
./configure --enable-stlink
make
sudo make install
注意:根据需要的支持,配置标志可能有所不同。运行./configure --help查看可用选项
现在应该将OpenOCD安装到/usr/local/bin/openocd中。
我的其他配置是正常的,但我必须将reset_config设置为none,就像Tom建议的(谢谢!)
如果有帮助,下面是我的CLion设置:


发布于 2022-03-25 11:46:29
“无法重置目标”是您发布的内容中的关键一行。
如果没有可用的硬件重置线,请尝试更改openOCD配置,包括:
reset_config nonehttps://stackoverflow.com/questions/71608471
复制相似问题