核心方案:使用DMA的循环模式(Circular Mode)配合ADC的扫描模式(Scan Mode),并确保DMA配置为半字(Half-word)传输以匹配ADC数据寄存器(16位)。关键点:1)将DMA的缓冲区大小设为通道数×采样次数,且每次转换完成触发DMA请求;2)在DMA传输完成中断(TC)或半传输中断(HT)中处理数据,避免主循环读取时缓冲区被覆盖;3)若需精确时序,可启用ADC的DMA请求在每次转换结束(EOC)时触发,而非序列结束(EOS),并设置DMA的FIFO或直接模式(Direct Mode)以降低延迟。实操建议:初始化时先配置ADC(扫描、连续或单次模式),再配置DMA(外设地址固定为ADC->DR,内存地址递增),最后使能DMA和ADC。若数据错位,检查DMA的传输宽度是否与ADC数据对齐,并确认ADC的DMA请求映射(如STM32F4需在ADC_CR2中设置DDS位)。
mcuku 阿沐 · 2026-08-27