STM32F4系列(如F4x9)带D-Cache,开启后DMA与CPU共享内存时易出现数据不一致。核心原因是DMA绕过Cache直接访问SRAM,而CPU可能从Cache读取陈旧数据或写回未及时。解决方案:1)使用DMA时,对共享缓冲区执行SCB_CleanDCache()(CPU写后、DMA读前)和SCB_InvalidateDCache()(DMA写后、CPU读前),确保Cache与内存同步;2)将缓冲区定义为非Cacheable区域(如MPU配置为Device或Strongly-ordered),或使用__attribute__((section(".noncacheable")))配合链接脚本;3)若频繁交互,建议改用DMA的Memory-to-Memory模式或禁用D-Cache(仅对性能敏感场景)。实操建议:优先用MPU划分非Cacheable区域,避免每次手动操作,同时注意DMA描述符和缓冲区地址对齐(32字节)。
mcuku 阿沐 · 2026-08-27