F103vet6在hal库中ADC-DMA多通道的配置

我发现关于ADC-DMA多通道的资料比较少 ,所以我就简单说下原理和配置步骤 ;

ADC采集电压值有很多种方法 :轮询 、 中断 、 DMA 等 , 如果数据量小的话还好,用哪个都行 ; 但是当需要采集的通道  越来越多时, 前两种方法就不太容易实现 ,太·频繁的在主函数调用或者频繁进入中断也是会对主程序产生影响 。

在使用DMA时,大家要知道,以f1为例 , DMA1有7个通道 , DNA2有5个通道 , 而这每一个通道都有对应的功能,而不是随便配置就行 。

(以下所有资料图都是截取自f1系列的数据手册,大家有需要可以自行查看)

还有重要的配置就是选择地址需不需要自增 ,一般来说都是通过外设读取数值存储到一个数组中 ,需要用数据的时候直接调用数组变量即可 , 这也即是说外设到地址的传输,外设不自增 , 地址自增即可 。 

下列框选住的就是每一个通道所对应的不同功能 ; 

然后说下ADC:

1、12位分辨率意思就是2的12次方 == 4096的数值 ; 当用作AD转换时就需要用到这个值 

2、 单次转换就如字面意思 : 只转换一次就停止了,如果要在这个模式下不停的转换那么就需要不断的调用这个取值函数 ; 

3、连续转换相反 ,只要调用一次开始函数  ,便能够持续转换, 

4、扫描模式 ,会将所使用的adc通道按顺序AD转换一遍,0-n ,不断重复的扫

5 、 ADC的通道有17个之多 ,每一个都对应着不同的引脚 , 如果使用标准库的话,就需要自行打开手册去查找相对应的 。

6、在规则组我们所需要用到的数据是12位的,多余的4位是无效的 。 所以我们选择数据右对齐是刚好的 。 

7 、 采样时间其实多少都可以 。 并没有严谨的要求

8 、 只有ADC1和ADC3可以直接使用DMA 。 

让我们看下是需要如何配置吧。

开启外部高速时钟

开个串口方便调试

最后在主函数调用这些函数即可

HAL_ADCEx_Calibration_Start(&hadc1);  // 开启校准
HAL_DMA_Start(&hdma_adc1 ,(uint32_t)&ADC1->DR,(uint32_t)num,len); // DMA 开启 
HAL_ADC_Start(&hadc1 ) ;  // ADC 开启
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)num,len); // ADC_DMA开始转换

ADC->DR是源地址,num就是定义的数组。len就是所需要用到内存空间大小

大家要用数据的时候直接调用num的变量即可。数据多的话也可以进行算法滤波处理。

以上 :如果有什么问题,大家可以直接评论区评论哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值