STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)

文章目录

  • 一、HAL库ADC使用
    • 1.基础认识
  • 二、红外模块简介
  • 三、CubeMX配置
    • 1.RCC
    • 2.SYS
    • 3.ADC
    • 4.串口
  • 四、代码


一、HAL库ADC使用

1.基础认识

ADC在数字模拟电路中有过短暂的了解,模数转换,即将模拟量转换为数字量

  1. ADC的工作均为非阻塞模式

(后续补充)

二、红外模块简介

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第1张图片

1.距离测量范围:10~80厘米
2.模拟量输出
3.电源电压:4.5~5.5 V

三、CubeMX配置

1.RCC

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第2张图片

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第3张图片

2.SYS

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第4张图片

3.ADC

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第5张图片

4.串口

STM32F103C8T6 红外测距模块测量距离(SHARP GP2Y0A21YK0F)使用CubeMx生成HAL库(ADC)_第6张图片

四、代码

sharp.h

#ifndef __SHARP2Y0A21_H
#define __SHARP2Y0A21_H	

#include "main.h"


#define Adc1IN11Distance_READ_TIMES	10		//定义红外传感器读取次数,以便取平均值
 
void DistanceSensor_Init(void); 				//初始化红外传感器
float DistanceSensor_Get_Val(void);				//读取红外传感器的值


#endif 


#include "sharp.h"
#include "adc.h"
#include "main.h"
#include "stdio.h"

//初始化ADC,不用修改
//这里我们仅以规则通道为例														   
		  
//初始化传感器,需要修改端口和引脚号,这里是c出口,c1引脚,ADC3的IN11
void DistanceSensor_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟
	
  //先初始化ADC1通道11 IO口
  GPIO_InitStructure.Pin = GPIO_PIN_1;//PA1
  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;//模拟输入
  GPIO_InitStructure.Pull = GPIO_NOPULL ;//不带上下拉
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  
	
 
	MX_ADC1_Init();//初始化ADC1
}
//PA1=IN1
float DistanceSensor_Get_Val(void)
{
	uint32_t temp_val=0;
	float distemp=0.0;
	uint8_t t;
	for(t=0;t<Adc1IN1Distance_READ_TIMES;t++)
	{
		temp_val+=HAL_ADC_GetValue(&hadc1);	//读取ADC值,通道1
		HAL_Delay(5);
	}
	temp_val/=Adc1IN1Distance_READ_TIMES;//得到平均值,这个是平均的ADC,
	printf("average_val=%d\r\n",temp_val);
	distemp=temp_val*3.3/4095;
	printf("voltage= %f\r\n",distemp);//电压值
	//电压对应距离
	distemp=(-13.2*distemp*distemp*distemp)+72.84*distemp*distemp-140*distemp+107.12;
  return distemp;

}

main.c

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		HAL_ADC_Start(&hadc1);
        adcx=HAL_ADC_GetValue(&hadc1);
		distance=DistanceSensor_Get_Val();
		printf("adcX=%d\r\n",adcx);
		printf("shuiwei=%f\r\n",distance);
		HAL_Delay(200);

  }

完整工程详见本人资源

你可能感兴趣的:(stm32,传感器,单片机)