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步骤大体相同,请自行探索

  • 按照正常下载代码时的连线将STM与Jlink连接
  • 在主函数中输入以下代码并且编译(该段代码的大体意思是使能时钟后将PA13和PA14等引脚设置成相应的功能,3-6行有注释,需要哪一个功能取消注释后编译即可)
     	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);
    
  • 等待编译完成后,先按住STM的reset键,不要松开,再按下keil5的下载按钮
  • 此时,keil5的 Build Output 窗口首先会出现Jlink的序列号等,如下 此时也不要松开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
    
  • 稍等片刻后, Build Output 窗口会输出如下提示,证明Jlink已经开始搜寻设备并且第一次搜寻设备并未找到
    * JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
    
  • 此时我们需要立刻松开reset按钮,让STM启动。一般来说 * 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.,此时需要再次重复以上下载步骤)
  • 当我们成功在两次提示之间松开reset后Jlink会弹出以下窗口
  • 此时,我们需要再次按住reset键,并且点击弹窗中的Yes,等待0.5~1秒左右 Build Output 窗口出现十几行提示时,松开reset即可(此次松开reset键时的间隔较大,不必卡到必须某一个提示出现时才能松开,一般一次就能成功,假设不成功再次执行以上操作多试几次,很容易就能找到松开reset键的时间点)
  • 最后,当出现以下提示时,证明我们解锁PA13和PA14的代码已经烧录进去,之后就可以使用Jlink直接下载啦
    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
    
  • 物联沃分享整理
    物联沃-IOTWORD物联网 » STM32引脚占用:使用Jlink下载代码的解决方案

    发表评论