1, void Error_Handler(void) 死循环。
现象:跳转不到 main() 函数
原因:一般是因为没有用微库进入半主机模式
解决方案:MDK中Options => Target => Use MicroLIB 打钩
2, void HardFault_Handler(void) 死循环。
现象:跑着跑着进入了 HardFault_Handler() 死循环。
原因:
1、内存溢出或者访问越界。
2、堆栈溢出,程序指针指飞。
3、硬件电路错误!(现象:没有自己的程序,官方或STM32CubeMX程序也会死在这里)
内存堆栈问题 解决方案1:
1、函数内部变量占用空间较大时,定义为全局变量或者静态变量,减少堆栈的占用。
2、多使用指针解决数据的复制,同时减少内存的占用。
内存堆栈问题 解决方案2:修改堆栈大小
STM32CubeMX 修改堆栈大小 Stack。(通常说的堆栈指的是 栈)
硬件问题 解决方案:检查硬件修改正确!
1,电源
2,复位电路
3,时钟电路
4,启动电路 BOOT0、BOOT1
5、芯片上都有个VCAP脚。他需要外接一个电容到地,目的是为了保证内部主调压器的电压稳定,选择不当可能会引起程序无法下载或者运行不稳定的情况。