標題: 為什么我的DHT11一直讀出來是0 [打印本頁]

作者: jjko    時間: 2023-6-7 23:38
標題: 為什么我的DHT11一直讀出來是0
void DHT11_int(void)
{        

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //使能GPIOE時鐘
        
                DHT11_output() ;


}
void DHT11_input(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
        
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PA0 通道0
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//模擬輸入
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;//不帶上下拉
    GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化  

}
void DHT11_output(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
        
                GPIO_SetBits(GPIOE, GPIO_Pin_6);

              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PA0 通道0
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//模擬輸入
                GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;
                GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;//不帶上下拉
           GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化  
        
}
uint8_t DHT11_read_bitdat(void)
{
        uint8_t i;  
        uint8_t dat;
        for(i=0;i<8;i++)
        {
                        dat<<=1;
                        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6))
                                
                        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6)==0)
                                
                        if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6))
                        {
                                delay_us(30);               
                        }
                        if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6))
                                dat|=1;
        }
                return dat;
}

uint8_t DHT11_read(uint8_t *humi,uint8_t *temp)
{
                        int retry=0;
                        uint8_t i;
                        uint8_t buf[5];
                        GPIO_ResetBits(GPIOE, GPIO_Pin_6);
                        delay_ms(30);
        
                        GPIO_SetBits(GPIOE, GPIO_Pin_6);
                        delay_us(40);
        
                        DHT11_input();
                        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6))
                {
                                delay_us(80);
                                retry++;
                                if(retry>10)
                                {
                                        GPIO_SetBits(GPIOC,GPIO_Pin_13);
                                                return 1;
                                }        
                }
                        retry=0;
                        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6)==0)
                {
                        delay_us(80);
                        retry++;
                        if(retry>10)
                         {
                        GPIO_SetBits(GPIOC,GPIO_Pin_13);
                        return 1;
                         }
                }
                for(i=0;i<5;i++)
                {
                        buf[ i]=DHT11_read_bitdat();
                }        
               
                DHT11_output();
               
                if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
                {        
                         *humi = buf[0];   
                         *temp = buf[2];     
                        
                                return 0;
               
                }               
        
                return 1;
}


作者: yzwzfyz    時間: 2023-6-8 08:17
看IC手冊,再寫程序。
作者: man1234567    時間: 2023-6-12 14:43
你認為呢 ?
首先提出自己的觀點供討論,而不是責問大家。
作者: Yanko    時間: 2023-6-12 17:17
有可能地址錯了
作者: 2316185885    時間: 2023-6-12 19:46
代碼不全啊




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1