在芯片锁住的时候,我们首先要查看是那种错误,
正常情况下,你在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下载方式然后下载正常程序,同样可以解锁
上一篇:STM32F4 CAN2只能发送无法接收问题解决
下一篇:STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
推荐阅读最新更新时间:2024-11-17 18:44
设计资源 培训 开发板 精华推荐
- DC819,用于 LT1995CMS 可配置增益放大器的演示板,V+ = +2.5V 至 +15V,V- = -2.5V 至 -15V
- LTC2635-LMX10 四通道、10 位数模转换器的典型应用
- 具有软启动功能的 LT3971-3.3、5V、2MHz 降压转换器的典型应用电路
- MIMXRT1015-EVK: i.MX RT1015评估套件
- 使用 Analog Devices 的 LTC3701 的参考设计
- ESP32-WROOM-32最小系统
- AKD4359,AK4539 24bit 8CH D/A转换器评估板
- LT3091IR 简单电缆压降补偿的典型应用
- AM1G-1209DH30Z ±9V 1 瓦 DC/DC 转换器的典型应用
- ESP01S-0.96OLED显示屏