核心思路:用两个缓冲区交替承接DMA传输,配合DMA传输完成中断切换缓冲区,但关键点在于“无中断损失”需用循环模式+半传输/传输完成中断,而非双缓冲模式(STM32的DMA双缓冲是硬件自动切换,但需手动重载地址)。实操建议:1. 配置ADC为连续扫描模式,DMA设为循环模式,数据宽度半字;2. 使用DMA的HalfTransfer和TransferComplete中断,在中断里仅切换用户读写指针(如buf_index异或1),不停止DMA;3. 缓冲区大小设为2的幂次,用位运算取模;4. 注意ADC采样率与DMA带宽匹配,避免溢出;5. 若需更高实时性,可改用定时器触发ADC,并让DMA在后台静默运行。此方案中断开销仅两次指针切换,远小于数据搬运时间,实现真正无损失。
mcuku 阿沐 · 2026-08-27