核心思路是让DMA在双缓冲之间无缝切换,避免CPU介入造成间隙。STM32的DMA支持双缓冲模式(DBM),当配置为循环模式时,硬件会在当前缓冲区传输完成后自动切换到另一个缓冲区,无需软件干预。关键点:1)确保DMA配置为循环模式(Circular)且启用DBM,这样传输地址会在两个缓冲区间自动翻转;2)ADC使用连续转换模式(CONT=1)并配合DMA请求,确保每个转换结果立即触发DMA传输;3)在中断回调中(如Half Transfer或Transfer Complete)处理已满缓冲区,但处理时间必须小于一个缓冲区填充时间,否则会覆盖。实操建议:将缓冲区大小设为ADC采样率的整数倍,例如采样率1kHz,缓冲区1000个样本,则每1秒切换一次,留足处理时间。若仍担心丢失,可增加缓冲区深度(如4级乒乓)或使用定时器触发ADC采样,精确控制采样节奏。
mcuku 阿沐 · 2026-08-27