打印
[STM32F1]

STM32自锁如何解锁?(解锁方法)

[复制链接]
867|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在芯片锁住的时候,我们首先要查看是那种错误,
正常情况下,你在Keil下载时遇到错误应该是这样的


找不到Cortex™-M内核
Flash下载失败

使用特权

评论回复
评论
梅花香自123 2022-8-24 22:31 回复TA
  ———————————————— 版权声明:本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/as480133937/article/details/103131038 
沙发
梅花香自123|  楼主 | 2022-8-24 16:11 | 只看该作者
打开J-Link-Commander

使用特权

评论回复
板凳
梅花香自123|  楼主 | 2022-8-24 16:12 | 只看该作者
如果是正常,则是可以找到Cortex-M3/M4内核,

使用特权

评论回复
地板
梅花香自123|  楼主 | 2022-8-24 16:13 | 只看该作者
如果芯片自锁之后,会发现先是JTAG方式查找,之后SWD方式查找,最后找不到任何内核

使用特权

评论回复
5
梅花香自123|  楼主 | 2022-8-24 16:14 | 只看该作者
以下问题为J-LINK能找到芯片时的异常错误:

BOOT脚配置问题:对于STM32往往都有些BOOT配置脚。因为BOOT脚的焊接或接触不良或者BOOT引脚没有配置正确**,导致很多问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。

使用特权

评论回复
6
梅花香自123|  楼主 | 2022-8-24 16:15 | 只看该作者
启动文件问题:经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。

使用特权

评论回复
7
梅花香自123|  楼主 | 2022-8-24 16:16 | 只看该作者
芯片引脚短路:这是最典型的现象,也是最常见的原因,一般不工作的时候第一反应就是检查是否发生短路,短路引发芯片无法正常工作。

使用特权

评论回复
8
梅花香自123|  楼主 | 2022-8-24 16:16 | 只看该作者
外部晶振异常:外部晶振无法正常工作也是导致芯片无法正常工作的原因,如果程序时钟配置中没有增加在外部晶振无法正常工作时切换到内部晶振的代码,将导致单片机无法正常启动,进行调试会发现代码卡在了RCC时钟的初始化中

使用特权

评论回复
9
梅花香自123|  楼主 | 2022-8-24 16:18 | 只看该作者
数组越界操作: 数组发生越界时,便会进行错误,结果是程序直接卡死

中断处理错误: 同样会导致单片机卡死

单片机发生程序异常时,会进入到HardFault_Handler中断

使用特权

评论回复
10
梅花香自123|  楼主 | 2022-8-24 16:19 | 只看该作者
解决方法:


在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真

使用特权

评论回复
11
梅花香自123|  楼主 | 2022-8-24 16:19 | 只看该作者

使用特权

评论回复
12
梅花香自123|  楼主 | 2022-8-24 16:20 | 只看该作者

在Keil菜单栏点击“View”——“Call Stack Window”
弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况

使用特权

评论回复
13
梅花香自123|  楼主 | 2022-8-24 16:21 | 只看该作者
以下问题为J-LINK找不到芯片时的异常错误:

自锁原因:

STM32单片机一般的连接方式是**主闪存存储器(flash)**启动模式,即BOOT0为0,这样在用JTAG或SWD写进程序的时候,如果该程序工程中芯片选型不正确或着程序中复用了JTAG或SW复用引脚导致程序执行后出现启动配置错误或者调试引脚被占用而引起的芯片锁死或Jlnk连接不上的问题,

时钟问题:时钟频率设置太高,配置超出芯片主频工作范围,导致单片机自锁

电源问题:供电电压不稳,STM32内部存在保护检测,同样会进行芯片的自锁

使用特权

评论回复
14
梅花香自123|  楼主 | 2022-8-24 22:33 | 只看该作者
解决方法:

把BOOT0和BOOT1跳成1和0,(这时候就看下Jlink应该可以找到芯片),让内部程序不运行,然后再重新下载另外的程序,再改回BOOT设置,便可以恢复正常。如果板子上JTAG和SW调试电路都有的话,在其中一种方式导致锁死的情况下可以用另一种方式擦除恢复,而不必调整BOOT设置。

使用特权

评论回复
15
梅花香自123|  楼主 | 2022-8-24 22:33 | 只看该作者

使用特权

评论回复
16
梅花香自123|  楼主 | 2022-8-24 22:34 | 只看该作者
简单的说 : 正常的芯片自锁,就是将Flash存储进行读写保护,使得不能运行程序,而我们的做法就是将BOOT0置高,使程序从系统存储器启动,找到芯片之后,重新往Flash中下载一个正常的代码,之后再换回Flash启动,芯片即可完成解锁

如果即可以JTAG下载又可以SWD下载,假设SWD方式锁了,可以换成JTAG下载方式然后下载正常程序,同样可以解锁

使用特权

评论回复
17
Uriah| | 2022-9-29 12:14 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
18
Uriah| | 2022-9-30 12:14 | 只看该作者

USART1可以有多个时钟源

使用特权

评论回复
19
Bblythe| | 2022-9-30 15:13 | 只看该作者

通过访问寄存器来控制I2C1工作时钟的开启。

使用特权

评论回复
20
Pulitzer| | 2022-9-30 18:12 | 只看该作者

I2C1工作时钟源选择;I2C1模块工作时钟的开启使能。

使用特权

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

本版积分规则

85

主题

1040

帖子

0

粉丝