我正在研究cortex-m4 for semihost并使用stm32f429-discovery board。 我有一个问题,当电路板是独立的时(不在调试模式下),半主机无法工作, 所以,我希望在printf()之前使用判断调试状态,比如
if ((CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) \
==CoreDebug_DHCSR_C_DEBUGEN_Msk) {
printf("THIS IS SEMIHOST\n");
}
在正常情况下,它会像我期望的那样,在调试模式下,我可以看到semihiost日志,独立,没有任何待处理。但在一种情况下,我只是将代码刻录到flash中(使用openocd或texane stlink和linux中的stlink硬件)。第一次运行时,调试模式(CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
的位保持为1.我认为它不应该处于调试模式,即使我按下板上的重置硬件按钮,它仍保持1,程序将等待在printf()。
在我插上电源然后重新插上后,调试模式位将返回0,现在它可以正常工作,这个问题可以解决吗?或者我使用错误的openocd命令?谢谢。
我使用openocd命令:
openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg \
-c "init" \
-c "reset init" \
-c "flash write_image erase XXX.bin 0x8000000" \
-c "reset run" \
-c "shutdown"
答案 0 :(得分:0)
调试寄存器状态在正常CPU复位期间是持久的(否则您将无法设置断点)。电源循环电路板将重置状态(显然)。
你应该能够清除DHCR.DEBUGEN认为DAP是否需要编写此脚本' flash并发布'序列