STM32G0系列ADC扫描序列模式

有人在使用STM32G0芯片的 ADC模块时,往往因为扫描模式的理解不到位或选择不当导致些问题。
STM32G0芯片的 ADC设置了两种扫描模式:不完全序列扫描( Sequencer not fully configurable )和完全序列扫描( Sequencer fully configurable

1. 不完全序列扫描( Sequencer not fully configurable

这种扫描可以理解为:将所需ADC扫描通道按照从通道数小到大,或者从大到小的顺序依次扫描。简而言之,通道数决定了扫描的顺序,不能更改。
例如我们需要将如下通道进行ADC扫描


现在共用到ADC1模块的4个ADC 通道,即1个片内Vrefint通道和其它三个外部通道CH8,CH10,CH17,而我们知道Vrefint在硬件中对应的通道是CH13,即我们对CH8 CH10 CH17以及CH13进行扫描采样。
①配置ADC_CFGR1 CHSELRMOD  bit 置0, each analog input channel has a dedicated selection bit(CHSELx).
②选择 Sequencer not fully configurable ,我们需要对ADC_CHSELR 寄存器中的CHSELx 相应位进行置1

③配置ADC_CFGR1   SCANDIR  bit ,即确定扫描方向,0向前扫描 (from CHSEL0 to CHSEL18) ,1向后扫描 (from CHSEL18 to CHSEL0) 。例如我们配置成0向前扫描。
以上3步在32CUBEMX里配置非常简单

当启动AD采样后,扫描顺序将按照CH8 ——CH10—— CH13—— CH17顺序扫描。这种顺序是不可改变的。

2. 完全序列扫描( Sequencer fully configurable

这种扫描模式相对于不完全扫描模式,具有更高的灵活性,关键在于它除了可以选择参与扫描的通道数外,也可以选择扫描的先后顺序(即可以不按通道数大小的顺序扫描,谁先谁后可以自定义)
但是,这种模式也有局限:
①不能所有通道都可同时参与扫描,它最多支持8个通道扫描
②只有CH0~CH14才支持这种模式,CH15~CH18不支持。
这种模式需要
①配置ADC_CFGR1 CHSELRMOD  bit 置1, ADC_CHSELR register is able to sequence up to 8 channels
②配置ADC_CHSELR寄存器中的 从SQ1[3:0]到SQ8[3:0] ,选择参与扫描的通道。因为扫描的顺序是从SQ1到SQ8,所以我们可以把需要优先扫描的通道放在SQ靠前的寄存器里,这样既实现了通道选择,也自定义了通道扫描的先后顺序。

特别注意的是,当SQn[3:0] 里的赋值等于0b1111 ,即0x0f 时则该通道选择域以及后续SQn 的通道选择无效。比方说,假设SQ3[3:0]的数据为0b1111 ,则表示从SQ3[3:0] 开始直到SQ8[3:0] 的通道选择无效
32CUBEMX配置

总结:STM32G0 ADC扫描模式并不复杂,总结下来就以下几点:

1.分两个模式:完全系列和不完全序列
2.不完全序列所有通道都可参与,但只能按通道顺序扫描;完全序列可不按通道顺序扫描,但CH0~CH14才支持
3.注意寄存器配置,不要配置不合法的数值
读懂G0 ADC扫描,玩转两个模式不再难!

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论