久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5857|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

仿真用stm32f1讀取dht11數(shù)據(jù),一直監(jiān)測不到dht11是怎么回事啊?求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
問題如標(biāo)題,代碼編譯,仿真運(yùn)行都沒有問題,LED燈一直閃爍表示代碼一直在運(yùn)行

請大佬們解惑萬分感謝


在proteus仿真圖如下


dht11代碼:
  1. #include "dht11.h"
  2. #include "delay.h"

  3.       
  4. //復(fù)位DHT11
  5. void DHT11_Rst(void)           
  6. {                 
  7.         DHT11_IO_OUT();         //SET OUTPUT
  8.     DHT11_DQ_OUT=0;         //拉低DQ
  9.     delay_ms(20);            //拉低至少18ms
  10.     DHT11_DQ_OUT=1;         //DQ=1
  11.         delay_us(30);             //主機(jī)拉高20~40us
  12. }
  13. //等待DHT11的回應(yīng)
  14. //返回1:未檢測到DHT11的存在
  15. //返回0:存在
  16. u8 DHT11_Check(void)            
  17. {   
  18.         u8 retry=0;
  19.         DHT11_IO_IN();//SET INPUT         
  20.     while (DHT11_DQ_IN&&retry<100)//DHT11會拉低40~80us
  21.         {
  22.                 retry++;
  23.                 delay_us(1);
  24.         };         
  25.         if(retry>=100)return 1;
  26.         else retry=0;
  27.     while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后會再次拉高40~80us
  28.         {
  29.                 retry++;
  30.                 delay_us(1);
  31.         };
  32.         if(retry>=100)return 1;            
  33.         return 0;
  34. }
  35. //從DHT11讀取一個位
  36. //返回值:1/0
  37. u8 DHT11_Read_Bit(void)                          
  38. {
  39.          u8 retry=0;
  40.         while(DHT11_DQ_IN&&retry<100)//等待變?yōu)榈碗娖?br />
  41.         {
  42.                 retry++;
  43.                 delay_us(1);
  44.         }
  45.         retry=0;
  46.         while(!DHT11_DQ_IN&&retry<100)//等待變高電平
  47.         {
  48.                 retry++;
  49.                 delay_us(1);
  50.         }
  51.         delay_us(40);//等待40us
  52.         if(DHT11_DQ_IN)return 1;
  53.         else return 0;                  
  54. }
  55. //從DHT11讀取一個字節(jié)
  56. //返回值:讀到的數(shù)據(jù)
  57. u8 DHT11_Read_Byte(void)   
  58. {        
  59.     u8 i,dat;
  60.     dat=0;
  61.         for (i=0;i<8;i++)
  62.         {
  63.                    dat<<=1;
  64.             dat|=DHT11_Read_Bit();
  65.     }                                                   
  66.     return dat;
  67. }
  68. //從DHT11讀取一次數(shù)據(jù)
  69. //temp:溫度值(范圍:0~50°)
  70. //humi:濕度值(范圍:20%~90%)
  71. //返回值:0,正常;1,讀取失敗
  72. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  73. {        
  74.          u8 buf[5];
  75.         u8 i;
  76.         DHT11_Rst();
  77.         if(DHT11_Check()==0)
  78.         {
  79.                 for(i=0;i<5;i++)//讀取40位數(shù)據(jù)
  80.                 {
  81.                         buf[i]=DHT11_Read_Byte();
  82.                 }
  83.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  84.                 {
  85.                         *humi=buf[0];
  86.                         *temp=buf[2];
  87.                 }
  88.         }else return 1;
  89.         return 0;            
  90. }
  91. //初始化DHT11的IO口 DQ 同時檢測DHT11的存在
  92. //返回1:不存在
  93. //返回0:存在            
  94. <blockquote>u8 DHT11_Init(void)
復(fù)制代碼
主函數(shù)代碼放在回復(fù)內(nèi)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:597761 發(fā)表于 2022-3-31 14:42 | 只看該作者
主函數(shù)代碼
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "oled.h"
  4. #include "led.h"
  5. #include "dht11.h"

  6. int main(void) {
  7.   
  8.         u8 t=0;                            
  9.         u8 temperature;              
  10.         u8 humidity;  
  11.        
  12.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  13.        
  14.         delay_init();
  15.         LED_Init();
  16.        
  17.         OLED_Init();
  18.         OLED_ShowString(0,0,"OLED INIT..",12);
  19.        
  20.         if(DHT11_Init())        //DHT113õê¼»ˉ       
  21.         {
  22.                 OLED_ShowString(0,12,"DHT11 ERROR",12);
  23.                 delay_ms(200);
  24.         }        else {
  25.                 OLED_ShowString(0,12,"DHT11 INIT..",12);
  26.                 delay_ms(200);
  27.         }
  28.         OLED_ShowString(0,24,"Run...",12);
  29.         OLED_Refresh_Gram();
  30.        
  31.         while(1) {
  32.                 if(t%10==0)               
  33.                 {
  34.                         if(!DHT11_Read_Data(&temperature,&humidity))               
  35.                         {
  36.                                 OLED_ShowChar(0,36,temperature,12,1);
  37.                                 OLED_ShowChar(0,48,humidity,12,1);           
  38.                         }        else {
  39.                                 OLED_ShowString(0,36,"READ DATE ERROR",12);
  40.                         }
  41.                         OLED_Refresh_Gram(); //¸üDÂÏÔê¾μ½OLEDÖD
  42.                        
  43.                 }
  44.                 delay_ms(10);
  45.                 t++;
  46.                 if(t==20)
  47.                 {
  48.                         t=0;
  49.                         LED0=!LED0;
  50.                 }
  51.         };
  52. }
復(fù)制代碼
回復(fù)

使用道具 舉報

板凳
ID:161164 發(fā)表于 2022-3-31 17:06 | 只看該作者
主函數(shù)第21行
運(yùn)行DHT11_Init()之前要先運(yùn)行DHT11_Rst()
單獨(dú)運(yùn)行DHT11_Init()會永遠(yuǎn)超時返回1
回復(fù)

使用道具 舉報

地板
ID:597761 發(fā)表于 2022-3-31 21:03 | 只看該作者
本帖最后由 899 于 2022-3-31 21:05 編輯
lkc8210 發(fā)表于 2022-3-31 17:06
主函數(shù)第21行
運(yùn)行DHT11_Init()之前要先運(yùn)行DHT11_Rst()
單獨(dú)運(yùn)行DHT11_Init()會永遠(yuǎn)超時返回1

感謝回答,直接運(yùn)行DHT11_Rst()串口沒有初始化,時鐘沒打開會報錯,問題好像是使用的系統(tǒng)滴答systick時鐘,仿真不能達(dá)到這個頻率的問題,用自寫的粗略延時可以接受到數(shù)據(jù)
但是接受到的數(shù)據(jù)與dht11的數(shù)據(jù)不同是怎么回事,如dht11中濕度80,溫度30,但是讀出的數(shù)據(jù)為127,0,無論怎么變化都是這個結(jié)果,大佬,了解是哪里的問題嗎?


回復(fù)

使用道具 舉報

5#
ID:96682 發(fā)表于 2022-4-1 06:46 | 只看該作者
除了代碼,傳感器上拉電阻取值不恰當(dāng)也可能是個問題
回復(fù)

使用道具 舉報

6#
ID:161164 發(fā)表于 2022-4-1 09:49 | 只看該作者
899 發(fā)表于 2022-3-31 21:03
感謝回答,直接運(yùn)行DHT11_Rst()串口沒有初始化,時鐘沒打開會報錯,問題好像是使用的系統(tǒng)滴答systick時鐘 ...

OLED 顯示了"DHT11 INIT.."代表初化成功

你看看DHT11的總線0/1的表達(dá)時間線

再把DHT11的DATA腳接上示波器
對比一下波形
回復(fù)

使用道具 舉報

7#
ID:161164 發(fā)表于 2022-4-1 09:59 | 只看該作者
示波器再接一根Debug腳(如PC12)
在dht11代碼的53行之前加一句:
PC12 = !PC12;//Debug腳輸出取反,這是51的寫法,STM32的沒學(xué)過

在示波器看看Debug腳電平變化時STM在讀什么電平
回復(fù)

使用道具 舉報

8#
ID:597761 發(fā)表于 2022-4-1 14:01 | 只看該作者
lkc8210 發(fā)表于 2022-4-1 09:49
OLED 顯示了"DHT11 INIT.."代表初化成功

你看看DHT11的總線0/1的表達(dá)時間線

感謝,解決了
回復(fù)

使用道具 舉報

9#
ID:1043901 發(fā)表于 2022-9-5 15:41 | 只看該作者

怎樣解決的,我也是一直檢測不到設(shè)備,用了很多人的代碼都不行,也換了元件,應(yīng)該不是硬件問題
回復(fù)

使用道具 舉報

10#
ID:1053252 發(fā)表于 2024-4-20 22:06 | 只看該作者
大佬,怎么解決的,我的問題和你的一樣。
回復(fù)

使用道具 舉報

11#
ID:503018 發(fā)表于 2024-4-24 19:37 | 只看該作者

主函數(shù)第21行
運(yùn)行DHT11_Init()之前要先運(yùn)行DHT11_Rst()
單獨(dú)運(yùn)行DHT11_Init()會永遠(yuǎn)超時返回1
回復(fù)

使用道具 舉報

12#
ID:951660 發(fā)表于 2024-6-22 17:19 | 只看該作者

大佬,怎么解決的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜亚洲| 成年人免费在线视频 | 操夜夜| 有码在线 | 99re热精品视频 | 激情伊人网 | 亚洲国产成人精品女人久久久 | 亚洲一区二区在线播放 | 免费观看黄a一级视频 | 国产精品久久久久久久久久久久久 | 国产成人免费视频网站视频社区 | 国产一级久久久久 | 在线视频国产一区 | 中文字幕国产一区 | 国产精品久久久久久久久久久久久久 | 伊人网站视频 | 欧美在线高清 | 91在线看 | 成人亚洲精品 | 日韩欧美一二三区 | 日韩在线精品视频 | 成人a视频| 高清免费av | 久草在线在线精品观看 | 操人网 | 嫩草视频网| 欧美精品一区在线 | 一本一道久久a久久精品蜜桃 | 99久久久国产精品 | 久久精品久久久久久 | jizjizjiz中国护士18 | 成人免费在线观看视频 | 天堂资源 | 久久成人在线视频 | 国产不卡视频 | 国产黄色在线观看 | 免费观看日韩av | 欧美性猛交一区二区三区精品 | 中文字字幕一区二区三区四区五区 | 亚洲一区在线日韩在线深爱 | 色精品 |