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

发布者:快乐家庭最新更新时间:2020-08-24 来源: eefocus关键字:STM32  自锁  解锁 手机看文章 扫描二维码
随时随地手机看文章

在芯片锁住的时候,我们首先要查看是那种错误,
正常情况下,你在Keil下载时遇到错误应该是这样的

在这里插入图片描述
在这里插入图片描述
找不到Cortex™-M内核
Flash下载失败

打开J-Link-Commander
在这里插入图片描述
如果是正常,则是可以找到Cortex-M3/M4内核,
在这里插入图片描述

如果芯片自锁之后,会发现先是JTAG方式查找,之后SWD方式查找,最后找不到任何内核
在这里插入图片描述

以下问题为J-LINK能找到芯片时的异常错误:

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


启动文件问题:经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。


堆或栈越界溢出:这个也会导致芯片无法正常工作,调试时往往可能会有硬错提示。


芯片引脚短路:这是最典型的现象,也是最常见的原因,一般不工作的时候第一反应就是检查是否发生短路,短路引发芯片无法正常工作。


外部晶振异常:外部晶振无法正常工作也是导致芯片无法正常工作的原因,如果程序时钟配置中没有增加在外部晶振无法正常工作时切换到内部晶振的代码,将导致单片机无法正常启动,进行调试会发现代码卡在了RCC时钟的初始化中

数组越界操作: 数组发生越界时,便会进行错误,结果是程序直接卡死

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

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

解决方法:

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

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

以下问题为J-LINK找不到芯片时的异常错误:

自锁原因:

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

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

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

解决方法:

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

在这里插入图片描述
简单的说 : 正常的芯片自锁,就是将Flash存储进行读写保护,使得不能运行程序,而我们的做法就是将BOOT0置高,使程序从系统存储器启动,找到芯片之后,重新往Flash中下载一个正常的代码,之后再换回Flash启动,芯片即可完成解锁


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

关键字:STM32  自锁  解锁 引用地址:STM32自锁如何解锁?(解锁方法)

上一篇:STM32F4 CAN2只能发送无法接收问题解决
下一篇:STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

推荐阅读最新更新时间:2024-11-17 18:44

stm32: 固件库文件说明
关于固件库文件说明 固件库文件夹STM32F10x_StdPeriph_Lib_V3.5.0下文件说明: 一、Libraries文件夹主要文件有: 1、core_cm3.c , core_cm3.h :CMSIS核心文件,通过进入Cortex_M3内核的接口 2、startup文件夹下是系统启动文件,根据不同的芯片选用启动文件,103系列芯片选用startup_stm32f10x_hd.s 3、system_stm32f10x.c , system_stm32f10x.h :设置系统及总线时钟,其中SystemInit函数在系统启动时,设置时钟系统。 4、stm32f10x.h :系统寄存器定义、声明、内存操作。 二、P
[单片机]
STM32学习日志——定时器中断实验
今天学习的是通用定时器及其中断,首先是内部时钟的选择,定时器的时钟Tclk是由APB1时钟乘以1或2决定的,至于是1还是2,要看APB1的分频系数(AHB/APB1),如果为1,则乘以1,否则乘以2。接着就可以根据我们想设定的时间Tout,去配置ARR跟PSC,这两个数是存在16位的寄存器,所以他们的范围为(0-65535),在这个范围内任意取值,满足公式即可。如果我么要配置500ms,可将ARR配置为2499,PSC配置为14399。也就是定时器计数的一个周期为500ms。(ARR为自动重装载值,PSC为Tclk的预分频系数) 根据步骤去写程序就很简单了。 实现功能:通过定时器的中断控制一个绿灯翻转,时间为500ms
[单片机]
<font color='red'>STM32</font>学习日志——定时器中断实验
移植STM32固件库用于HID双向通信
USB的应用中HID类是比较常见的方式。通过修改STM32 USB固件库V4.0的JOYSTICK应用,我们实现一个双向USB通信。 一、移植 使用STM32源程序为点亮LED灯程序。 首先将USB固件库中有用的函数复制到源函数中,建立LIB文件夹其中放入USB2.0协议函数 建立CFG文件夹放入USB应用函数 将两个文件夹都放到源工程目录下将文件添加进来,设置好,配置好KEIL软件设置。 二、修改文件 1、首先修改platform_config.h函数。 该文件是对于多种芯片对于USB库的支持。我们使用STM32F103ZET6芯片,所以只保留与之相关的ID项,与USB_DISCONNECT线(PG11)的配
[单片机]
STM32调试支持
STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。 SWJ调试端口(serial wire and JTAG) STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚)。 ● JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。 ● 串行调试接口(SW-DP)
[单片机]
STM32寄存器与库函数
前面定时器 的时候说了一个路子用到了直接操作寄存器。现在LCD在举一个例子。 void LCD_RESET(void) { LCD_RST_CLR; delay_ms(100); LCD_RST_SET; delay_ms(50); } 所谓复位就是:拉低--延时--拉高 就好了。一般用库函数,但是你看: #define LCD_RST_SET GPIOC- BSRR=1 5 //复位 PC5 #define LCD_RST_CLR GPIOC- BRR=1 5 //复位 PC5 用的不是库函数哦! 现在我们修改一下 我们用的是PD6复位的!(初始化也要修改) #define LCD_
[单片机]
STM32 矩阵键盘扫描程序
#define __JUZHENJIANPAN_H extern u8 KeysCAN(void); extern void GPIO_Config(void); #endif #include stm32f10x.h #include juzhenjianpan.h #include gpiobitmap.h #define PC0 PCo_0 #define PC1 PCo_1 #define PC2 PCo_2 #define PC3 PCo_3 #define PC4 PCo_4 void GPIO_Config(void) { R CC _APB2Peri
[单片机]
STM32 软件按键消抖
引言 通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图1所示。 图1 分析 按键稳定闭合时间长短是由操作人员决定的,通常都会在 100ms 以上,刻意快速按的话能达到 40-50ms 左右,很难再低了。抖动时间是由按键的机械特性决定的,一般都会在 10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。 方法一 在绝大多数情况下,我们是用软件即程序来实现消抖的。最简单的消抖原理,就是当检测到按键状态变化后,先等待一个 10m
[单片机]
<font color='red'>STM32</font> 软件按键消抖
STM32的USB键盘及鼠标例程
STM32的USB键盘及鼠标例程通过网络可以搜到很,但是在同一个设备中集成键盘及鼠标的例程却比较少见(我通过GOOGLE只搜到圈圈的基于51+D12的版本)。以下为我参考圈圈的例程做出来的集成键盘及鼠标的STM32的程序。   程序上除了usb_desc.c及usb_endp.c外,其它部份同单一的键盘鼠标一样。下面着重说一下usb_desc.c及usb_endp.c的不同之处。   单一键盘鼠标跟集成键盘鼠标这区别主要是报告描述符不同。单一键盘鼠标的报告描述符因只有一组报告输入/输出,故没有报告ID,而集成的有两组报告(键盘及鼠标),所以每一组报告都有一个报告ID加以区别。   另外就是在usb_endp.c中对端点的数据
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved