OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2547|回复: 3

求助关于mini板使用DHT22的问题

[复制链接]

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-6-20
在线时间
30 小时
发表于 2016-12-16 16:47:00 | 显示全部楼层 |阅读模式
10金钱
最近要使用DHT22做一个小项目,也这个论坛找了很多关于DHT22的帖子,可是就是不成功,求各位大神请教一下。
这是我的程序:
void DHT11IOsetOUT()
{
        RCC->APB2ENR|=1<<2;
        GPIOC->CRL&=0XF0FFFFFF;
        GPIOC->CRL|=0X03000000;
//        GPIOA->ODR|=0X01;
}

void DHT11IOsetIN ()
{
        RCC->APB2ENR|=1<<2;
        GPIOC->CRL&=0XF0FFFFFF;
        GPIOC->CRL|=0X08000000;
//        GPIOA->IDR|=0X01;
}
u8 get ()
{
        u8 U8comdata=0;
        u8 m;
        for (m=0;m<8;m++)
        {
                flag=2;
                DHT11IOsetIN ();
                while ((!DIN)&&flag++);
                delay_us (20);
                U8temp=0;
                if (DIN) U8temp=1;
                flag=2;
                while (DIN&&flag++);
                if (flag==1) break;
                U8comdata=U8comdata<<1;
                U8comdata|=U8temp;
        }
//        DHT11IOsetOUT();
        return         U8comdata;
}

u8 Rdata (u8 *temp,u8 *wet)
{
        u8 RH_datatemp_H,RH_datatemp_L,T_datatemp_H,T_datatemp_L,checkdata,checktemp;
        u8 RH_data_H,RH_data_L,T_data_H,T_data_L;
        DHT11IOsetOUT();
        DOUT=0;
        delay_ms (18);
        DOUT=1;
        delay_us (30);
        DHT11IOsetIN ();
        if (!(DIN))
        {
                flag=2;
                while ((!DIN)&&flag++);
                flag=2;
                while (DIN&&flag++);
               
                RH_datatemp_H=get ();;
               
                RH_datatemp_L=get ();;
               
                T_datatemp_H=get ();;
               
                T_datatemp_L=get ();;
               
                checkdata=get ();;
                DHT11IOsetOUT();
                DOUT=1;
                checktemp=RH_datatemp_H+RH_datatemp_L+T_datatemp_H+T_datatemp_L;
                if (checktemp==checkdata)
                {
                        RH_data_H=RH_datatemp_H;
                        RH_data_L=RH_datatemp_L;
                        T_data_H=T_datatemp_H;
                        T_data_L=T_datatemp_L;
                        *temp=T_data_H;
                        *wet=RH_data_H;
                        return 1;
                }               
        }
        return 0;
}

        while (1)
        {
                        Rdata(&temperature,&wetness);           //DHT11读取数据
                        POINT_COLOR=BLACK;
                        LCD_Show2Num (30,50,temperature,2,16,0);
                        LCD_Show2Num (30,70,wetness,2,16,0);
                        delay_ms(2000);               
        }

按照DHT22的时序来说,这个程序没有问题啊,可是为什么不行呢?求大神请教。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-12-17 10:32:49 | 显示全部楼层
看下是不是延时的问题!!!
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-6-20
在线时间
30 小时
 楼主| 发表于 2016-12-17 22:13:47 | 显示全部楼层
FantaSy_ 发表于 2016-12-17 10:32
看下是不是延时的问题!!!

参照他们的帖子给的延时也不行啊,不知道他们的帖子是怎么测试成功的
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-7-1
在线时间
31 小时
发表于 2017-2-24 14:31:35 | 显示全部楼层
多半是检验程序的问题,你把if检验删掉再试试
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 16:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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