Stm32芯片自锁
芯片自锁
时钟问题:时钟频率设置太高,配置超出芯片主频工作范围,导致单片机自锁
电源问题:供电电压不稳,STM32内部存在保护检测,同样会进行芯片的自锁
BOOT脚配置问题:对于STM32往往都有些BOOT配置脚。因为BOOT脚的焊接或接触不良或者BOOT引脚没有配置正确**,导致很多问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。
启动文件问题:经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。
堆或栈越界溢出:这个也会导致芯片无法正常工作,调试时往往可能会有硬错提示。
芯片引脚短路:这是最典型的现象,也是最常见的原因,一般不工作的时候第一反应就是检查是否发生短路,短路引发芯片无法正常工作。
外部晶振异常:外部晶振无法正常工作也是导致芯片无法正常工作的原因,如果程序时钟配置中没有增加在外部晶振无法正常工作时切换到内部晶振的代码,将导致单片机无法正常启动,进行调试会发现代码卡在了RCC时钟的初始化中
数组越界操作: 数组发生越界时,便会进行错误,结果是程序直接卡死
中断处理错误: 同样会导致单片机卡死
我们先来了解一下BOOT0和BOOT1引脚
Flash:
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序,这是正常的工作模式
System memory:
系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。
Embedded Memory:
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
简化:
BOOT1 BOOT0 上电、复位后的启动区域
0 0 Flash(闪存)
1 0 Flash(闪存)
0 1 ROM(固化内存)
1 1 RAM(运行内存)
RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。
ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。
ROM又包含:EEPROM和Flash。
单片机正常情况,程序是从Flash区开始跑的,但是因为你写的软件代码有问题,下进去后,程序跑飞了,单片机卡死。按下复位(因为复位后程序也是从Flash区开始跑)也会卡死。所以芯片就禁掉SWD接口,自锁。
此时我们只需要将BOOT0=1,拉高BOOT0引脚,即从ROM区开始跑程序即可。
因为ROM区是存储存储固化程序的(存放指令代码和一些固定数值,程序运行后不可改动。例如c文件及h文件中所有代码、全局变量、局部变量、’const’限定符定义的常量数据、startup.asm文件中的代码),不会卡死,也就不影响单片机SWD口的下载。
先掉电,将BOOT0拉高后,将代码下进去,然后再掉电,再把BOOT0=0,再上电,即可正常运行了。
(如图黄色的为BOOT跳帽)
另一种方式
使用官方ST-LINK Utility工具
选择这个连接模式mode connect under reset(意思是按下最小核心板的复位键时候连接)
按下芯片复位键的同时,点击连接,然后松开。
可以发现 ** st_link的灯闪烁红蓝相间的光表示连接成功**
连接成功后,将芯片全部擦除