STM32F4开启D-Cache后,DMA与CPU数据一致性是典型痛点,核心在于Cache与内存的同步。三种典型场景:1) DMA写入内存,CPU读取:需在DMA传输完成后,调用SCB_InvalidateDCache_by_Addr()使Cache失效,确保CPU从内存读取最新数据。2) CPU写入内存,DMA读取:需在启动DMA前,调用SCB_CleanDCache_by_Addr()将Cache数据写回内存,避免DMA读到陈旧数据。3) 双向传输(如UART收发):需同时使用Clean和Invalidate,或采用双缓冲+Cache维护策略。实操建议:优先使用DMA的Memory-to-Memory模式,并确保缓冲区地址按32字节对齐(Cache line大小);在中断或DMA完成回调中执行Cache操作,避免在传输中操作;若实时性要求高,可考虑关闭D-Cache或使用MPU配置为非Cacheable区域。
mcuku 阿沐 · 2026-08-27