STM32F4开启D-Cache后,DMA与CPU数据一致性是典型问题,核心在于Cache与内存的同步。三种典型场景:1) CPU写数据,DMA读(如发送缓冲区):需在DMA启动前调用SCB_CleanDCache(),确保数据从Cache刷到内存;2) DMA写数据,CPU读(如接收缓冲区):需在DMA完成中断中调用SCB_InvalidateDCache(),使Cache失效,强制从内存重新加载;3) 双向传输(如双缓冲):需同时使用Clean和Invalidate,或采用非Cacheable内存区域(如MPU配置)。解决策略:优先使用MPU将DMA缓冲区配置为非Cacheable或Write-Through,避免手动维护;若必须使用Cache,务必在DMA操作前后正确调用Clean/Invalidate,并注意DMA描述符和缓冲区地址对齐(32字节)。实操建议:在DMA中断服务函数中,先失效Cache再处理数据,防止读取陈旧数据;同时,避免在DMA传输中CPU访问同一缓冲区,除非使用互斥或双缓冲机制。
mcuku 阿沐 · 2026-08-27