STM32调试器配置异常导致的问题与解决方法(二)

在上文《STM32调试器配置异常导致的问题与解决方法(一)》中,总结了ST-LINK调试出现异常情况的处理,这里再把JLINK调试出现异常的情况记录如下:

STM32F103芯片管脚配置时,如果在STM32CUBE的SYS选项配置成 No Debug,或Serial Wire,使用JLINK调试或下载代码时,报错:

图一
图二
图三
图四

上面报错对应的CUBE产生的代码是(在文件 stm32f1xx_hal_msp.c 中):

__HAL_AFIO_REMAP_SWJ_DISABLE();        //SWD和JLINK都不支持

__HAL_AFIO_REMAP_SWJ_NOJTAG();         //支持SWD,即ST-LINK可用,但不支持JLINK

将上述语句改成

__HAL_AFIO_REMAP_SWJ_NONJTRST();     //不使用JLINK的RST引脚,可节省一个pin

__HAL_AFIO_REMAP_SWJ_ENABLE();           //全功能的JLINK功能(当然包括SWD功能,即ST-LINK也是支持的)

再使用JLINK下载或debug就都ok了。


当项目中MCU选型使用TSOP封装等仅有少量pin的芯片时,可能必须使用调试管脚作为GPIO来使用,为了不影响debug和程序下载,可以考虑下面的变通方法:

调试代码时,先把SWDIO、SWCLK等pin配置成debug模式,即

__HAL_AFIO_REMAP_SWJ_ENABLE(); 

这种情况下,可以正常调试程序,当然,对应管脚的GPIO功能是无效的;当整体功能调试完毕、确认不再需要调试功能后,再把SWDIO、SWCLK配置成GPIO模式。此时,使用5线制的ST-LINK(带复位线)是可以正常下载的(因为复位后MCU默认是支持debug的,只要之后不运行用户程序,可debug状态就不改变),但不能debug。

推荐阅读更多精彩内容