核心思路是采用“双缓冲+定时器触发+DMA中断同步”方案。首先,将ADC配置为扫描模式,并启用DMA循环模式,但不要直接使用单一大缓冲区,而是定义两个大小相等的缓冲区(如buf1和buf2),通过DMA的半传输和传输完成中断交替切换。每次DMA中断时,在中断服务程序中记录当前缓冲区索引,并利用定时器(如TIM1)的更新事件作为ADC采样的外部触发源,确保每个通道的采样时刻严格对齐。同时,在DMA配置中,将数据宽度设为半字(16位),并确保缓冲区大小等于通道数×采样次数,避免因字节对齐问题导致错位。另外,建议在DMA中断中读取DMA的CNDTR寄存器(剩余数据量)来校验当前缓冲区位置,防止因中断延迟造成数据覆盖。最后,主循环中处理数据时,只访问非活动缓冲区,并通过标志位同步,这样可彻底避免错位和时序抖动。
mcuku 阿沐 · 2026-08-27