You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F407ZE执行SRAM1中代码触发HardFault故障排查

SRAM运行代码触发HardFault排查方案

以下按故障出现概率从高到低排序排查:

  • 第一优先级检查MPU配置:Cortex-M4内核的SRAM区域默认常被配置XN(Execute Never,禁止执行)属性,若未手动修改MPU配置,CPU尝试从SRAM取指时会直接触发MemManage错误,未开MemManage中断时直接升级为HardFault。
    需将SRAM1对应的地址区间配置为Normal内存属性,清除XN位,同时关闭该区间的写保护限制。

注意:部分MCU的MPU配置在system初始化文件中默认开启,不要只检查自己写的应用代码,要核对启动流程中所有MPU相关配置。

  • 检查向量表重定位配置:代码整体迁移到SRAM1运行时,必须在跳转到main函数前配置SCB->VTOR寄存器,将向量表基地址指向SRAM1内的向量表起始位置,地址需满足至少128字节对齐要求。若VTOR仍指向默认Flash基地址,首次中断或函数跳转时会从Flash取无效地址直接跑飞。
  • 核对链接脚本与启动文件匹配性:
    1. 确认.text、.rodata、.init、.init_array等所有代码、只读常量段全部分配到SRAM1地址区间,无遗漏段被分配到CCMRAM或Flash区域
    2. 确认链接脚本中SRAM1的起始地址、长度配置与芯片手册完全一致,避免代码段越界分配到非法地址
    3. 确认启动文件中初始栈指针取值来自重定位后的向量表首项,不要硬编码Flash区域的栈地址
  • 检查跳转合法性与总线配置:
    1. Cortex-M4仅支持Thumb指令集,跳转目标地址最低位必须置1,若跳转地址为偶数会直接触发用法错误
    2. 跳转前必须使能SRAM1对应的总线时钟,部分低功耗型号SRAM1时钟默认关闭,直接访问会触发总线错误
    3. 核对AHB总线矩阵配置,确认Cortex-M4 I-bus、D-bus对SRAM1有完整访问权限,无主从访问拦截配置
    4. 若开启了芯片读保护、RAM写保护,需先解除对应保护位,避免SRAM1写入代码后读取值异常,执行非法指令触发故障
  • HardFault寄存器快速定位方法:
    1. 读取SCB->CFSR寄存器值:若IBUSERR位为1,为取指总线错误,对应前述MPU、时钟、权限配置问题;若INVPC、INVSTATE位为1,为跳转地址非法或Thumb位未置1
    2. 触发故障后查看LR值,若为0xFFFFFFF9/0xFFFFFFFD,可分别从MSP/PSP指针位置读取栈帧中的PC值,核对该PC地址是否落在SRAM1的合法代码区间,快速定位出错指令位置。

内容的提问来源于stack exchange,提问作者Sheikh Muhammad Junaid Aslam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:36:17