打印
[开发工具]

烧错代码导致SWD失效解决办法

[复制链接]
772|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilyly|  楼主 | 2022-12-10 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如下图是APM32三种启动方式:

    ● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!

    ● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。

    ● 第三种启动方式是32内嵌的SRAM启动。该模式用于调试。

BOOT0 设置是0,仿真下载后,程序直接可以运行。而当BOOT0设置是1时,可以通过URAT1下载程序,下载程序后,必须把BOOT0重新设置为0后,程序才能正常执行。

在使用开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框:

J-Link和32 芯片都不大可能就这么坏掉了。多半是烧写进去的软件有些问题,占用了相应的IO 管腿,导致无法利用J-Link与之通讯。那就想办法不让这个错误的程序运行了。例如下述代码如果烧写进去的话就会造成J-Link下次不能正常连接:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

上述代码表示取消JTAG引脚功能,开始SWD引脚功能。

32芯片 中是自带了BootLoader的,切换进BootLoader 中就可以了。具体的方法就是通过BOOT1、BOOT0两个跳线来选择启动模式。修改跳线将启动模式切换为上述的第二种方式:BOOT0=1,BOOT1=0。

断电,改跳线,重新上电,进入第二种方式:BOOT0=1,BOOT1=0,即STM32的BootLoader 模式。此时J-Link可以正常工作了,用J-Link 下载新的程序,下载成功。再断电,把跳线改回来第一种启动方式(BOOT0=0,BOOT1=0),重新上电,一切正常,问题解决。


使用特权

评论回复
沙发
lamanius| | 2023-3-1 13:58 | 只看该作者
如果SWD失效了,可以试试jlink解锁

使用特权

评论回复
板凳
b5z1giu| | 2023-3-1 15:08 | 只看该作者
其实,以后建议做电路板,都要把复位引脚印出来才好

使用特权

评论回复
地板
suw12q| | 2023-3-1 16:14 | 只看该作者
用串口烧录也是个明智的选择,这方式是OK的

使用特权

评论回复
5
g0d5xs| | 2023-3-1 17:19 | 只看该作者
感觉用串口烧录就是那个上电顺序搞不懂,有些时候会出错

使用特权

评论回复
6
ex7s4| | 2023-3-1 18:47 | 只看该作者
其实jlink就能解开的,但是需要是硬复位才行

使用特权

评论回复
7
p0gon9y| | 2023-3-1 19:01 | 只看该作者
对,用BootLoader的方式解决问题,很不错

使用特权

评论回复
8
lix1yr| | 2023-3-2 06:02 | 只看该作者
以后做程序,要是很简单的还好,复杂一点的一定要做个OTA升级才行

使用特权

评论回复
9
q1ngt12| | 2023-3-2 08:21 | 只看该作者
把boot0设置1,boot1设置0,就可以支持串口烧录了,原来APM也是这样

使用特权

评论回复
10
su1yirg| | 2023-3-2 10:14 | 只看该作者
一般程序不建议加这种SWD失能代码,不方便调试的

使用特权

评论回复
11
kaif2n9j| | 2023-3-2 14:07 | 只看该作者
感觉你这不像是锁死了呢,咋还跟DLL有关系了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

1697

帖子

1

粉丝