【蓝桥杯嵌入式国赛】多通道ADC采集

前言:蓝桥杯扩展板中ADC按键与主板中模拟输入1均为ADC2,所以需要进行ADC的多通道采集。目前已经完成了查询模式的数据采集且无误,但是对于多通道DMA模式却遇到了一些问题。首先先把查询模式的做法写出,然后将遇到的问题记录下。

(1)查询模式(无误):

一、CubeMX配置:

解释:将对应的PB15与PA5的ADC使能。配置采集通道数Number Of Conversion为2,并确保Rank为不同的通道。配置到通道采集数后启用间断模式Discontinuous Conversion Mode,该模式会使每次使能ADC(HAL_ADC_Start(&hadc1))时按照Rank依次进行转换,并将转换完成的值放入寄存器中。所以在进行数据读取时应使能一次读取一次,这时读到的数据即为不同通道的ADC值。

二、代码部分:

校准ADC:

HAL_ADCEx_Calibration_Start(&hadc2); 

轮寻读取ADC寄存器中的数据:

uint16_t Value[2]={0}; //先创建数组来保存ADC结果


        
for(int i=0;i < 2;i++){
	HAL_ADC_Start(&hadc2);                  //使能一次ADC
    HAL_ADC_PollForConversion(&hadc2,10);   //轮询等待ADC转换完成
	Value[i]=HAL_ADC_GetValue(&hadc2);      //将两个通道的采样值存在数组里
}

此时DAC的值已按照Rank中的顺序存入Value中。


(2)DMA模式(有问题):

问题:使用DMA模式读取多通道ADC的值时,发现数据并不会从Value[0]进行存储,而是从Value[1]开始。操作如下:

一、CubeMX配置:

DMA配置:

解释:打开DMA通道,并选择循环(Circular)模式,由于ADC寄存器为16位,故数据长度均选择半字(Half Word)。

ADC配置:

解释:根据通道数配置Number Of Conversion并检查Rank。由于使用DMA并且是多通道,故使能转换模式Continuous Conversion Mode。

二、代码部分:

uint16_t Value[3];   //创建数组接收数据


HAL_ADCEx_Calibration_Start(&hadc2);            //校准ADC
HAL_ADC_Start_DMA(&hadc2,(uint32_t *)Value,3);  //启动ADC的DMA模式

串口输出查看Value的值:

printf("V1=%d    ",Value[0]);
printf("V2=%d    ",Value[1]);
printf("V3=%d    ",Value[2]);

printf("\n");

结果如下:

初步认为是因为打开DMA时强制转换指针类型导致,将类型为uint16_t的Value指针转换为uint32_t,又因为ADC数据配置为右对齐,故前16位数据为0。因为DMA数据长度选择的是半字(16位),故接下来指针移动16位,不影响接下来的数据。所以呈现出来的现象就是Value[0]一直被赋值为0,数据从第二位开始。然而其他教程中并未提及该情况。
如有想法,欢迎评论区讨论!后续如果找到了问题所在,我会进行更新。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
蓝桥杯嵌入式国赛是由中国计算机学会主办的一项面向嵌入式开发领域的比赛。比赛旨在鼓励和推动嵌入式技术的发展,展示青年学生的创新能力和团队合作精神。 嵌入式技术是将计算机技术应用到各种电子设备中的一种技术,包括单片机、嵌入式操作系统、硬件设计等。在现代社会的各个领域,嵌入式技术都发挥着重要作用。蓝桥杯嵌入式国赛就是围绕这一领域展开的竞赛,以提升国内嵌入式技术人才的水平为目标。 参加蓝桥杯嵌入式国赛的学生需要组队参赛,并完成指定的项目任务。比赛内容包括嵌入式系统设计与开发、算法与程序设计、硬件电路设计等。参赛选手既要具备坚实的计算机基础知识,又要具备较强的实践能力与创新能力,才能在比赛中取得好的成绩。 蓝桥杯嵌入式国赛的成功举办,不仅为广大嵌入式技术爱好者提供了一个展示和交流的平台,也推动了嵌入式技术的发展与应用。对于参赛选手而言,通过与其他选手的较量,可以提高自己的技术水平,增强自己的团队合作意识。同时,参加比赛也会获得一定的荣誉和奖励,有助于对选手未来的就业和升学产生积极的影响。 总之,蓝桥杯嵌入式国赛是一项具有重要意义的比赛,通过参加比赛,可以提高嵌入式技术人才的素质,促进嵌入式技术的发展与应用,为推动中国计算机领域的发展做出贡献。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值