OpenEdv-开源电子网

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

DHT11输出全为低电平

[复制链接]

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
发表于 2016-12-22 15:42:17 | 显示全部楼层 |阅读模式
1金钱
我用mini板的PA0口作DHT11数据线,DHT11相关程序全部照抄的战舰DHT11例程,然后用PRINTF将结果输出到串口用串口调试助手查看。结果全为0,然后我用DHT11_Read_Bit()函数查看,发现接收到的每一个bit都是0,对DHT11呼气,所有的bit都为1  .修改判断0或1的delay函数,发现几乎所有Bit都在21us样子的时候变为0,请问一下这个是什么原因啊? 跪求大神帮我解答一下嘛

[mw_shl_code=c,true]#include "stm32f10x.h"
#include "delay.h"
#include "DHT11.h"
#include "led.h"
#include "usart.h"

u8 t=0;
u8 temp,humi;
int main(void)
{
        u8 i;
        //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);
        delay_init();
        DHT11_Init();
        led_init();
        //temp=1;
        while(DHT11_Init())
        {
                printf("ERROR\n");
        }
        while(1)
        {
               
//                DHT11_IO_OUT();
//                DHT11_DQ_OUT=1;
//                DHT11_Reset();
//                DHT11_Check();
//                //printf("on");
                //printf("%d",GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
                //if(t%10==0)
               
                        //DHT11_Read_Data(&temp,&humi);
                        DHT11_Reset();
                        if(DHT11_Check()==0)
                        {
                        DHT11_Read_Bit();
                                printf("R%d  ",DHT11_Read_Bit());
                        //        printf("%d ",DHT11_Read_Bit());
                        //delay_ms(20);
                        }
                        //printf("%d",DHT11_Read_Data(&temp,&humi));
                        //t=0;
               
//                delay_ms(20);
               
        }
}[/mw_shl_code]

如图

如图


最佳答案

查看完整内容[请看2#楼]

你一位一位读取出来的是位的数据,%d输出的是8位数据,这里的数据本身就不匹配输出肯定也不对
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-7-2
在线时间
20 小时
发表于 2016-12-22 15:42:18 | 显示全部楼层
你一位一位读取出来的是位的数据,%d输出的是8位数据,这里的数据本身就不匹配输出肯定也不对
疾风追电,满月夜郎啸苍天,我辈少年狂!!
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-22 15:50:26 | 显示全部楼层
:'(:'(:'(:'(:'(
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-22 16:22:53 | 显示全部楼层
跪求大神帮帮我嘛~~~~~~~要疯了~~~~~~~~~~~~~~~~检查了半天~~~~~~~~
回复

使用道具 举报

10

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-7-2
在线时间
20 小时
发表于 2016-12-22 17:15:03 | 显示全部楼层
你试一下直接把IO口置1看是不是高电平,如果可以置1那可能是你DHT11的问题,不可以就加个上拉看看
疾风追电,满月夜郎啸苍天,我辈少年狂!!
回复

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2016-12-22 17:48:53 | 显示全部楼层
先把DATA口加上拉电阻,然后根据楼上的方法判断是否能输出高低电平状态,是否能够读取高低电平状态
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-23 09:05:20 | 显示全部楼层
羽落 发表于 2016-12-22 17:15
你试一下直接把IO口置1看是不是高电平,如果可以置1那可能是你DHT11的问题,不可以就加个上拉看看

请问一下为什么要加上拉电阻呢?后面我用READ_DATA函数就直接读出正确数字了,但是我不懂的是为什么像这样输出每个bit位反而没结果呢?但是明明都正确的读数了
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-23 09:06:47 | 显示全部楼层
zhp 发表于 2016-12-22 17:48
先把DATA口加上拉电阻,然后根据楼上的方法判断是否能输出高低电平状态,是否能够读取高低电平状态

但是我直接用READ_DATA函数就正确的读取了温度和湿度的具体数字呢?为什么读每一个位会出问题呢?
回复

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2016-12-23 09:16:22 | 显示全部楼层
参考我个性签名档的博客地址,《CC2541之DHT11温湿度采集》。
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2016-12-23 10:09:44 | 显示全部楼层
oywjex 发表于 2016-12-23 09:06
但是我直接用READ_DATA函数就正确的读取了温度和湿度的具体数字呢?为什么读每一个位会出问题呢?

上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!上拉是对器件注入电流,下拉是输出电流。

数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-23 11:12:09 | 显示全部楼层
feilusia 发表于 2016-12-23 09:16
参考我个性签名档的博客地址,《CC2541之DHT11温湿度采集》。

你好,我后来是做出来了,但是我想每读一位数据就输出出来如我的程序那样,请问一下为什么输出的全是0或者全是1呢?
回复

使用道具 举报

14

主题

55

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-12-3
在线时间
21 小时
 楼主| 发表于 2016-12-23 11:13:14 | 显示全部楼层
zhp 发表于 2016-12-23 10:09
上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!上拉是对器件注入电流 ...

我知道了,我现在特别不懂的是 为什么我读整个数据都是对的,但是我想输出每一位数据却不正确呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 13:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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