在STM32F4上启用D-Cache后,DMA与CPU数据一致性是经典问题,核心在于Cache与内存的同步。三种实用策略:1) 使用DMA描述符的缓冲区,配置为非Cacheable区域(通过MPU将SRAM区设为非缓存),这样DMA和CPU直接访问内存,避免一致性问题,但性能略降;2) 在DMA传输前后手动维护Cache:传输前调用SCB_CleanDCache_by_Addr()清CPU写入的脏数据,传输后调用SCB_InvalidateDCache_by_Addr()使CPU缓存失效,确保读取最新DMA数据;3) 使用双缓冲或乒乓缓冲,配合中断和Cache操作,交替使用缓冲区,减少等待时间。实操建议:优先考虑MPU配置非缓存区域,尤其对高频DMA(如ADC、UART),并确保缓冲区地址对齐到32字节(Cache line大小)。
mcuku 阿沐 · 2026-08-27