核心方案是使用DMA的循环模式配合双缓冲(或乒乓缓冲),并在每个采样周期结束时通过DMA半传输/传输完成中断切换缓冲区。关键点:1)配置DMA为循环模式,外设地址固定为ADC数据寄存器,内存地址为缓冲区数组,数据宽度与ADC分辨率匹配(如16位);2)缓冲区大小设为通道数×采样次数,确保每次中断时缓冲区已完整填充一组所有通道的数据;3)在中断回调中,根据当前使用的缓冲区索引(通过DMA的NDTR寄存器或自定义标志)解析通道:按顺序读取,例如通道顺序为CH0-CH2,则buffer[0]为CH0,buffer[1]为CH1,buffer[2]为CH2。4)为避免错位,务必在ADC启动前清零DMA的传输计数,并确保ADC的扫描顺序与DMA写入顺序一致(可通过ADC_CR2的DMA位和DMA的通道优先级配置)。实操建议:使用HAL库时,启用DMA的HalfCpltCallback和CpltCallback,在回调中切换标志位,主循环根据标志处理数据,避免在中断中做复杂运算。
mcuku 阿沐 · 2026-08-27