STM32F303 四个ADC模块同时转换之应用示例

该文介绍了如何在STM32F303VC上使用双ADC主从模式实现四个ADC模块的同步转换,并通过DMA传输转换结果。配置中,ADC1与ADC2、ADC3与ADC4组成两组主从模式,由TIM4的更新事件触发转换。转换结果合并存储,通过DMA将ADC1和ADC3的转换数据传输至指定缓冲区。最终,实验证明了配置与硬件连接的一致性。
摘要由CSDN通过智能技术生成

本文转载自 https://mp.weixin.qq.com/s/_iR_yVWwJOlTglfcOK3M2g
为防止丢失,特转发之.

有人使用STM32F303VC开发电源方面的产品,想使用4个ADC模块进行同时采样转换,感觉不知怎么实现。这里简单介绍下实现过程,以供参考。

在这里插入图片描述

现在希望四个ADC模块同时进行AD转换。我们使用双ADC主从模式,ADC1与ADC2成为一组,构成主从模式。同样,ADC3与ADC4也成为一组构成主从模式。其中,ADC1和ADC3分别为各组中的主,并让两组都工作在同时转换模式,对规则通道进行ADC转换。

在这里插入图片描述

它们的转换使用同一定时器事件来触发,这里选择TIM4的更新事件来触发所有ADC的转换。如下图所示,主ADC的CH1与从ADC的CH16同时进行转换,主ADC的CH2与从ADC的CH14同时进行转换,就这样依次按照红色箭头方向进行。

图片

对于工作在主从模式的双ADC的转换结果,可以合并成一个字放在一个公共数据寄存器里ADCx_CDR( x=12 or 34),能被CPU或DMA读取访问。其中高半字存放从ADC的转换结果,低半字存放主ADC的转换结果。【这里各ADC的分辨率选用12位,转换结果采用右对齐方式。】

图片

大致原理就介绍到这里,更多细节还得看STM32参考手册。

现在将4个ADC模块用起来,同时进行ADC转换,通过DMA传输ADC结果。这里只用到规则转换,其中,ADC1使用它的CH1/CH2,ADC2使用它的CH3/CH4, ADC3使用它的CH5/CH6, ADC4使用CH7/CH8。

图片

各ADC模块的采样通道连接如下图所示,ADC经定时器事件触发转换。

图片

现在基于STM32CubeMx进行初始化配置。

先看TIM4的配置,它的更新事件作为所有ADC的转换触发事件。

图片

然后根据上面的规划,对4个ADC模块进行配置。

图片

4个ADC的配置除了各自选择的通道不一样外,在上面页面里的配置都相同。定时器触发,工作在双模式同时转换。

因为要对ADC结果实行DMA传输,根据当前所选择的工作模式,这里只需对ADC1和ADC3两个主ADC的转换事件进行DMA配置,如下图所示:

图片

我这里将DMA传输配置成循环模式,基于ADC3事件的DMA传输配置跟上面一样,只是DMA通道不同而已。

将时钟等必要的配置完成后即可生成初始化代码。在初始化代码的基础上添加用户代码。

我定义了2个数组pData12[4]、pData34[4]分别存放ADC1/2 与ADC3/4合并后的转换结果。

图片

基于STM32Cube HAL库组织代码,相关参考代码如下:

图片

代码直观明了,无须过多解释。提醒一点,使用双ADC模式时,从ADC要先于主ADC启动使能。

基于上面的规划与代码,测试结果如下:
图片

结果跟实际硬件连接情况完全吻合。

上面只是基于双ADC模块规则通道的同时转换模式做了简单应用介绍。其实对于双ADC模式,还有其它更多转换模式,在STM32开发应用中可以灵活选择使用。

===============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值