標(biāo)題: 怎么解決STM32103C8T6連接DHT11傳感器中,代碼的檢測(cè)模塊一直返回1這個(gè)問題 [打印本頁]

作者: 鄭偉雄    時(shí)間: 2023-6-11 16:46
標(biāo)題: 怎么解決STM32103C8T6連接DHT11傳感器中,代碼的檢測(cè)模塊一直返回1這個(gè)問題
怎么解決STM32103C8T6連接DHT11傳感器中,代碼的檢測(cè)模塊一直返回1這個(gè)問題

作者: crazymotor    時(shí)間: 2023-6-11 18:03
這問題聽著怎么都不通順  新手嗎  俺也一樣    視頻有很多  搜搜  一步一步跟著做
作者: qxqy080602    時(shí)間: 2023-6-11 22:06
首先你檢查下代碼的問題 ,如果代碼你確定沒問題在懷疑外設(shè)
作者: 你好ya1214    時(shí)間: 2023-6-12 13:43
#include "dht11.h"

static GPIO_InitTypeDef  GPIO_InitStructure;
void dht11_pin_mode(GPIOMode_TypeDef pin_mode)
{
        if(pin_mode == GPIO_Mode_Out_PP)
        {
                /* 配置PG9為輸出模式,讓這根引腳具有輸出高低電平的功能 */
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                                //第15號(hào)引腳
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                        //輸出模式
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //引腳的速度最大為100MHz
        }
        else
        {
                /* 配置PG9為輸入模式 */
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                                //第15號(hào)引腳
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                        //輸入模式
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //引腳的速度最大為100MHz
        }
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
}

//dht11初始化函數(shù)
void dht11_init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//關(guān)閉jtag,使能SWD,可以用SWD模式調(diào)試
        dht11_pin_mode(GPIO_Mode_Out_PP);
        PAout(15)=1;
}

//dht11開始信號(hào)發(fā)送函數(shù)
int32_t dht11_start(void)
{
        uint32_t t=0;
        dht11_pin_mode(GPIO_Mode_Out_PP);
        PAout(15)=0;
        delay_ms(18);
        PAout(15)=1;       
        delay_us(30);
        dht11_pin_mode(GPIO_Mode_IPD);
        t=0;
        while(PAin(15))
        {
                delay_us(1);
                t++;
                if(t>1000)
                        return -1;
        }
        t=0;
        while(PAin(15)==0)
        {
                delay_us(1);
                t++;
                if(t>150)
                        return -2;
        }       
        t=0;
        while(PAin(15))
        {
                delay_us(1);
                t++;       
                if(t>150)
                        return -3;
        }                       
        return 0;
}

//dht11讀取數(shù)據(jù)函數(shù)
uint8_t dht11_read_byte(void)
{
        uint32_t i=0;
        uint8_t d=0;
        for(i=0; i<8; i++)
        {
                while(PAin(15)==0);
                delay_us(40);
                if(PAin(15))
                {
                        d|=1<<(7-i);
                        while(PAin(15));
                }
        }
        return d;
}

//讀取dht11數(shù)據(jù)保存在pbuf中
int32_t dht11_read_data(uint8_t *pbuf)
{
        int32_t rt=-1;
        uint32_t i=0;
        uint8_t check_sum=0;
        rt = dht11_start();
        if(rt < 0)
                return rt;

        for(i=0 ; i<5; i++)
        {
                pbuf[i]=dht11_read_byte();
        }
        check_sum = pbuf[0]+pbuf[1]+pbuf[2]+pbuf[3];
        if(check_sum != pbuf[4])
                return -4;
        delay_us(100);
        return 0;
}




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