一、HAL库ADC使用
1.基础认识
ADC在数字模拟电路中有过短暂的了解,模数转换,即将模拟量转换为数字量
- ADC的工作均为非阻塞模式
(后续补充)
二、红外模块简介
1.距离测量范围:10~80厘米 2.模拟量输出 3.电源电压:4.5~5.5 V
三、CubeMX配置
1.RCC
2.SYS
3.ADC
4.串口
四、代码
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"
void DistanceSensor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStructure.Pin = GPIO_PIN_1;
GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = GPIO_NOPULL ;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
MX_ADC1_Init();
}
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);
HAL_Delay(5);
}
temp_val/=Adc1IN1Distance_READ_TIMES;
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)
{
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);
}
完整工程详见本人资源
|