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;
Provided by 昨夜三更雨, see https://www.cnblogs.com/zysgy/p/15811834.html
 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号