STM32 ADC多通道转换DMA模式与非DMA模式两种方式(HAL库)
优采云 发布时间: 2020-08-29 21:13STM32 ADC多通道转换DMA模式与非DMA模式两种方式(HAL库)
一、非DMA模式(转)
说明:这个是自己刚做的时侯百度下来的,不是我自己做下来的,因为觉得有用就保存出来做学习用,原文链接:,下面第二部份我会补充自己的DMA模式的技巧。
Stm32 ADC 的转换模式还是太灵活,很强悍,模式种类好多,那么这也造成很多人使用的时侯没悉心研究参考指南的情况下容易混淆。不知道该用哪种方法来实现自己想要的功能。网上也可以搜到好多资料,但是大部分是针对之前老版本的标准库的。昨天帮顾客解决这个问题,正好做个总结:使用stm32cubeMX配置生成多通道采集的反例。
软件:STM32Cumebx MDK
硬件:eemaker板(基于stm32F103c8的)
在百度搜索ADC多通道采集,大部分的都是基于采用dma模式才实现的。而我讲的使用非dma技巧。首先有几个概念要搞清楚:
扫描模式(想采集多通道必须开启):是一次对所选中的通道进行转换,比如开了ch0,ch1,ch4,ch5。Ch0转换完之后才会手动转换通道0,1,4,5直至转换完。但是这些连续性并不是不能被打断。这就引入了间断模式,可以说是对扫描模式的一种补充。它可以把0,1,4,5这四个通道进行分组。可以分成0,1一组,4,5一组。也可以每位通道配置为一组。这样每一组转换之前都须要先触发一次。
Stm32 ADC的单次模式和连续模式。这两中模式的概念是相对应的。这里的单次模式并不是指一个通道。假如你同时开了ch0,ch1,ch4,ch5这四个通道。单次模式转换模式下会把这四个通道采集一边就停止了。而连续模式就是这四个通道转换完之后再循环过来再从ch0开始。
另外还有规则组和注入组的概念,因为我这个类库只用到了规则组,就不多介绍这两个概念,想要弄清楚请自行查阅指南。
下面步入题外话,配置stm32cubeMX。
先让能几个通道,我这儿设置为0、1、4、5.
然后就要配置ADC的参数:
目前经过我的测试,要想用非dma和中断模式只有这样配置可以正确进行多通道转换:扫描模式+单次转换模式+间断转换模式(每个间断组一个通道)。
分析配置成这样的模式,扫描模式是在配置为多个通道必须打开的,stm32cubeMX上也默认好了,只能enable。单次转换模式是我不需要不停的去采集每个通道值,而是把四个通道采集完之后就让它停止。这里间断配置是关键,间断模式可以使扫描的四个通道进行分成四个组,stm32cubeMX参数上面number of Discontinous Conversions是配置间断组每位组有几个通道的,这里必须配置为1(否则在获取ad值得时侯只能读取到每位间断组最后一个通道)。
生成mdk工程代码。这时候还没有完成,只是实现了ADC的初始化,需要采集这四个通道值得函数还要自己写。下面这个是我main函数的while循环:
<p>for(i=1;i