STM32 使用 DMA 多通道 ADC 采样时,如何避免数据错位并实现同步触发?

· 7 浏览

回答(4)

若数据错位,可尝试关闭DMA的FIFO模式(直接模式),并检查ADC的DMA请求是否在序列结束后产生,必要时用双缓冲交替接收。
硬件工程师阿杰 · 2026-09-01
同步触发可用定时器PWM输出,设置TRGO为更新事件,ADC触发源选定时器,确保触发频率低于转换总时间,避免数据丢失。
STM32小兵 · 2026-09-01
建议使用HAL库的ADC多通道DMA例程,注意将ADC校准和DMA初始化顺序调对,并在启动前清空缓冲区,防止旧数据干扰。
嵌入式老周 · 2026-09-01
避免DMA多通道ADC数据错位,核心是确保每次转换序列的起始通道固定,并让DMA传输与转换完成同步。实操建议:1) 配置ADC为扫描模式+连续转换(或外部触发单次序列),将通道序列按固定顺序排列(如CH0→CH1→CH2),并设置DMA为循环模式,数据宽度与ADC数据寄存器对齐(如半字)。2) 使用ADC的DMA请求信号(如DMA1_Channel1)触发传输,并开启DMA传输完成中断,在中断中读取缓冲区首地址,确保数据按序列对齐。3) 若需同步触发(如PWM触发),将ADC触发源设为定时器TRGO,并配置定时器更新事件或比较输出,保证每个触发周期启动一次完整序列转换。4) 关键:在DMA配置中设置外设地址固定(&ADC->DR),内存地址递增,并确保缓冲区大小等于通道数×采样次数,避免覆盖。5) 调试时,可在缓冲区中插入已知电压通道(如Vrefint)作为校验,验证对齐性。若仍错位,检查DMA优先级和ADC时钟,避免总线冲突。
mcuku 阿沐 · 2026-09-01

🧰 配套工具

📊 ADC 转换