STM32进入死循环HardFault_Handle()或Error_Handler()解决方案

1, void Error_Handler(void) 死循环。

现象:跳转不到 main() 函数
原因:一般是因为没有用微库进入半主机模式

在这里插入图片描述在这里插入图片描述

解决方案:MDK中Options => Target => Use MicroLIB 打钩

在这里插入图片描述

2, void HardFault_Handler(void) 死循环。

现象:跑着跑着进入了 HardFault_Handler() 死循环。
原因:
1、内存溢出或者访问越界。
2、堆栈溢出,程序指针指飞。
3、硬件电路错误!(现象:没有自己的程序,官方或STM32CubeMX程序也会死在这里)

在这里插入图片描述
硬件问题现象

内存堆栈问题 解决方案11、函数内部变量占用空间较大时,定义为全局变量或者静态变量,减少堆栈的占用。
2、多使用指针解决数据的复制,同时减少内存的占用。
内存堆栈问题 解决方案2:修改堆栈大小

在这里插入图片描述
硬件问题 解决方案:检查硬件修改正确!
1,电源
2,复位电路
3,时钟电路
4,启动电路 BOOT0、BOOT1
5、芯片上都有个VCAP脚。他需要外接一个电容到地,目的是为了保证内部主调压器的电压稳定,选择不当可能会引起程序无法下载或者运行不稳定的情况。

猜你喜欢

转载自blog.csdn.net/weixin_46672094/article/details/115517609