前言
我使用的是定时器触发ADC采样。最近在想达到ADC的最高采样率的时候,发现一直却卡在1Msps上不去,直到在硬汉嵌入式的论坛里才发现了答案:[ADC] STM32H743/H750的Y版和V版芯片ADC的主频区别
这篇文章就详细的讲一下这个问题,这也是我发现网上有关H7配置ADC的文章是都没有提到的,而这确实是最重要的一个关键点。
判断芯片是Y还是V版
博主使用的 H743 是正点原子的阿波罗开发板。由于 ST 公司持续进行芯片更新迭代,你手中的芯片版本很可能与博主不同。不同版本的芯片,手册内容存在差异,比如 Y 版芯片对应 Y 版手册,V 版芯片则对应 V 版手册 。
博主手上的是V版的芯片,如下图所示的位置可以看到:
判断Y版芯片和V版芯片手册中ADC的不同
Y版
上面给出的硬汉嵌入式的超链接里面就有说这个问题,首先让我们来看一下Y版手册的:
可以知道,ADC的时钟来源有两个,一个是来自AHB总线上的时钟,另一个就来自独立于APB时钟,并与AHB时钟异步的特定时钟源。手册里有说到:AHB总线上的时钟有一个同步预分频器,只可以配置为1、2、4;特定时钟源则有一个异步预分频器,可以配置为1、2、4、6...256。最后可以看到配置好的时钟频率直接通过了右边的红色框框送给到了ADC作为时钟。
V版
V版手册与Y版大致相同,但是注意到多了一个adc_sclk的时钟源,就是系统时钟源,包括了HSI、HSE等等;在红框框那里,又多出了一个2分频,这是着重要注意的,也就是说,前面的时钟配置好以后,都会再经过这个2分频才会给到ADC作为时钟!
CubeMX中的ADC时钟配置
这里就讲ADC的时钟配置问题,这是很多博主都没有注意到的,甚至是有错误的地方。
总时钟配置
CubeMX里是只有两个时钟来源(AHB时钟和特定时钟源) ,可知ST虽然更新了芯片,但是软件上却没有进行处理,大家还是要多注意一下。
虽然V版芯片多了个sclk的来源,这里没有显示出来,但sclk原本的时钟频率也不高,不用管即可。
V版芯片ADC时钟注意要点
V版芯片这里注意,其实是有个隐形的÷2的,也就是现在配置了100MHz,实际上经过分频后就只有50MHz。
ADC时钟分频设置注意
- 上面红色框框里面的就是异步分频,指的就是当你ADC选择的时钟源为特定时钟源的时候,才需要选择这里的1、2、4、6...256之间的分频。
- 蓝色框框里就是同步分频,指的就是当ADC选择的时钟源是AHB提供的时候的时候,才需要选择这里的1、2、4分频。
- 但是博主这里有个问题,H743IIT6的同步分频选不了1和2,应该是和异步分频的1和2分频合在一起了,如果有像我这种情况的就可以选异步的1和2分频来当作同步的1和2分频。
总结
这个Y版、V版芯片和同步、异步时钟分频的问题,基本没有博文提到,所以有可能你们配置一开始就是有问题的,之前导致了我ADC采样率一直在1MHz上不去,现在可以超频到50MHz来达到最高5Msps的采样率。
ps.这里吐槽一下正点原子,明明是V版芯片,资料里的手册提供的却是Y版芯片的,使用阿波罗开发板的朋友注意一下。还有ST公司,CubeMx里也不更新一下,当初看了手册再在CubeMX中配置的时候也疑惑了一段时间。