在上文《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。