STM32引脚占用:使用Jlink下载代码的解决方案
2022/09/15
众所周知,当我们使用STlink或者Jlink的SWD为STM32下载程序时使用到的是PA13和PA14两个引脚,但在某些情况下我们可能会将这两个引脚复用为其它的模式,此时,我们再次使用STlink或者Jlink下载程序时可能会出现以下错误,提示Jlink并未找到目标的STM32芯片:
* JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
* JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
***JLink Error: STM32: Connecting to CPU via connect under reset failed.
Error: Flash Download failed - Target DLL has been cancelled
出现该问题的解决方法也很简单,大体思路就是在Jlink再次为STM32下载程序的一瞬间重启STM32,让STM32未执行到PA13和PA14复用这条语句前将代码下载进去,但该方法的最大难点在于STM32重启时间的把握。重启时间太晚,STM32并未启动,Jlink找不到目标;重启时间太早,两个引脚已经被复用,Jlink还是找不到目标。所以,这篇文章重点在于介绍重启的时间点如何把握。
方法
使用Jlink演示,STlink步骤大体相同,请自行探索
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //关闭SWD及JTAG
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //打开SWD关闭JTAG
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //打开SWD及JTAG
while(1);
此时也不要松开reset按钮
DLL: V6.32i, compiled Jul 24 2018 15:19:55
Firmware: J-Link J-Link V21 compiled Oct 24 2016 00:00:00
Hardware: V1.00
S/N : 123123123
* JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
* JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
提示会出现两次,我们要做的也就是要在第二次出现提示前松开reset,让Jlink在第二次搜索时能搜索到STM(一定要在第二次出现前松开,假如第二次提示前未松开reset按钮,证明Jlink第二次搜索也并未搜索到STM,并且Jlink不会进行第三次搜索,直接报错 ***JLink Error: STM32: Connecting to CPU via connect under reset failed.
,此时需要再次重复以上下载步骤)
Erase Done.
Programming Done.
Verify OK.
* JLink Info: Reset: Halt core after reset via DEMCR.VC_CORERESET.
* JLink Info: Reset: Reset device via AIRCR.SYSRESETREQ.
Application running ...
Flash Load finished at 12:29:22