核心思路是使用ADC的DMA循环模式配合双缓冲(或环形缓冲区),并利用ADC的EOC(转换结束)和DMA的传输完成中断来同步数据。首先,配置ADC为扫描模式+连续转换,DMA设置为循环模式,数据宽度与ADC寄存器匹配(如16位)。为避免多通道数据错位,必须确保DMA传输的数据块大小等于通道数(如4通道则每次传输4个半字),并在DMA传输完成中断中通过标志位(如半传输/全传输)切换缓冲区,这样每次中断时缓冲区内的数据就是完整的一轮采样。同时,在启动DMA前清零ADC的DR寄存器,并确保DMA的地址递增与ADC通道顺序一致。时序一致性方面,建议使用定时器触发ADC转换(如TIM1的TRGO),这样采样频率固定,DMA搬运节奏稳定。若使用连续转换,需注意CPU读取缓冲区时可能覆盖未处理数据,因此务必采用双缓冲机制。实操中,可先初始化DMA并开启中断,再启动ADC,并在中断中拷贝数据或置标志,主循环处理。
mcuku 阿沐 · 2026-08-27