电子说
STM32G0系列单片机是ST新推出的一个系列,基于Arm Cortex-M0 +内核,在严格的功率预算内提供出色的性能。目前来说相比F系列的,价格也比较实惠。
但是新东西,就意味着资料相对较少,不过还好有STM32CubeMx这个工具,使用户只关心应用层程序即可,可以像F系列一样使用,大大降低了开发难度。
当然也会有一些意想不到的问题。今天调试G070的ADC就遇到一个问题,分享给大家,使大家少走弯路。
遇到问题
项目用到多通道ADC采样,使用DMA+多通道扫描的方式,配置了以下4个通道:
使能了扫描模式、连续转换模式和DMA:
但是在配置转换通道时,发现下拉菜单只有ADC_IN10和ADC_IN11,无法配置ADC_IN15和16通道:
原以为是我用的库版本有BUG,于是更新到了最新的库,发现还是这样。然后就试着先生成代码,手动修改为ADC_IN15和16.程序运行发现各个通道的数据都乱了。。。去掉这两个通道就正常了。
心想,难道芯片有BUG?还是看看芯片的手册吧,于是翻看了数据手册和参考手册。终于发现了问题所在,不是芯片本身的问题,而是使用的问题。
发现问题
G0系列的ADC在多通道扫描应用时有两种模式:
转换序列号可完全配置。采用这种方式时,多通道ADC的转换顺序是可以自定义的。如下,每个通道可单独配置。
转换序列号不可配置。采用这种方式时,多通道ADC的转换顺序是固定的,按照通道号从小到大的顺序来依次转换。如下图,采用选择这种方式时,没有单独配置每个通道的选项。
在Sequencer fully configurable这种方式时,参考手册中有这样两句话:
这种方式最多支持8个序列通道,只有ADC_IN0~ADC_IN14通道才可以使用这种模式。
解决问题
所以说上面配置的ADC_IN15和16通道是无法配置的,修改为Sequencer not fully configurable模式后,重新生成代码,运行采样后一切正常!
另外跟F系列不同的是,Sequencer fully configurable方式最多支持8个通道,使用超过8个通道时需要注意。
全部0条评论
快来发表一下你的评论吧 !