1. 基本思路
对于stm32的ADC多通道采样,由于不是每个通道都具备转换结果寄存器,因此在多通道采样时通常需要采用DMA,但是考虑到敏感场合DMA错误或导致ADC Overrun,从而导致待控制的Power Stage故障。鉴于此,考虑采用Auto Injection模式配和一个连续采样的Regular通道实现多通道连续采样,此时连续采样的规则通道和注入通道交替进行,从而实现所设定的通道依次连续采样。经测算,采用此方法采样25通道,所需时间在2us以内。
此时可用的通道数为5个,转换结果分别存放与RDATA和JDATA1-4,如下图所示。
2. 实现方法
以下采用STM32CubeIDE说明实现方法。
(1) 电源和时钟配置
基于手册给出的限制进行设置。
对于多ADC单端情况,设置电源Range1。
由PLLP引出ADC的时钟,fADC<52Mhz。
ADC配置页,取时钟分频如下。
(2) 通道和采样模式设置
通道选择见上图,6、7、15通道被选中,取单端模式。设置一个规则采样通道,并使之为连续模式,新值overwrite,软件触发转换。
使能注入转换,设置所需Rank数和响应的通道,选择Auto Injected Mode。
对于采样时间的选择,不妨选择与手册中测试条件相同的设置,快速通道取2.5 Cycles,慢速通道取6.5 Cycles。
3. 使用方法
- 在ADC初始化后,采用函数
HAL_ADC_Start(&hadc)
和HAL_ADCEx_InjectedStart(&hadc1)
启动ADC的多通道连续采样; - 直接读取ADC的相应RDATA寄存器和JDATA寄存器即可获取转换值,如:
A1_6 = hadc1.Instance->DR;
A1_7 = hadc1.Instance->JDR1;
A1_15 = hadc1.Instance->JDR2;