STM32常见HardFault的诊断
Hard Fault的诊断
Cortex-M3异常模型 2
异常 IRQ
异常类型 优先级 备注
编号 编号
1 ‐ Reset ‐3,最高
2 ‐14 NMI ‐2 永远被使能
3 ‐13 Hard Fault ‐1 Hard Fault
4 ‐12 MM Fault
Fault handler
5 ‐11 Bus Fault 可配置 Local Fault
6 ‐10 Usage Fault
7‐10 ‐ ‐ ‐
11 ‐5 SVCall 由SVC指令触发
可配置
12 ‐4 DebugMonitor
13 ‐ ‐ ‐
14 ‐2 PendSV
可配置
15 ‐1 SysTick
常见的四种错误异常 3
• 用法错误(Usage Fault)
• 执行未定义指令、非对齐操作、除零
• 复位时默认未使能
• 总线错误(Bus Fault)
• 取指令、数据读写、堆栈操作
• 复位时默认未使能
• 存储器管理错误(Memory Management Fault)
• 违反MPU设定的存储器访问规则
• 复位时默认未使能
• 硬错误(Hard Fault)
• 以上异常处理被关闭,而又发生了异常,则触发
• 执行异常处理时,发生了异常,则触发
• 复位时默认使能
用法错误异常 4
• 用法错误异常是与指令译码相关联的处理机制,通常包括
以下类错误型:
• 企图执行未定义指令
• 企图进入ARM状态
• 无效的中断返回码
• 企图执行协处理器指令
• 使用多重加载/存储指令时地址没对齐
• ……
• 使能控制
• SCB->SHCSR. USGFAULTENA @0xE000ED24
何时会意外地试图切入ARM状态:
>> 执行BX Rn 指令时,Rn 的最低位(LSB)为0
>> 异常向量表中的向量为偶数,LSB = 0
>> POP {…,PC}时,弹给PC的值为偶数,LSB = 0
Presentation Title 9/26/2012
用法错误异常寄存器 5
• 发生用法错误时,可通过查看寄存器了解出错的原因
• SCB->CFSR. Usage Fault (UFSR) @0xE000ED2A
位段 名称 类型 含义 备注
企图执行除0操作 使能控制:
9 DIVBYZERO
(指令:SDIV、UDIV)