找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2727|回复: 6
收起左侧

关于STM32F103ZET6系统板上连接DHT11一直卡在初始化监测不到DHT11读不出数据的问题

[复制链接]
ID:597761 发表于 2022-4-7 11:00 | 显示全部楼层 |阅读模式
本帖最后由 899 于 2022-4-7 11:01 编辑

请各位大佬帮忙看看问题出在哪里,一直卡在dht11的初始化,就是主函数main.c的
while(DHT11_Init()) {
printf("\r\n DHT11 init error");
delay_ms(50);
} dht11.jpg


开发板为 STM32F103ZET6
传感器 DHT11 3线
接线正确 电源线接5v 3.3v都尝试过 数据线接的为PG11

使用的例程为正点原子的DHT11代码  代码如下

dht11.c代码为:
  1. #include "dht11.h"
  2. #include "delay.h"
复制代码
dht11.h
  1. #ifndef __DHT11_H
  2. #define __DHT11_H
  3. #include "sys.h"
  4. #define DHT11_IO_IN()  {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
  5. #define DHT11_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}
  6. #define        DHT11_DQ_OUT PGout(11)
  7. #define        DHT11_DQ_IN  PGin(11)

  8. u8 DHT11_Init(void);//3õê¼»ˉDHT11
  9. u8 DHT11_Read_Data(u8 *temp,u8 *humi);
  10. u8 DHT11_Read_Byte(void);
  11. u8 DHT11_Read_Bit(void);
  12. u8 DHT11_Check(void);
  13. void DHT11_Rst(void);
  14. #endif
复制代码

main.c
  1. #include"stm32f10x.h"
  2. #include "delay.h"
  3. #include "usart.h"        
  4. #include "led.h"
  5. #include "dht11.h"
  6. int main(void)
  7. {
  8.         u8 temperature,humidity;
  9.         delay_init();
  10.         uart_init(115200);
  11.         LED_Init();
  12.         printf("\r\n system init");
  13.         
  14.         while(DHT11_Init()) {
  15.                 printf("\r\n DHT11 init error");
  16.                 delay_ms(50);
  17.         }
  18.         printf("DHT11 init\n");
  19.         
  20.         while(1) {
  21.                 if(!DHT11_Read_Data(&temperature,&humidity)) {
  22.                         printf("\r\n t: %d ,h: %d",temperature,humidity);
  23.                 }else printf("READ ERROR");
  24.                 LED0=!LED0;
  25.                 delay_ms(300);
  26.         }
  27. }
复制代码





回复

使用道具 举报

ID:1083538 发表于 2023-6-12 13:46 | 显示全部楼层
你换一个dht11试试
回复

使用道具 举报

ID:463392 发表于 2023-6-11 16:32 | 显示全部楼层

解决了吗?
回复

使用道具 举报

ID:329625 发表于 2022-6-8 19:55 | 显示全部楼层
你可以检查一下是不是模块的问题,一般dht11的程序是通用的
回复

使用道具 举报

ID:950943 发表于 2022-6-7 20:53 | 显示全部楼层
同样的问题
回复

使用道具 举报

ID:732794 发表于 2022-4-7 20:04 | 显示全部楼层
驱动DHT11的IO配置是不是有问题?一般是开漏吧?然后这个脚再加个4.7K上拉电阻
回复

使用道具 举报

ID:597761 发表于 2022-4-7 11:03 | 显示全部楼层
dht11.c代码被吞,如下
  1. void DHT11_Rst(void)          
  2. {                 
  3.         DHT11_IO_OUT();         //SET OUTPUT
  4.     DHT11_DQ_OUT=0;         //à-μíDQ
  5.     delay_ms(20);            //à-μíÖáéù18ms
  6.     DHT11_DQ_OUT=1;         //DQ=1
  7.         delay_us(30);             //Ö÷»úà-¸ß20~40us
  8. }

  9. u8 DHT11_Check(void)           
  10. {   
  11.         u8 retry=0;
  12.         DHT11_IO_IN();//SET INPUT         
  13.     while (!DHT11_DQ_IN&&retry<100)//DHT11»áà-μí40~80us
  14.         {
  15.                 retry++;
  16.                 delay_us(1);
  17.         };         
  18.         if(retry>=100)return 1;
  19.         else retry=0;
  20.     while (DHT11_DQ_IN&&retry<100)//DHT11à-μíoó»áÔù′Îà-¸ß40~80us
  21.         {
  22.                 retry++;
  23.                 delay_us(1);
  24.         };
  25.         if(retry>=100)return 1;            
  26.         return 0;
  27. }

  28. u8 DHT11_Read_Bit(void)                          
  29. {
  30.         u8 retry=0;
  31.         while(DHT11_DQ_IN&&retry<100)//μè′y±äÎaμíμçƽ
  32.         {
  33.                 retry++;
  34.                 delay_us(1);
  35.         }
  36.         retry=0;
  37.         while(!DHT11_DQ_IN&&retry<100)//μè′y±ä¸ßμçƽ
  38.         {
  39.                 retry++;
  40.                 delay_us(1);
  41.         }
  42.         delay_us(40);//μè′y40us
  43.         if(DHT11_DQ_IN)return 1;
  44.         else return 0;                  
  45. }

  46. u8 DHT11_Read_Byte(void)   
  47. {        
  48.     u8 i,dat;
  49.     dat=0;
  50.         for (i=0;i<8;i++)
  51.         {
  52.                    dat<<=1;
  53.             dat|=DHT11_Read_Bit();
  54.     }                                                    
  55.     return dat;
  56. }

  57. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  58. {        
  59.         u8 buf[5];
  60.         u8 i;
  61.         DHT11_Rst();
  62.         if(DHT11_Check()==0)
  63.         {
  64.                 for(i=0;i<5;i++)//¶áè¡40λêy¾Y
  65.                 {
  66.                         buf[i]=DHT11_Read_Byte();
  67.                 }
  68.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  69.                 {
  70.                         *humi=buf[0];
  71.                         *temp=buf[2];
  72.                 }
  73.         } else return 1;
  74.         return 0;   
  75. }
  76.          
  77. u8 DHT11_Init(void)
  78. {         
  79.         GPIO_InitTypeDef  GPIO_InitStructure;
  80.        
  81.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);         //ê1ÄüPG¶Ë¿úê±Öó
  82.        
  83.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                                 //PG11¶Ë¿úÅäÖÃ
  84.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //íÆíìêä3ö
  85.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  86.         GPIO_Init(GPIOG, &GPIO_InitStructure);                                 //3õê¼»ˉIO¿ú
  87.         GPIO_SetBits(GPIOG,GPIO_Pin_11);                                                 //PG11 êä3ö¸ß
  88.                             
  89.         DHT11_Rst();  //¸′λDHT11
  90.         return DHT11_Check();//μè′yDHT11μÄ»Øó|
  91. }
复制代码

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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