OpenEdv-开源电子网

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

求助正点原子MINI板DTH11程序问题

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-5-14
在线时间
4 小时
发表于 2016-5-14 11:32:39 | 显示全部楼层 |阅读模式
1金钱
#include "dht11.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////         
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//DHT11数字温湿度传感器驱动代码           
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/12
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved                                                                          
//////////////////////////////////////////////////////////////////////////////////
   
//复位DHT11
void DHT11_Rst(void)           
{                 
        DHT11_IO_OUT();         //SET OUTPUT
    DHT11_DQ_OUT=0;         //拉低DQ
    delay_ms(20);            //拉低至少18ms
    DHT11_DQ_OUT=1;         //DQ=1
        delay_us(30);             //主机拉高20~40us
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)            
{   
        u8 retry=0;
        DHT11_IO_IN();//SET INPUT         
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=100)return 1;
        else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
        {
                retry++;
                delay_us(1);
        };
        if(retry>=100)return 1;            
        return 0;
}
//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)                          
{
         u8 retry=0;
        while(DHT11_DQ_IN&&retry<100)//等待变为低电平
        {
                retry++;
                delay_us(1);
        }
        retry=0;
        while(!DHT11_DQ_IN&&retry<100)//等待变高电平
        {
                retry++;
                delay_us(1);
        }
        delay_us(40);//等待40us
        if(DHT11_DQ_IN)return 1;
        else return 0;                  
}
//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)   
{        
    u8 i,dat;
    dat=0;
        for (i=0;i<8;i++)
        {
                   dat<<=1;
            dat|=DHT11_Read_Bit();
    }                                                   
    return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
{        
         u8 buf[5];
        u8 i;
        DHT11_Rst();
        if(DHT11_Check()==0)
        {
                for(i=0;i<5;i++)//读取40位数据
                {
                        buf=DHT11_Read_Byte();
                }
                if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
                {
                        *humi=buf[0];
                        *temp=buf[2];
                }
        }else return 1;
        return 0;            
}
//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在            
u8 DHT11_Init(void)
{
        RCC->APB2ENR|=1<<2;    //使能PORTA口时钟
        GPIOA->CRL&=0XFFFFFFF0;//PORTA.0 推挽输出
        GPIOA->CRL|=0X00000003;
        GPIOA->ODR|=1<<0;      //输出1                    
        DHT11_Rst();
        return DHT11_Check();
}


我把这程序用在MINI板上,IO口改成PA0,原来是PG11,但是 DHT11_Check那里就是过不了,求救啊!!!

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

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-5-14
在线时间
4 小时
 楼主| 发表于 2016-5-14 11:36:17 | 显示全部楼层
LCD那里一直显示检测不到DTH11
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-14 19:38:56 | 显示全部楼层
加一句
RCC->APB2ENR|=1<<0;        //AFIOEN 辅助IO时钟启用
看看
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-5-14
在线时间
4 小时
 楼主| 发表于 2016-5-14 20:32:11 | 显示全部楼层
zdfwyh 发表于 2016-5-14 19:38
加一句
RCC->APB2ENR|=1

哥们,不行啊
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-4-18
在线时间
5 小时
发表于 2016-7-6 18:53:13 | 显示全部楼层
这个问题解决了吗朋友  怎么解决的?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-7-6 21:11:53 | 显示全部楼层
.h里面的内容,改对了么
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-4-18
在线时间
5 小时
发表于 2016-7-7 10:38:55 | 显示全部楼层
正点原子 发表于 2016-7-6 21:11
.h里面的内容,改对了么

原子哥我也遇到这问题了,还有什么可能情况?
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-7-7 11:18:37 | 显示全部楼层
管脚配置没改对吧,.h里边,还有管脚初始化的地方都改了吗?
回复

使用道具 举报

2

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2016-5-26
在线时间
35 小时
发表于 2016-7-7 17:44:30 | 显示全部楼层
把你修改的管脚相关信息都核对一下,该改的都改过来
回复

使用道具 举报

2

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2016-11-19
在线时间
48 小时
发表于 2017-4-26 19:43:41 | 显示全部楼层
貌似也遇到了
回复

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
发表于 2021-6-13 23:20:56 | 显示全部楼层
正点原子 发表于 2016-7-6 21:11
.h里面的内容,改对了么

DHT11_Read_Bit(void) 这个函数是不是有问题,如果DHT11_DQ_IN一直为高,也是你能return 1,并未能检查到是否变为低电平?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 21:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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