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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7651|回復(fù): 10
收起左側(cè)

stm32+DHT11讀不出數(shù)據(jù),求助,這是仿真調(diào)試結(jié)果

[復(fù)制鏈接]
ID:524579 發(fā)表于 2020-4-15 10:36 | 顯示全部樓層 |閱讀模式
20黑幣
  1. #include "DHT11.h"

  2. void delay(int32_t us)
  3. {

  4. while(us--)
  5. {
  6.   
  7. }
  8. }
  9. void DHT11_IO_IN(void)//溫濕度模塊輸入函數(shù)
  10. {
  11. GPIO_InitTypeDef GPIO_InitStructure;

  12. GPIO_InitStructure.GPIO_Pin=IO_DHT11;
  13. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  14. GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
  15. }

  16. void DHT11_IO_OUT(void)//溫濕度模塊輸出函數(shù)
  17. {
  18. GPIO_InitTypeDef GPIO_InitStructure;

  19. GPIO_InitStructure.GPIO_Pin=IO_DHT11;
  20. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  21. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  22. GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
  23. }

  24. //復(fù)位DHT11
  25. void DHT11_Rst(void)   
  26. {                 
  27.     DHT11_IO_OUT(); //SET OUTPUT
  28.     DHT11_DQ_High ;
  29.     DHT11_DQ_Low; //DQ=0
  30.     delay(25000);    //拉低至少18ms
  31.     DHT11_DQ_High; //DQ=1
  32.     delay(55);     //主機拉高20~40us
  33. }

  34. //等待DHT11的回應(yīng)
  35. //返回1:未檢測到DHT11的存在
  36. //返回0:存在
  37. u8 DHT11_Check(void)   
  38. {   
  39. u8 retry=0;//定義臨時變量
  40. DHT11_IO_IN();    //SET INPUT
  41.     if (GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)//DHT11會拉低40~80us
  42.   {
  43.    return 0 ;
  44.   }else
  45.   {
  46.    while(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0 && (retry < 200))retry++ ;
  47.   }
  48.   delay(40) ;
  49.   delay(40) ;
  50.   return 1 ;

  51. }
  52. //從DHT11讀取一個位
  53. //返回值:1/0
  54. u8 DHT11_Read_Bit(void)  
  55. {
  56. u8 retry=0;
  57. while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)//等待變?yōu)榈碗娖?br />
  58. {
  59. retry++;
  60. delay(2);
  61. }
  62. retry=0;
  63. while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)//等待變高電平
  64. {
  65. retry++;
  66. delay(2);
  67. }
  68. delay(40);//等待40us
  69. if(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)
  70. return 1;
  71. else
  72. return 0;   
  73. }
  74. //從DHT11讀取一個字節(jié)
  75. //返回值:讀到的數(shù)據(jù)
  76. u8 DHT11_Read_Byte(void)   
  77. {        
  78.     u8 i,dat;
  79.     dat=0;
  80. for (i=0;i<8;i++)
  81. {
  82.    dat<<=1;
  83.     dat|=DHT11_Read_Bit();
  84.     }   
  85.     return dat;
  86. }

  87. //從DHT11讀取一次數(shù)據(jù)
  88. //temp:溫度值(范圍:0~50°)
  89. //humi:濕度值(范圍:20%~90%)
  90. //返回值:0,正常;1,讀取失敗
  91. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  92. {        
  93. u8 buf[5];
  94. u8 i,check;
  95. DHT11_Rst();
  96. if(DHT11_Check()==0)
  97. {
  98.     //check=DHT11_Check();
  99.    // LCD_ShowNum(12,0,check);
  100. for(i=0;i<5;i++)//讀取40位數(shù)據(jù)
  101. {
  102. buf[i]=DHT11_Read_Byte();
  103. }
  104. if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  105. {
  106. *humi=buf[0];
  107. *temp=buf[2];
  108. }
  109. }else return 1;
  110. return 0;   
  111. }
  112. //初始化DHT11的IO口 DQ 同時檢測DHT11的存在
  113. //返回1:不存在
  114. //返回0:存在     
  115. void DHT11_Init(void)
  116. {     
  117. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  118. DHT11_Rst();  //復(fù)位DHT11
  119. DHT11_Check();//等待DHT11的回應(yīng)
  120. }

  121. DHT11.h文件
  122. #ifndef _DTH11_H_
  123. #define _DTH11_H_
  124. #include "stm32f10x.h"

  125. #define IO_DHT11           GPIO_Pin_15 //引入中間變量,方便移植
  126. #define GPIO_DHT11         GPIOC    //引入中間變量,方便移植
  127. #define DHT11_DQ_High    GPIO_SetBits(GPIO_DHT11,IO_DHT11)
  128. #define DHT11_DQ_Low     GPIO_ResetBits(GPIO_DHT11,IO_DHT11)
  129. void delay(int32_t us)  ;
  130. void DHT11_IO_OUT(void);//溫濕度模塊輸出函數(shù)
  131. void DHT11_IO_IN(void); //溫濕度模塊輸入函數(shù)
  132. void DHT11_Init(void);  //初始化DHT11
  133. u8   DHT11_Read_Data(u8 *temp,u8 *humi); //讀取溫濕度
  134. u8   DHT11_Read_Byte(void);              //讀出一個字節(jié)
  135. u8   DHT11_Read_Bit(void);               //讀出一個位
  136. u8   DHT11_Check(void);                  //檢測是否存在DHT11
  137. void DHT11_Rst(void);                    //復(fù)位DHT11   

  138. #endif
復(fù)制代碼

U[RQVFZK%]VSZXWF}$I)%V0.png

回復(fù)

使用道具 舉報

ID:524579 發(fā)表于 2020-4-16 20:40 | 顯示全部樓層
大佬們幫幫忙,看一下,求助求助!!!
回復(fù)

使用道具 舉報

ID:341098 發(fā)表于 2020-4-19 19:30 | 顯示全部樓層
問題解決了沒有?你的是直接沒有數(shù)據(jù)還是什么問題
回復(fù)

使用道具 舉報

ID:341098 發(fā)表于 2020-4-19 19:33 | 顯示全部樓層
可以發(fā)點實物接線圖以及全代碼(主程序以及dht11,你的代碼不全)
回復(fù)

使用道具 舉報

ID:524579 發(fā)表于 2020-4-20 13:36 | 顯示全部樓層
^-^ 發(fā)表于 2020-4-19 19:33
可以發(fā)點實物接線圖以及全代碼(主程序以及dht11,你的代碼不全)

#include "stm32f10x.h"
#include "main.h"
#include "DHT11.h"
#include "sys.h"
#include "delay.h"
#include "lcd.h"
#include "misc.h"
#include "led.h"
#include "key.h"


//char strTemp[30];
//char strHumi[30];
u8 buffer[5];
int main(void)
{
   
   SystemInit();  
   delay_init();
   LED_Init();
   DHT11_Init();   
   LCD_Init();
   
   while(1)
   {
      u8 buffer[5];
      u8 humi;
      u8 temp;
      DHT11_Read_Data(&temp,&humi);
      LCD_write_string(0, 0,"Temp:%d",temp);
      LCD_write_string(0, 0,"Humi:%d",humi);
      delay_ms(1000);
   }
}
這是主程序代碼和電路圖
1.png
回復(fù)

使用道具 舉報

ID:524579 發(fā)表于 2020-4-20 13:37 | 顯示全部樓層
^-^ 發(fā)表于 2020-4-19 19:30
問題解決了沒有?你的是直接沒有數(shù)據(jù)還是什么問題

還沒有,直接沒有數(shù)據(jù)
回復(fù)

使用道具 舉報

ID:341098 發(fā)表于 2020-4-21 18:52 | 顯示全部樓層
1.U8定義時,盡量別放在while函數(shù)中
2.你用的PC15是LSE(低頻外部時鐘),在管腳配置中,是否配置正確?(在管腳豐富的情況下,建議換個引腳)
3.dht11那里,把上拉電阻去掉試試(這點不太確定)
回復(fù)

使用道具 舉報

ID:524579 發(fā)表于 2020-4-21 19:06 | 顯示全部樓層
^-^ 發(fā)表于 2020-4-19 19:30
問題解決了沒有?你的是直接沒有數(shù)據(jù)還是什么問題

現(xiàn)在有數(shù)據(jù),就是圖片里的buf數(shù)組,仿真顯示讀出來的數(shù)據(jù)不對啊,這個數(shù)組前四個加起來等于第五個才是正確的,這讀出來的數(shù)據(jù)也不對,大佬幫忙看一下,謝謝了!!
C(OKYNFXJ_`G}%{I@RUU152.png
回復(fù)

使用道具 舉報

ID:341098 發(fā)表于 2020-4-22 18:26 | 顯示全部樓層
123456iii 發(fā)表于 2020-4-21 19:06
現(xiàn)在有數(shù)據(jù),就是圖片里的buf數(shù)組,仿真顯示讀出來的數(shù)據(jù)不對啊,這個數(shù)組前四個加起來等于第五個才是正 ...

1. 你的電壓是多少伏?dht11是3.3嗎?如果是的話,把dht11那里,把上拉電阻去掉試試
2. 你的是仿真,可以把延時調(diào)整一下,buf【4】應(yīng)該是校準(zhǔn)數(shù)據(jù),但是buf【0~3】沒數(shù)據(jù),但是buf【4】卻數(shù)據(jù),適當(dāng)把延遲函數(shù)加長,或者增加buf【5】,buf【6】看看是否可以接收到數(shù)據(jù)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:524579 發(fā)表于 2020-4-29 15:16 | 顯示全部樓層
^-^ 發(fā)表于 2020-4-22 18:26
1. 你的電壓是多少伏?dht11是3.3嗎?如果是的話,把dht11那里,把上拉電阻去掉試試
2. 你的是仿真,可 ...

問題解決了,我是用Proteus做仿真,用滴答定時器延時有問題,改了延時函數(shù)就好了,謝謝大佬了
回復(fù)

使用道具 舉報

ID:711436 發(fā)表于 2020-5-2 08:17 | 顯示全部樓層
123456iii 發(fā)表于 2020-4-29 15:16
問題解決了,我是用Proteus做仿真,用滴答定時器延時有問題,改了延時函數(shù)就好了,謝謝大佬了

請問怎么解決的,求指教,跪求大佬
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人在线播放 | h肉视频| 久久不卡| 国产精品美女久久久久久免费 | 在线欧美日韩 | 超碰在线人| 91影院 | 麻豆视频国产在线观看 | 羞羞视频免费观看入口 | 亚洲成人精品久久 | 成人3d动漫一区二区三区91 | 狠狠爱免费视频 | 人人人人人爽 | av毛片免费| 久久久综合| 午夜视频在线视频 | 久精品久久 | 久久久久久久一区 | 91精品一区二区三区久久久久 | 中文字幕日韩专区 | 综合久久99 | 午夜色播 | 91社影院在线观看 | av在线播放国产 | 毛片在线免费播放 | 国产精品久久久久久模特 | 精品久久久久一区二区国产 | 欧美日韩国产高清视频 | 国产精品一区二区欧美黑人喷潮水 | 久久黄色网 | 欧美久久久电影 | 请别相信他免费喜剧电影在线观看 | 欧美性猛片aaaaaaa做受 | 亚洲日本一区二区三区四区 | 精区3d动漫一品二品精区 | 国产精品视频免费看 | 日韩av免费在线观看 | 精品美女| 91麻豆精品国产91久久久久久久久 | 国产精品久久久久无码av | 久久久综合网 |