STM32&ST-LINK-成功编程后无法连接到MCU


13

我已经用STM32F7-45VGT6构建了自己的开发板。我已经使用ST-LINK v2(不是原始版本)成功地对其进行了编程,现在我什至无法连接MCU。

我从ST和SWD界面使用ST-Link Utility。可能是我将SWD引脚用作输出,并在代码中将它们设置为GPIO输出的情况。可以吗?

但是,我将复位引脚连接到GND,并在ST-Link Utility中设置了“在复位下连接”选项,但是它不起作用...我该怎么办?

在Internet上,我发现了一些有关使用BOOT0引脚的信息,但我不完全知道...


可能会出现“可能使用SWD引脚作为输出”的情况,但是唯一会知道的人是您,除非您的意思是故意损坏了固件的负载,但可能是由于错误,的确确实发生。通常,这可以通过在硬件复位有效的情况下手动或自动执行初始SWD连接来恢复。如果您想将SWD引脚用作I / O,则在进行该设置之前要延迟几秒钟,这可能会使开发变得更容易,但要意识到这仍然意味着您不能使用调试器。
克里斯·斯特拉顿

Answers:


21

我设法解决了这个问题。如果有人遇到类似问题,请执行以下操作:

我使用了ST-Link v2和ST-Link Utility。在设置中,我设置了“重置时连接”和SWD界面(我不确定频率)。
然后,我按下板上的复位按钮,然后单击“目标”->“擦除芯片”,然后单击后释放按钮-它擦除了芯片,因此我现在可以对MCU进行重新编程。


无论如何,如果您需要使用SWD引脚作为输出,请在程序开始时添加一些延迟,或者使用一些跳线禁用/启用将这些引脚设置为输出。


是的,如果您将SWD引脚用于其他目的,这几乎是可以预期的。经验表明,即使不是故意这样做的STM32设计,也可能偶尔会陷入SWD引脚无响应(程序损坏)的模式,并且需要进行此类处理才能恢复。
克里斯·斯特拉顿

1
在linux中,我使用此bash命令擦除芯片:st-flash擦除
Nathan

擦除芯片对我不起作用。我去了目标->擦除扇区->全选->应用。此后,我重新获得了董事会的访问权限。我不知道为什么芯片擦除没有字
安德鲁

6

为了使复位状态下的连接正常工作,ST-Link必须控制复位引脚,如果将其接地,则ST-Link没有机会运行目标并获得对其的访问权。


如果在上电期间将BOOT0引脚拉为高电平,MCU将启动到内部引导加载程序,并且您可以使用多种串行协议进行访问(更多信息,请参见参考手册)。

在引导加载程序内部,应该可以使用SWD引脚进行访问,但是我对此不是100%肯定。

ST Flash Loader演示器是一个工具,可让您使用UART接口擦除/编程微控制器。如果您无法访问微型计算机的任何UART,则此解决方案将对您不起作用。


我可以访问引导加载程序支持的USART3,因此稍后再尝试-这很棘手,因为cos BOOT0与PCB上的GND相连...但是我想知道出了什么问题。我做错了什么?我在main()函数中将SWD / JTAG引脚设置为输出。但是它在手册中说,在复位期间,所有引脚都具有其默认功能,可以立即使用。那么,为什么我不能在复位状态下擦除闪光灯?我还测试了U-LINK 2编程器和uVision5。我希望没有设置保护级别(出于某种原因)。我没有设置任何此类位,但是有什么方法可以测试保护位是否正常?
zupazt3 2015年

@ zupazt3我并不是说听起来很粗鲁,但请重读我的第一句话。它包含有关复位状态下连接问题的答案。如果您不明白,请发表更具体的评论。
阿森纳

但是我并不是一直都系它:)在我的第一篇文章中,我的意思是我什至直接将它系在GND上以检查是否有帮助。但是通常我不将NRST绑定到GND,而是绑定到编程器,因此它可以控制复位。而且它仍然无法连接。我也尝试使用U-Link 2和Keil uVision 5,但结果相同。可能是什么原因?
zupazt3 2015年

@ zupazt3在您的问题中并不清楚。也许增加SWD时钟可能会有所帮助,因为它可能在目标切换到输出之前获得连接。但是我不小心将SWD引脚设置为输出,并且无法连接到我的目标,仅使用BOOT0我就可以恢复它,如果将它们直接接地(没有电阻),将会强硬。
阿森纳

1
我终于设法擦除了芯片!使用ST-Link Utility-我按下了重置按钮,单击了“完全擦除”并释放按钮,它以某种方式自我擦除,现在可以工作了。我曾经尝试过,但直到现在才奏效。
zupazt3

3

如果您使用的是stmcubemx,则需要在stmcube引脚分配选项卡上配置串行线。在引脚选项卡上,单击SYS并将调试选项更改为串行线。它解决了我的问题,也许也解决了您的问题。


虽然这可能是一个问题,但是如果将SWD引脚保留为SWD模式的开机默认设置不是该软件套件的默认设置,则可以说这是一个相当严重的可用性缺陷,需要进行错误报告和更正。您确定没有更改设置的原始值,还是从以非默认方式使用这些引脚的特定项目开始?
克里斯·斯特拉顿

首先,我将我的引脚设置为SYS_SW ....,但是它们的颜色为橙色。上载代码后也没有连接芯片的问题。当我在SYS-Serial Wire中选择调试模式时,芯片在烧裂后正常连接。
gtu

1

我将一些代码下载到自己的STM32F427开发板上。然后,我将无法再使用ST-LINK Utility连接到我的电路板。我认为我的代码搞错了调试端口引脚配置(?无法确认)。我要做的是建立连接并为板子重新编程:

  1. 打开ST-LINK实用程序,并准备在“目标”菜单中进行“连接”。
  2. 为您的电路板供电(在我的情况下,我使用USB电缆),并在同一时间单击ST-LINK Utility中的“连接”。

我用这个技巧恢复了2个板。希望这可以帮助。-鲍勃


1

就像帝力说的:

如果您使用的是stmcubemx,则需要在stmcube引脚分配选项卡上配置串行线。在引脚选项卡上,单击SYS并将调试选项更改为串行线。它解决了我的问题,也许也解决了您的问题。

STM32CubeMx默认情况下不配置调试端口,因此,一旦刷新代码,ST-Link将停止工作。例如,您必须使用ST-link Utility擦除芯片。要连接MCU,我必须在加电期间将BOOT0引脚拉高以激活引导加载程序。然后转到Tarjet菜单和“ 擦除”芯片


0

要对MCU进行重新编程,请按住复位按钮,然后在ST-Link Utility中选择“连接到设备”,或者在IDE中按“下载”(例如Keil),然后释放复位按钮。


-1

引导引脚(某些版本中的位)会阻止调试器启动。确保您在启动时未实现启动模式(在boot0和boot1引脚上一定是二进制模式),否则您的MCU将进入启动状态。


我将boot0引脚连接到GND ...我不确定您写的是什么,因为-正如我所说-我成功地对闪存进行了编程,并且程序仍在MCU上执行-我只是无法通过ST连接到MCU -通过SWD接口链接。在重置状态下,它不应该执行引导,并且引脚应处于默认状态,因此我不明白为什么它不连接。
zupazt3 2015年

你确定吗?您认为哪种组合会以无法覆盖复位操作的方式禁用SWD?
克里斯·斯特拉顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.