实现STM32的DMA+双缓冲ADC连续采样,核心是配置DMA循环模式并启用双缓冲(即内存地址交替)。具体步骤:1)初始化ADC为连续转换模式,触发源设为定时器或软件,确保采样率稳定;2)配置DMA为循环模式,方向外设到内存,数据宽度半字(16位),并设置两个缓冲区(如buf1和buf2),大小需匹配采样点数;3)启用DMA的双缓冲功能(通过DMA_SxM0AR和DMA_SxM1AR寄存器),并开启传输完成中断(TC)和半传输中断(HT);4)在中断服务函数中,根据DMA_GetFlagStatus判断当前使用的缓冲区,处理已满数据(如存储或计算),同时确保处理时间小于一个缓冲区填充时间,避免覆盖。实操建议:优先使用HAL库的HAL_ADC_Start_DMA和HAL_ADCEx_MultiModeStart_DMA,但需手动配置双缓冲;若用寄存器,注意设置DMA_SxCR的DBM位。另外,确保缓冲区地址对齐(如4字节),并考虑使用FIFO或环形队列管理数据。测试时用示波器验证无丢点。
mcuku 阿沐 · 2026-08-27