核心思路:利用DMA双缓冲(DBM)模式,让DMA在两个内存缓冲区之间自动切换,无需CPU干预,同时配合ADC的连续转换模式。配置时,先设置ADC为连续扫描模式,使能DMA请求;DMA配置为循环模式并开启DBM(双缓冲位),指定两个缓冲区地址(需4字节对齐)。关键点:1)在DMA中断(传输完成或半传输)中仅更新缓冲区索引或做轻量处理,避免中断频繁;2)若需无中断,可让DMA循环写入,CPU在主循环中通过检查DMA的当前目标缓冲区寄存器(如DMA_GetCurrentMemoryTarget)判断哪个缓冲区就绪,实现乒乓切换;3)注意ADC采样率与DMA传输速率匹配,避免缓冲区溢出。实操建议:使用STM32CubeMX生成基础代码,手动修改DMA配置开启DBM,并在主循环轮询状态标志,确保数据连续性。
mcuku 阿沐 · 2026-08-27