• 正文
  • 相关推荐
申请入驻 产业图谱

一次性的STlink?STlink二次烧录失败问题的根源和解决

09/10 15:05
5781
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在学习STM32开发的过程中,相比有许多新手都遇到过烧录完STM32的芯片之后,发现第二次烧录失败的经历,具体表现在Keil中显示No target connected:

本期我们就来介绍一下STM32的下载端口以及遇到这个问题的解决办法。

1、STM32的JTAG引脚

JTAG/SWD的引脚映射表如图所示,最简单的情况下只需要两根线:SWDIO和SWCLK即可进行下载。

SWJ_CFG寄存器决定了在调试状态下各接口引脚的工作状态。

我们可以看到,在SWJ_CFG寄存器设置为100的时候,JTAG-DP和SW-DP均未被使能,调试端口都被释放,属于正常的GPIO口。

这是直接导致初学者出现芯片锁住的情况。

在使用CubeMX的初始化过程中,默认是禁用SWJ接口,如果用户未对Debug进行修改,就会导致烧入程序后,SWJ接口配置为了普通引脚,从而导致无法二次烧录。

2、如何避免

我们可以在初始化的时候,将Debug配置语句修改为使能SWJ。

在CubeMX中,将Debug选项的No Debug修改为其他选项,常用Serial Wire用于STlink。

3、解决办法

如果出现了这个问题,那么如何解决呢?博主提供三种方法:

首先最简单的是通过拉高BOOT引脚,再进行复位,让系统进入出场BootLoader程序。

在System memory中,可以正常使用SWJ接口,将错误修改后,再进行烧录。

第二种方法是再按下RST的同时,快速尝试下载,这种方法多次尝试可能可以成功。

注意到手册中描述,在系统复位后,SWJ-DP接口的五个引脚会被立刻分配给调试下载使用,但随后会可能被MCU引脚复用所占用。

按下RST之后立刻下载,其原理就是抓住空档期进行系统下载。

关于还有利用串口进行擦写芯片的方式,它的本质和方法一相同:

在STM32进入BootLoader中时,BootLoader拥有串口下载的功能。

串口下载工具(如FlyMCU)可以利用串口芯片,例如配置“DTR低电平复位,RTS高电平进BootLoader”,即通常是将CH340芯片的DTR接RST引脚,RTS接Boot引脚,从而实现一键下载,但本质是方法一。

相关推荐