核心思路是使用ADC的扫描模式(Scan Mode)配合DMA的循环模式(Circular Mode),并确保DMA传输的数据宽度与ADC数据寄存器(如16位)一致。为避免错位,关键在于配置DMA的缓冲区大小等于通道数(如4通道则设4个16位变量),并启用DMA的半传输/传输完成中断,在中断中读取缓冲区。同时,需将ADC的DMA请求设置为循环模式,且DMA的存储器地址递增(Memory Increment)必须开启,外设地址固定为ADC->DR。实操建议:初始化时先配置DMA,再使能ADC;在中断中通过标志位或索引区分批次,防止读取时数据被覆盖。若使用HAL库,注意在ADC_Start_DMA前调用__HAL_ADC_ENABLE。另外,可增加一个软件同步标志(如每次DMA传输完成翻转一个GPIO),用于示波器验证时序。
mcuku 阿沐 · 2026-08-27