蓝桥杯嵌入式(G4系列):ADC采样

前言:

        AD采样在蓝桥杯的考点也较为频繁,写下这篇博客用来记录自己的学习过程

原理图部分:

        

        两个可调电阻通过两个跳线帽分别连接到了PB15和PB12上,我们就需要对着两个引脚进行配置。

STM32Cubemx的配置:

        将两个引脚全部配置为ADC的输入引脚

         然后进入ADC1界面配置

         ADC2界面配置

 代码部分:

        这里大家要注意的是,我们新建文件的时候,不要跟系统原有的文件相重名。这里我将文件名定义为了MYADC.c和MYADC.h

#include "MYADC.h"

double getADC(ADC_HandleTypeDef *pin)
{
	unsigned int adc;
	HAL_ADC_Start(pin);        		//HAL库内置函数,开启ADC
	adc = HAL_ADC_GetValue(pin);    //HAL库内置函数,得到ADC的值
	return adc*3.3/4096; //测量的值均分4096份看在3.3(电源电压占的比例)因为是12位精度所以除4096
}

        我们在主函数中调用也非常简单

adc_value1 = getADC(&hadc1);
adc_value2 = getADC(&hadc2);
sprintf(text,"ADC1:%.2f,ADC2:%.2f",adc_value1,adc_value2);
LCD_DisplayStringLine(Line4,(uint8_t *)text);

        最终效果如下:

扫描二维码关注公众号,回复: 14594013 查看本文章

补发:

        ADC1双通道采集:

        博主在上述代码的基础上,额外使用PB14来读取MCP4017的电压值,这就涉及到ADC1的多个通道采集。这里我只是给大家展示一下ADC1的多通道采集,关于MCP4017设置电阻值的代码我就不再赘述,具体可以查看我这篇博客点击这里跳转

        STM32Cubemx配置:

        我们先将PB14配置为ADC采集通道

         在左侧的ADC采集通道配置这里,我们也将ADC_IN5进行如下设置

         

 

         这里给大家提醒一下,由于ADC多通道采集时,各个通道采集的数据使用同一个寄存器,所以上一个通道的计数值会被直接覆盖。在单通道采集的基础上,添加数组保存两个通道的数据,同时由于采集速率过快,读出数组保存的数据可能不按顺序,所以添加了每次读取后1ms的延迟。在打开多通道后,ADC自动进行连续采集,手动关闭后将无法再次打开,所以无需HAL_ADC_Stop();

   代码部分:

        这里要注意的是,因为我们设置了采样的优先级,所以我们使用数组来接收的时候,其实就算根据我们设定的优先级来决定的。我们上面把IN11设置为了高优先级,所以我们先接收到的就是ADC1_IN11读取的数据。

unsigned int adc_temp[2];
float R37_value;
float R38_value;
float PB14_value;


float getADC2(void) 
{
	unsigned int adc;
	HAL_ADC_Start(&hadc2);
	adc = HAL_ADC_GetValue(&hadc2);
	return adc*3.3/4096;
}


void getADC1_2(void)//RANK1是PB12		RANK2是PB14
{
	HAL_ADC_Start(&hadc1);
	for(int i=0;i<2;i++)
	{
		adc_temp[i] = HAL_ADC_GetValue(&hadc1);
		HAL_Delay(1);
	}
	PB14_value = adc_temp[0]*3.3/4096;
	R38_value = adc_temp[1]*3.3/4096;
}

最终效果展示:

猜你喜欢

转载自blog.csdn.net/weixin_51651698/article/details/129468237