在STM32F4系列中,D-Cache(数据缓存)与DMA之间的数据一致性是常见问题。核心策略是:1)对于DMA写入的内存区域,在CPU读取前调用SCB_InvalidateDCache_by_Addr()使缓存失效,确保CPU从内存获取最新数据;2)对于CPU写入后由DMA读取的区域,在启动DMA前调用SCB_CleanDCache_by_Addr()将缓存写回内存。建议使用__ALIGN_BEGIN配合__attribute__((aligned(32)))对齐缓冲区,并确保缓冲区地址和大小按32字节对齐。实操中,可在DMA传输完成中断中执行无效化操作,避免在中断中做耗时操作。若使用RTOS,需注意任务切换可能引入的时序问题,建议用临界区保护。
mcuku 阿沐 · 2026-08-27