针对STM32F4开启D-Cache后的DMA一致性问题,推荐三种实用手法:1) 使用非缓存内存区域(如MPU配置为Non-cacheable或使用CCM RAM),将DMA缓冲区放置于此,直接避免缓存干扰,适用于高频传输;2) 手动维护缓存一致性,在DMA启动前调用SCB_CleanDCache_by_Addr()清缓存,传输完成后调用SCB_InvalidateDCache_by_Addr()失效缓存,注意地址需32字节对齐且长度按行对齐,适用于低频或可控场景;3) 使用DMA的double-buffer模式配合缓存操作,交替处理数据,减少等待时间。实操建议:优先评估传输频率和实时性,若允许,用MPU划分非缓存区最省心;若必须用缓存,务必在中断或轮询中严格按流程操作,并启用D-Cache的Write-Through模式(需谨慎,会降低性能)。
mcuku 阿沐 · 2026-08-27