eefocus_4153245 发表于 2025-6-23 17:46:59

STM32H7的MPU配置与D-Cache冲突如何解决?​​ ​​

STM32H7的MPU配置与D-Cache冲突如何解决?​​​硬件环境
[*]MCU 型号:STM32H743VIT6
[*]开发板:自定义板(或 STM32H743I-EVAL 等)
[*]外部晶振:25MHz HSE,16MHz LSE
[*]调试工具:ST-LINK/V2-1
[*]供电:3.3V 稳压器
软件环境
[*]开发工具链:Keil MDK v5.37(或 GCC Arm Embedded Toolchain 10.3-2021.10)
[*]RTOS:FreeRTOS v202112.00(或裸机)
[*]CubeMX 配置:
[*]HCLK = 480MHz,D1 APB3 = 120MHz
[*]D-Cache、I-Cache、MPU 均启用
[*]系统时钟配置通过 HAL_RCC_ConfigSystemClock () 完成

问题现象
[*]错误触发条件:

[*]仅当同时启用D-Cache和MPU时出现。
[*]关闭 D-Cache(SCB_DisableDCache())或 MPU(MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk)后,系统运行正常。


a1a1a21 发表于 2025-9-23 14:40:57

确保MPU区域配置与缓存策略匹配:

MPU可以设置内存区域的权限和缓存策略(如是否可缓存、写通、写回等)。如果MPU配置的缓存策略与D-Cache的行为不匹配,可能会导致数据不一致。

例如,如果某个内存区域被配置为“设备”类型(通常不可缓存),但D-Cache却缓存了该区域的数据,则会导致问题。因此,需要确保MPU区域配置为正确的内存类型和缓存策略。
页: [1]
查看完整版本: STM32H7的MPU配置与D-Cache冲突如何解决?​​ ​​