新版-蓝桥杯嵌入式-拓展板 两路ADC的学习使用;

目录

一、硬件原理

二、CUBEMX配置

三、程序编写

四、观察现象


一、硬件原理

通过该硬件电路,我们可以知道通过旋转RP5,RP6电位器可以调节该滑动变阻器的阻值,从而达到调节该点的电压。而我们需要做的就是通过ad来采集A01,AO2口的电压。

这个很简单,话不多说,我们直接上手看配置。 

二、CUBEMX配置

首先进行拓展板上的跳线,将短接帽连接P3,P4;

AO1对应的是PA4,AO2对应的是PA5;

所以在CUBEMX中将PA4,PA5引脚打开,设为ADC采集通道;

 这里需要说几个需要注意的点。

1.因为我们使用了不同采集通道的同一个ADC,因此在单个ad采集的基础上需要打开扫描转换模式,这样才能采集完一个通道后采集另一个通道。

2.将Number of Corversion (转换数量) 修改为2,因为我们有两个通道。否则我们只能使用到一个通道;

然后下面就是依旧的打开DMA传输。选择连续转换模式,其余的默认。

然后就是关闭 DMA 中断,上一篇已经说过,容易造成系统死机;

 生成代码,打开KEIL;

三、程序编写

1.用一个数组创建两个ad采集存储容器,每次只存储一个值,可以实现实时的ad采集。

uint16_t adc[2];

这样做可以理解为,同时采集两个通道的ad值,每个通道的ad值对应数组中的相应位置,下一次扫描的值会覆盖上一次存储的值。而我们只需要做的就是对数组中相应的位置进行处理就代表了对相应通道的数据处理。

我们将采集的ad电压值通过屏幕进行显示。

uint8_t adcstr1[5];
uint8_t adcstr2[5];

 将所需的对象定义好后,就启动ADC和DMA;

在while{}循环体前面添加

	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	HAL_ADC_Start_DMA(&hadc2,(uint32_t *)adc,2); 

 注意:HAL_ADC_Start_DMA()中,最后一个值要填与前面设置的数组内存的值一致,否则会导致每个通道储存的位置错位。

相应的 ,如果需要采集三个通道的值,容器就改为3,这里也改为3.

在while{}中添加处理代码:

		sprintf((char*)adcstr1,"ADC1:%.1f",adc[0]*3.3/4095);	
		 LCD_DisplayStringLine(Line1,(uint8_t *)adcstr1);		 

		sprintf((char*)adcstr2,"ADC2:%.1f",adc[1]*3.3/4095);	
		 LCD_DisplayStringLine(Line2,(uint8_t *)adcstr2);			
		

 这个很简单,就不再赘述。编译无误,烧录程序。

四、观察现象

B站链接:蓝桥杯 新版嵌入式-两路ad采集效果演示_哔哩哔哩_bilibili

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我Bu秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值