码迷,mamicode.com
首页 > 其他好文 > 详细

STM32平台下夏普GP2Y1010AU0F灰尘传感器使用及源码

时间:2015-03-18 07:52:20      阅读:919      评论:0      收藏:0      [点我收藏+]

标签:

GP2Y1010AU0F传感器接线方式如下:

技术分享

技术分享

使用PA0接收模拟信号,PB1发送脉冲信号。

代码如下:


GP2Y.c

#include "GP2Y.h"
#include "system.h"
	u16 AD_PM;
void GP2Yinit(void)
{ 
//定义变量
    ADC_InitTypeDef A_InitStructure;
    GPIO_InitTypeDef G_InitStructure;	//PA0
    GPIO_InitTypeDef Gpio_InitStructure;//PB1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC2通道时钟
     
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
 
    //PA0 作为模拟通道输入引脚                        
    G_InitStructure.GPIO_Pin = GPIO_Pin_0;
    G_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
    GPIO_Init(GPIOA, &G_InitStructure);
   
    ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
   
    A_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
    A_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
    A_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
    A_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
    A_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
    A_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
    ADC_Init(ADC1, &A_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器  
   
   
    ADC_Cmd(ADC1, ENABLE);         //使能指定的ADC1
    ADC_ResetCalibration(ADC1); //使能复位校准 
    while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
    ADC_StartCalibration(ADC1);  //开启AD校准
    while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束
    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;
}
void GetGP2Y(void)
{
	float 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);	
}

GP2Y.h

  #ifndef __GP2Y_H
#define __GP2Y_H
#include "stm32f10x_lib.h"
#define GP2Y_High GPIO_SetBits(GPIOB,GPIO_Pin_1);
#define GP2Y_Low  GPIO_ResetBits(GPIOB,GPIO_Pin_1);

void GP2Yinit(void);
void GetGP2Y(void);
#endif

PB1输出波形

技术分享

获取到灰尘数值。

技术分享


STM32平台下夏普GP2Y1010AU0F灰尘传感器使用及源码

标签:

原文地址:http://my.oschina.net/sencha/blog/388112

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!