STM32 JTAG/SWD禁用导致无法烧写

STM32 JTAG/SWD禁用导致无法烧写

(2015-09-20 20:38:44)
    由于STM32的引脚功能较多,在为了方便硬件的使用,常会使用复用,重映射的功能,这里主要提及的是SWD和JTAG端口的引脚对应出现的问题。为了使得TIM2能够重映射到PA15和PB3,所以得对TIM2进行重映射,但是这样是不够的,因为下载调试端口SWD默认就占用了该引脚,所以重映射无效,因此必须先启动时钟
  RCC->APB2ENR|=1<<0;     
然后令:
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_1;或者AFIO->MAPR = AFIO_MAPR_SWJ_CFG_2;
但是又有一个新闻问题来了,如果你设置为第二种,那么就意味着你不但关闭了JTAG还关闭了SWD,这样一来,如果你使用该方式来烧写程序,那么你下一次将面临这无法烧写程序的后果,下面就介绍解决问题的办法:
 
  1、按着板子上面的复位键不放,若没有按键,就用夹子短路复位电容,这样单片机将停止程序的运行;
  2.这时候点击Keil的下载,下方的“Build Output”窗口便会开始滚动,一会之后会提示出错。直接关闭它,放开复位键。
  3.这时候单片机已经停止程序了,SWD那些端口已经恢复原有的调试端口功能,这时候你再一次按下载键便可以下载程序了,问题解决!!!
 
 
 
 

一、下载方法步骤:

  • 1、将板子供电全部断开,这里包括3.3V电源供电和JLINK等所有能给开发板供上电的设备全断开
  • 2、找到BOOT0引脚,将BOOT0拉高。
      方法:在板子上找一个高电平引脚,手动用导线将BOOT0连接到该引脚上即可。
      (注意:我的STM32板子供电是3.3V的,所以我找了一个3.3V的引脚,用导线连接到了BOOT0上,千万别弄错了,电平接高了不小心可是要烧坏板子的!)
  • 3、BOOT0拉高以后,保持这个姿势不要动,打开电源,重新给板子上电
  • 4、插上JLink或者STLink,下载程序。一般这次肯定可以下载进去了。下载完成以后,就可以断开BOOT0了,让他恢复低电平。

OK到这里就全部完成了,板子肯定也回复正常了,继续嗨吧。

二、上述方法原因解释

开发板默认JTAG和SWD接口都是打开的,BOOT0是低电平,当把BOOT0置高时,给板子上电,板子启动的时候程序会卡住,也就是内部flash的程序并未执行,这个时候SW和JTAD接口都是出于默认打开的状态。然后下载一个不关闭JTAG或者SW接口的程序,覆盖之前flash中的程序就好了。

所以先将板子供电全部断开(这里包括3.3V电源供电和JLINK等所有能给开发板供上电的设备全断开),再将开发板的BOOT0拉高,重新给开发板上电,把程序中关闭JTAG或者SW的程序删掉,然后下载到开发板中,程序下载完成就好了。

原文地址:https://www.cnblogs.com/yuqilihualuo/p/6340726.html