在STM32双缓冲DMA传输ADC数据时,核心配置包括:1)初始化DMA为循环模式,设置双缓冲(Memory0/Memory1)并启用DMA_CTRL_MEMORY_INC;2)在ADC配置中启用DMA请求,并设置数据对齐(如右对齐16位);3)在DMA中断回调中切换当前活动缓冲区(通过读取DMA_GetCurrentMemoryTarget),确保在缓冲区切换前处理完数据。缓存一致性方面,若使用带Cache的MCU(如STM32H7),需在DMA访问前调用SCB_InvalidateDCache_by_Addr(读取前)或SCB_CleanDCache_by_Addr(写入前),并确保缓冲区地址按32字节对齐;若使用不带Cache的F1/F4系列,则无需处理,但需注意DMA传输完成后数据才有效,建议在传输完成中断中处理数据,避免在传输过程中访问缓冲区。实操建议:使用双缓冲时,在DMA传输完成中断中先切换目标缓冲区,再处理已满缓冲区,并设置缓冲区大小满足ADC采样率,防止溢出。
mcuku 阿沐 · 2026-08-27