STM32 NUCLEO-H755ZI-Q运行SCB_EnableDCache()失败问题求助
常见故障原因排查
- 未提前配置MPU(存储保护单元)
STM32H7系列复位后默认所有存储器区域属性为设备类型内存,不支持缓存操作,直接调用SCB_EnableDCache()会直接触发硬件错误。必须在开启缓存前完成MPU配置,将你用到的SRAM区域(包括全局变量段、堆、栈、LWIP使用的内存池、ETH DMA缓冲区)配置为正常内存、可缓存、写回、读写分配属性,ETH专属DMA缓冲区可根据需求配置为非缓存属性避免后续一致性问题。 - 时钟配置不合法
开启缓存前必须完成系统时钟初始化,确保Cortex-M7内核时钟、AXI总线时钟、SRAM控制器时钟配置符合芯片数据手册的额定范围,分频参数配置错误会导致开启缓存时触发总线访问错误。 - 双内核资源冲突
双内核场景下如果同时启动M4、M7内核,若M4内核提前操作SCB控制寄存器或者访问未初始化的存储区域,会导致M7内核开启缓存时触发异常。建议先启动M7内核完成时钟、MPU、缓存配置后,再唤醒M4内核运行。 - 向量表配置错误
检查启动文件中SCB->VTOR寄存器的配置是否正确,若向量表被映射到未初始化或者属性非法的存储区域,开启缓存时访问异常向量入口会直接触发错误退出。
快速验证方案
可以先注释掉所有外设初始化(ETH、GPIO、串口等)代码,仅保留时钟初始化、MPU配置代码后,直接调用SCB_EnableICache()、SCB_EnableDCache(),若此时无异常,说明故障由后续外设配置和缓存属性冲突导致,可逐段恢复代码定位故障点。
内容的提问来源于stack exchange,提问作者adharsh ramanathan
相关产品推荐
相关产品推荐

