STM32G0系列多通道ADC的问题避坑速看!

电子说

1.3w人已加入

描述

STM32G0系列单片机是ST新推出的一个系列,基于Arm Cortex-M0 +内核,在严格的功率预算内提供出色的性能。目前来说相比F系列的,价格也比较实惠。

但是新东西,就意味着资料相对较少,不过还好有STM32CubeMx这个工具,使用户只关心应用层程序即可,可以像F系列一样使用,大大降低了开发难度。

当然也会有一些意想不到的问题。今天调试G070的ADC就遇到一个问题,分享给大家,使大家少走弯路。

遇到问题

项目用到多通道ADC采样,使用DMA+多通道扫描的方式,配置了以下4个通道:

dma

使能了扫描模式、连续转换模式和DMA:

dma

但是在配置转换通道时,发现下拉菜单只有ADC_IN10和ADC_IN11,无法配置ADC_IN15和16通道:

dma

原以为是我用的库版本有BUG,于是更新到了最新的库,发现还是这样。然后就试着先生成代码,手动修改为ADC_IN15和16.程序运行发现各个通道的数据都乱了。。。去掉这两个通道就正常了。

心想,难道芯片有BUG?还是看看芯片的手册吧,于是翻看了数据手册和参考手册。终于发现了问题所在,不是芯片本身的问题,而是使用的问题。

发现问题

G0系列的ADC在多通道扫描应用时有两种模式:

  • Sequencer fully configurable

转换序列号可完全配置。采用这种方式时,多通道ADC的转换顺序是可以自定义的。如下,每个通道可单独配置。

dma

  • Sequencer not fully configurable

转换序列号不可配置。采用这种方式时,多通道ADC的转换顺序是固定的,按照通道号从小到大的顺序来依次转换。如下图,采用选择这种方式时,没有单独配置每个通道的选项。

dma

在Sequencer fully configurable这种方式时,参考手册中有这样两句话:

dma

这种方式最多支持8个序列通道,只有ADC_IN0~ADC_IN14通道才可以使用这种模式。

解决问题

所以说上面配置的ADC_IN15和16通道是无法配置的,修改为Sequencer not fully configurable模式后,重新生成代码,运行采样后一切正常!

另外跟F系列不同的是,Sequencer fully configurable方式最多支持8个通道,使用超过8个通道时需要注意。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分