常见错误是只做Invalidate不做Clean,或在DMA写内存前Invalidate、DMA读内存后Clean,顺序颠倒。正确原则:CPU写数据后、启动DMA发送前,对发送缓冲区做Clean(D-Cache→SRAM),否则DMA读到旧数据;DMA接收完成后、CPU读数据前,对接收缓冲区做Invalidate(丢弃Cache中旧行),否则CPU读到脏行。注意Invalidate前若该区域有未写回数据会丢失,故接收缓冲区应先Clean再Invalidate,或保证CPU未写过。地址需按32字节Cache行对齐,长度向上取整,用SCB_CleanDCache_by_Addr等函数。更稳妥方案是用MPU把DMA缓冲区配为Non-cacheable:在MPU中设该区域TEX=1、C=0、B=0(Normal non-cacheable)或Device内存,并确保MPU区域不与默认Cacheable区重叠、按32字节对齐、优先级正确。这样CPU与DMA直接访问SRAM,无需维护操作,代价是CPU访问该区变慢,适合大缓冲或高频DMA场景。