在用DHT11湿度传感器获取不了DHT11响应

2019-08-20 18:52发布

#define DHT11_DQ          GPIO_Pin_0
#define GPIO_DHT11 GPIOA

#define DHT11_DQ_H()        GPIO_SetBits(GPIO_PLL,LC72131_CE)                          
#define DHT11_DQ_L()        GPIO_ResetBits(GPIO_PLL,LC72131_CE)

#define dht11_DataOut()        {GPIOA->CRL &=0xfffffff0;GPIOA->CRL |=0x00000003;}       
#define dht11_DataIn()  {GPIOA->CRL &=0xfffffff0;GPIOA->CRL |=0x00000004;}         
#define DHT11_Read_DQ()        GPIO_ReadInputDataBit(GPIO_DHT11,DHT11_DQ)

/*
*读取DHT11回响信号
*1器件没有响应,请检查DHT11是否正确
*0器件有响应,可以正常操作
*/
u8 Read_Dht11_Ack(void)
{
        u8 counter = 0;
        dht11_DataIn();
        while((DHT11_Read_DQ()==0)&&counter<=100)
        {
                counter++;
                delay_us(1);
        }
        //DHT11>100,没有响应
        if(counter>=100)        return 1;
        else         counter = 0;
        while((DHT11_Read_DQ()==1)&&counter<=100)
        {
                counter++;
                delay_us(1);
        }
        if(counter>=100)        return 1;
        else        counter = 0;
                return 0;
}
出来数据一直是0,
下面是我用原子的:出来数据正确
#define        DHT11_DQ_IN  PAin(0)  //数据端口        PA0
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)           
{   
        u8 retry=0;
        DHT11_IO_IN();//SET INPUT         
    while ((DHT11_DQ_IN==0)&&retry<100)//DHT11会拉低40~80us
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=100)return 1;
        else retry=0;
    while ((DHT11_DQ_IN==1)&&retry<100)//DHT11拉低后会再次拉高40~80us
        {
                retry++;
                delay_us(1);
        };
        if(retry>=100)return 1;            
        return 0;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。