OpenEdv-开源电子网

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

关于在MINI板上运行DHT11 出现的错误不解运行的时候读取的温湿度始终是24

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-1-17 13:08:30 | 显示全部楼层 |阅读模式

DHT11电源接的3V现在运行的时候读取的温湿度始终是24
 我是用的PC0

//??DHT11
void DHT11_Rst(void)   
{                
/**/
 DHT11_IO_OUT();  //SET OUTPUT
  DHT11_DQ_OUT=0;  //??DQ
  delay_ms(18);     //????18ms
  DHT11_DQ_OUT=1;  //DQ=1
 delay_us(40);      //????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(100);
 }; 
 printf("1 RETRY %d\r\n",retry);
 if(retry>=100){printf("1 CHECK FAILED %d\r\n",retry);return 1;}
 else retry=0;
  while (!DHT11_DQ_IN&&retry<100)//DHT11????????40~80us
 {
  retry++;
  delay_us(1);
 };
 if(retry>=100){printf("2 CHECK FAILED %d\r\n",retry);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)
 {printf("Read DHT11\r\n"); 
  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)

  GPIO_InitTypeDef  GPIO_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //??PG????
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;     //PG11????
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //????
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);     //???IO?
  GPIO_SetBits(GPIOC,GPIO_Pin_0);       //PG11 ???
      
 DHT11_Rst();  //??DHT11
 return DHT11_Check();//??DHT11???
}

-------------------   

//IO
#define DHT11_IO_IN()  {GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=8<<0;}
#define DHT11_IO_OUT() {GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=3<<0;}
////IO??×÷????             
#define DHT11_DQ_OUT PCout(0) //PCn
#define DHT11_DQ_IN  PCin(0)  // Cn
                                    

------------------------------------

在DHT11_Check()函数里 总是在第一个WHILE里出错 ,如果通过CHECK计数变量总为0


 

 

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-17 13:38:25 | 显示全部楼层
回复【楼主位】wangwww2014:
---------------------------------
没用过,我一个同事说这个家伙不怎么好,呵呵,帮顶
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-1-17
在线时间
9 小时
发表于 2014-1-18 18:24:32 | 显示全部楼层
没有朋友了解么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-18 18:46:42 | 显示全部楼层
看代码配置没错,检查延时函数,是不是有问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 13:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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