• 大小: 24KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-08-08
  • 语言: 其他
  • 标签: stm32  

资源简介

GP2Y1010AU0F PM2.5 传感器 于STM32单片机的工程文件。

资源截图

代码片段和文件信息

 #include “adc.h“
 #include “delay.h“
   
   
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3

void  Adc_Init(void)

ADC_InitTypeDef ADC_InitStructure; 
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1  ENABLE );   //使能ADC1通道时钟
 

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12ADC最大时间不能超过14M

//PA1 作为模拟通道输入引脚                         
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA &GPIO_InitStructure);
  
//PB1 作为脉冲输出引脚   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
GPIO_Init(GPIOB &GPIO_InitStructure);
GP2Y_High;

ADC_DeInit(ADC1);  //复位ADC1将外设 ADC1 的全部寄存器重设为缺省值

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1 &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

  
ADC_Cmd(ADC1 ENABLE); //使能指定的ADC1

ADC_ResetCalibration(ADC1); //使能复位校准  
 
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

ADC_StartCalibration(ADC1);  //开启AD校准
 
while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束
 
// ADC_SoftwareStartConvCmd(ADC1 ENABLE); //使能指定的ADC1的软件转换启动功能



}   
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
   //设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1 ch 0 ADC_SampleTime_239Cycles5 ); //ADC1ADC通道采样时间为239.5周期        
  
ADC_SoftwareStartConvCmd(ADC1 ENABLE); //使能指定的ADC1的软件转换启动功能
 
while(!ADC_GetFlagStatus(ADC1 ADC_FLAG_EOC ));//等待转换结束

return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}

float GetGP2Y(void)
{
    u32 AD_PM;  
  double pm; 
    GP2Y_Low;
    delay_us(280);
    AD_PM = Get_Adc(ADC_Channel_0); //PA0
    delay_us(40);
    GP2Y_High;
    delay_us(9680);
    pm = 0.17*AD_PM-0.1; //转换公式
    printf(“%f\n“pm);
return pm;


u16 Get_GP2Y_Average(u8 times)
{
u32 pm_val=0;
u8 t;
for(t=0;t {
pm_val+=GetGP2Y();
delay_ms(5);
}
return pm_val/times;

































 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2870  2016-05-28 13:25  HARDWARE\ADC\adc.c

     文件        273  2016-05-28 12:59  HARDWARE\ADC\adc.h

     文件      35016  2016-03-07 04:44  HARDWARE\LCD\FONT.H

     文件      83047  2016-05-28 13:00  HARDWARE\LCD\lcd.c

     文件       8557  2016-05-28 13:00  HARDWARE\LCD\lcd.h

     文件        828  2016-05-28 12:59  HARDWARE\LED\led.c

     文件        172  2016-05-28 13:00  HARDWARE\LED\led.h

     目录          0  2019-04-29 23:02  HARDWARE\ADC

     目录          0  2019-04-29 23:02  HARDWARE\LCD

     目录          0  2019-04-29 23:02  HARDWARE\LED

     目录          0  2019-04-29 23:02  HARDWARE

----------- ---------  ---------- -----  ----

               130763                    11


评论

共有 条评论