[应用相关]

Stm32cubeMx配置ADC多通道采集

[复制链接]
6374|6
手机看帖
扫描二维码
随时随地手机跟帖
51xlf|  楼主 | 2021-9-17 14:47 | 显示全部楼层 |阅读模式
本帖最后由 51xlf 于 2021-9-17 14:49 编辑

扫描模式(想采集多通道必须开启):是一次对所选中的通道进行转换,比如开了ch0,ch1,ch4,ch5。Ch0转换完以后就会自动转换通道0,1,4,5直到转换完。但是这种连续性并不是不能被打断。这就引入了间断模式,可以说是对扫描模式的一种补充。它可以把0,1,4,5这四个通道进行分组。可以分成0,1一组,4,5一组。也可以每个通道配置为一组。这样每一组转换之前都需要先触发一次。
307661443a4fd3a98.png
Stm32 ADC的单次模式和连续模式。这两中模式的概念是相对应的。这里的单次模式并不是指一个通道。假如你同时开了ch0,ch1,ch4,ch5这四个通道。单次模式转换模式下会把这四个通道采集一边就停止了。而连续模式就是这四个通道转换完以后再循环过来再从ch0开始。
另外还有规则组和注入组的概念,因为我这个例程只用到了规则组,就不多介绍这两个概念,想要弄清楚请自行查阅手册。
下面进入正题,配置stm32cubeMX。
120816_0932_Stm32cubeMx1-1.png
先使能几个通道,我这里设置为0、1、4、5.
然后就要配置ADC的参数:
6599361443a5d33a2a.png
120816_0932_Stm32cubeMx2-1.png
目前经过我的测试,要想用非dma和中断模式只有这样配置可以正确进行多通道转换:扫描模式+单次转换模式+间断转换模式(每个间断组一个通道)。
分析配置成这样的模式,扫描模式是在配置为多个通道必须打开的,stm32cubeMX上也默认好了,只能enable。单次转换模式是我不需要不停的去采集每个通道值,而是把四个通道采集完以后就让它停止。这里间断配置是关键,间断模式可以让扫描的四个通道进行分成四个组,stm32cubeMX参数里面number of Discontinous Conversions是配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
生成mdk工程代码。这时候还没有完成,只是实现了ADC的初始化,需要采集这四个通道值得函数还要自己写。下面这个是我main函数的while循环:
for(i=1;i<5;i++)

{

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1,0xffff);

adcBuf[i]=HAL_ADC_GetValue(&hadc1);

printf("------ch:%d--%d-------\r\n",i,adcBuf[i]);

}

HAL_ADC_Stop(&hadc1);

HAL_Delay(1000);
调用hal库接口函数也需要注意,HAL_ADC_Start一定要放在for里面,即每一个通道都要触发。四个通道都采集完了,再去调用HAL_ADC_Stop(&hadc1);结束本次ADC采集。

转自https://blog.csdn.net/qq_24815615/article/details/70227385

使用特权

评论回复
小叶三千| | 2021-9-18 08:19 | 显示全部楼层
感谢分享,HAL库越来越常用了

使用特权

评论回复
labasi| | 2021-10-9 14:46 | 显示全部楼层
使用的连续转换模式吗

使用特权

评论回复
guanjiaer| | 2021-10-9 14:56 | 显示全部楼层
我一直就在用hal库

使用特权

评论回复
heimaojingzhang| | 2021-10-9 14:56 | 显示全部楼层
用这个配置真的很方便

使用特权

评论回复
keaibukelian| | 2021-10-9 14:59 | 显示全部楼层
基本上配置完成就能直接用了

使用特权

评论回复
paotangsan| | 2021-10-9 14:59 | 显示全部楼层
希望这个软件功能越来越强大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

9325

帖子

18

粉丝