《GP2Y1014AU粉尘传感器模块 PM2.5灰尘传感器.docx》由会员分享,可在线阅读,更多相关《GP2Y1014AU粉尘传感器模块 PM2.5灰尘传感器.docx(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.c文件include PM25.h#include sys.hinclude usart.httinclude delay.h#include stm32fl0x_adc.httinclude stm32flOx_gpio.h#include stm32fl0x_rcc.hvoid Adc_lnit(void) (ADC_lnitTypeDef ADCJnitStructure;GPIOJnitTypeDef GPIOJnitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB | RCC_APB
2、2Periph_ADCl , ENABLE);/?ADC1?RCC_ADCCLKConfig(RCC_PCLK2_Div6); 设置 ADC 分频因子 6 72M/6=12,ADC 最大时间 不能超过14M/PA1作为模拟通道输入引脚GPIO_lnitStructure.GPIO_Pin = GPIO_Pin_l;GPIO_lnitStructure.GPIO_Mode = GPIO_Mode_AIN;模拟输入引脚GPIO_lnit(GPIOA, &GPIO_lnitStructure);/PB0作为脉冲输出引脚GPIO_lnitStructure.GPIO_Pin = GPIO_Pin_0;
3、GPIO_lnitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_lnitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_lnit(GPIOB, &GPIO_lnitStructure);GP2Y_High;ADC_Delnit(ADCl); 复位ADC1,将外设ADC1的全部寄存器重设为缺省值ADC_lnitStructure.ADC_Mode = ADC_Mode_lndependent; /ADC 工作模式:ADC1 和 ADC2 工作在独立模式ADC_lnitStructure.ADC_ScanConvMod
4、e = DISABLE; 模数转换匚作在单通道模式ADC_lnitStructure.ADC_ContinuousConvMode = DISABLE; 模数转换工作在单次转换模 式ADC_lnitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; 转换由软件而 不是外部触发启动ADC_lnitStructure.ADC_DataAlign = ADC_DataAlign_Right; /ADC 数据右对齐ADC_lnitStructure.ADC_NbrOfChannel = 1; 顺序进行规则转换的 ADC 通道的数 HA
5、DC_lnit(ADCl, &ADC_lnitStructure); 根据 ADCJnitStruct 中指定的参数初始化外设ADCx的寄存器ADC_Cmd(ADCl, ENABLE); 使能指定的 ADC1ADC_ResetCalibration(ADCl);使能复位校准while(ADC_GetResetCalibratior)Status(ADCl); 等待复位校准结束ADC_StartCalibration(ADCl); 开启 AD 校准while(ADC_GetCalibrationStatus(ADCl); 等待校准结束/ ADC_SoftwareStartConvCmd(ADCl
6、, ENABLE);使能指定的 ADC1 的软件转换启动功 能)获得ADC值ch:通道值03ul6 Get_Adc(u8 ch)(设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADCl, ch, 1, ADC_SampleTime_239Cycles5 ); /ADCADC 通道, 采样时间为239.5周期ADC_SoftwareStartConvCmd(ADCl, ENABLE);使能指定的 ADC1 的软件转换启动功能while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC );等待转换结束return ADC
7、_GetConversionValue(ADCl);返回最近一次 ADC1 规则组的转换结果)float GetGP2Y(void)(u32 AD_PM;double pm;GP2Y_Low;delay_us(280);AD_PM = Get_Adc(ADC_Channel_l); /PAIdelay_us(40);GP2Y_High;delay_us(9680);pm = 0.17*AD_PM-0.1; 转换公式 /printf(%fn,pm);return pm;.h文件#ifndef_PM25_H_ttdefine _PM2S_H_include stm32flOx.httinclude sys.h#define GP2Y_High GPIO_SetBits(GPIOB,GPIO_Pin_(J);#define GP2Y_Low GPIO_ResetBits(GPIOB,GPIO_Pin_0);float GetGP2Y(void);void Adcjnit(void);ul6 Get_Adc(u8 ch);ul6 Get_GP2Y_Average(u8 times);ttendif