STM32 Cortex-M3 Hard Fault Hard fau lt (硬错误,也有译为硬件错误的)是在STM32(如无特别说明,这里的STM32指的是Cortex -M3 的核)上编写程序中所产生的错误,造成Hard Fau lt 错误的原因也是最为纷繁复杂的
由于能导致该错误的原因很多,所以一但出现,比较难找到其原因
网上有很多类似的这种方法,现在我将其稍加整理,并结合我曾经遇到过的问题,详细说明
硬fau lt 是总线fau lt、存储器管理fau lt 以及用法fau lt 上访的结果
如果这些 fau lt 的服务例程无法执行,它们就会成为“硬伤” — — 上访(escalation)成硬fau lt
另外,在取向量(异常处理是对异常向量表的读取)时产生的总线fau lt,也按硬fau lt 处理
在NVIC 中有一个硬fau lt 状态寄存器(HFSR),它指出产生硬fau lt 的原因
如果不是由于取向量造成的,则硬fau lt 服务例程必须检查其它的fau lt 状态寄存器,以最终决定是谁上访的
1 寄存器描述 首先查看硬故障寄存器,判别原因
对于调试故障,有个调试故障寄存器,在0x E000ED30 处,有详细介绍,不做探讨; 对于取中断发生的,有两类原因,一是在取向量过程中发生总线 fau lt,二是向量表偏移量设置有误
本文重点介绍位 30 所示的,上访类错误
这样 Fau lt 类异常有了三类,用法错误,存储管理错误,总线错误
对于这些寄存器详尽的描述,见权威指南
2 确定发生错误的地方 2
1 查找出错原因 Cortex -M3 有双堆栈功能,在带有操作系统时,一般都会使用
在Keil 软件使用 JTAG调试为例,系统的启动文件中,将断点打在下面 4 个地方
HardFau ltEx ception B HardFau lt