STM32H7 ADC3采样频率计算与实测不符问题咨询
STM32H7 ADC3采样频率偏差问题分析与解答
1. 采样频率计算错误的核心原因
你混淆了ADC3_CCR寄存器中PRESC位的作用:
PRESC是对Fadc_ker_ck分频,生成的是ADC转换序列的触发时钟(用于启动规则/注入组的转换序列),并非单样本的转换时钟。你之前计算的30MHz/128=234.375kHz是触发序列的时钟频率,不是单样本的采样率。- 当采用3通道连续采集时,每个触发事件会完成3个通道的转换,单样本的实际耗时需要包含以下部分:
你的实测数据中,600个样本耗时34.82ms,对应200组3通道序列,单序列耗时约174us,平均单通道58us,这个数值包含了:单样本耗时 = (单通道转换时间 + 通道切换开销) + 序列触发间隔 + DMA传输延迟- 单通道转换时间(理论566ns)
- 多通道序列的通道切换额外时钟周期(STM32H7 ADC切换通道需额外几个内核时钟周期,参考手册具体参数)
PRESC分频后的触发间隔(约4.266us)- BDMA数据搬运的响应、传输延迟,若开启DMA中断还会有中断处理开销
另外需确认关键配置:
- 是否开启ADC连续转换模式?若为单次转换模式,触发等待时间会大幅增加耗时。
- BDMA配置是否正确:是否开启循环模式、内存增量模式,数据宽度是否匹配16位ADC(
PSIZE/MSIZE设为16位),DMA优先级是否足够避免被其他外设抢占。
2. Tconv与PRESC的关系
你的推测正确,Tconv与PRESC完全无关:
Tconv由ADC内核时钟Fadc_ker_ck和采样时间配置决定,公式为Tconv = (采样时间 + 16位固定转换周期) / Fadc_ker_ck,此处使用的是30MHz的ADC内核时钟,和PRESC分频后的触发时钟属于独立时钟域。PRESC仅影响ADC转换序列的触发频率,不参与转换过程的时钟计时。
验证建议
- 先测试单通道连续采集:关闭多通道配置,采集200个单通道样本,对比理论耗时与实测值,排查多通道切换的额外开销。
- 检查ADC的
SQR寄存器:确认通道序列长度为3,无多余空通道或重复采样设置。 - 检查BDMA的
CCR寄存器:确认MINC开启、PINC关闭,数据宽度设置正确。
内容的提问来源于stack exchange,提问作者WITC
相关产品推荐
相关产品推荐

