找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 571|回复: 3
收起左侧

怎么解决STM32103C8T6连接DHT11传感器中,代码的检测模块一直返回1这个问题

[复制链接]
ID:463392 发表于 2023-6-11 16:46 | 显示全部楼层 |阅读模式
怎么解决STM32103C8T6连接DHT11传感器中,代码的检测模块一直返回1这个问题
回复

使用道具 举报

ID:208591 发表于 2023-6-11 18:03 | 显示全部楼层
这问题听着怎么都不通顺  新手吗  俺也一样    视频有很多  搜搜  一步一步跟着做
回复

使用道具 举报

ID:377919 发表于 2023-6-11 22:06 | 显示全部楼层
首先你检查下代码的问题 ,如果代码你确定没问题在怀疑外设
回复

使用道具 举报

ID:1083538 发表于 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号引脚
                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号引脚
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                        //输入模式
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //引脚的速度最大为100MHz
        }
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
}

//dht11初始化函数
void dht11_init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
        dht11_pin_mode(GPIO_Mode_Out_PP);
        PAout(15)=1;
}

//dht11开始信号发送函数
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读取数据函数
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数据保存在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;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表