STM32 F4系列运行 莫名 无规律 HardFault 硬件错误

对于HardFault错误,之前也遇到过,无非是以下几种原因:

  • 数组越界
  • 内存溢出,访问越界
  • 堆栈溢出,程序跑飞
  • 中断处理错误

一般通过打断点就能找到何时发生硬件错误。

但是这次遇到的硬件错误现象却很异常,其表现为:

  • 错误出现随机,有时在时钟初始化时,有时在时钟初始化之后,有时又在之后的代码中,毫无规律
  • 即使将代码简化到只有一个时钟初始化和while(1)循环,依然会出现
  • 在线仿真时,单步调试一般不出现,一旦全速跑几个函数,就会很快出现

由于代码简单,看不出什么特别,而单步调试又不容易出现,怀疑是不是频率(180Mhz)的问题,降低频率(90MHz)后发现居然不出现了硬件错误,难道就是频率问题????
可是F4不是本来就可以到180MHz,这应该不是最终原因。。。
于是将代码移植到评估板上进行测试,180MHz下正常运行,问题定位到硬件上。
检查原理图发现,VCAP1VCAP2的外部电容焊接的是2.2pF,与硬件手册上推荐的2.2uF不同,替换后问题成功解决
STM32 F4系列运行 莫名 无规律 HardFault 硬件错误_第1张图片
由此可见,VCAP脚的电容对维持芯片内部供电的稳定非常关键。如果该脚的电容焊接得不好或参数相差太远、品质太差都会引起问题。
也就不难理解上面提到的系统工作时钟低时能正常工作,系统频率高时MCU就扛不住了,出现HARDFAULT异常。

补充

嵌入式线性调压器为内部提供1.2V电源,为备份域和待机电路以外的所有数字电路供电。
STM32 F4系列运行 莫名 无规律 HardFault 硬件错误_第2张图片
在拥有BYPASS_REG引脚的封装上,应保持BYPASS_REG为低电平使能调压器,其他封装调压器始终使能。
在调压器关闭时,需要通过外部提供稳定的1.2V电源,同时vcap需要替换为100nF的去耦电容。
STM32 F4系列运行 莫名 无规律 HardFault 硬件错误_第3张图片
正如一般的LDO器件,合理的电容安排能够提供更加稳定的电源质量,MCU工作频率提高,对电源的稳定性要求就更高。

你可能感兴趣的:(STM32)