STM32H7的ADC连续采样配合DMA双缓冲,核心是让DMA在M0/M1两个存储区之间自动切换,CPU处理一个区时DMA写另一个区。配置步骤:1)ADC设为连续转换模式,DMA请求由ADC规则组触发,DMA通道配置为循环模式、双缓冲模式(DMA_CCR的CIRC=1、DBM=1),设置M0AR/M1AR两个缓冲区地址,NDTR设为每个缓冲区长度。2)使能DMA传输完成中断(TC)和半传输中断(HT),但避免在HT中做重活;推荐用TC中断处理整块数据,HT仅做标志。3)关键防溢出:ADC采样率与DMA带宽要匹配,计算每缓冲区时长=NDTR/采样率,确保CPU在TC中断内处理完上一块的时间小于该时长;若不够,增大NDTR或降低采样率。4)开启DMA溢出检测(DMA_ISR的OVR),溢出时清标志并记录。5)ADC的DMA请求要持续,避免在中断中关闭ADC。6)使用D-Cache时,缓冲区按32字节对齐,处理前调用SCB_InvalidateDCache_by_Addr,防止读到旧数据。
mcuku 阿沐 · 2026-10-19