stlinkv2燒錄stm32教程「stm32f103zet6引腳圖及功能」

關於DHT11

DHT11是一款數字溫濕度傳感器,DHT11是一款含有已校準數字信號輸出的溫濕度複合傳感器。它應用專用的數字模塊採集技術和溫濕度傳感技術,確保產品具有可靠的穩定性,響應快,抗干擾能力強。傳感器包括一個高分子電阻式感濕元件和一個NTC測溫元件,並與一個高性能8位單片機相連接,通過單總線與微處理器通訊,只需要一根線。

使用STM32F103ZET6採集DHT11溫濕度串口顯示

相關參數

1、DHT11數據結構
DHT11數字濕溫度傳感器採用單總線數據格式。即,單個數據引腳端口完成輸入輸出雙向傳輸。其數據包由5Byte(40Bit)組成。數據分小數部分和整數部分,具體格式在下面說明。
一次完整的數據傳輸為40bit,高位先出。
數據格式:8bit濕度整數數據+8bit濕度小數數據+8bit溫度整數數據+8bit溫度小數數據+8bit校驗和
校驗和數據為前四個位元組相加。
傳感器數據輸出的是未編碼的二進制數據。數據(濕度、溫度、整數、小數)之間
應該分開處理。如果,某次從傳感器中讀取如下5Byte數據:

使用STM32F103ZET6採集DHT11溫濕度串口顯示

由以上數據格式可以得到溫濕度計算方法
humi (濕度)= byte4 . byte3=45.0 (%RH)
temp (溫度)= byte2 . byte1=28.0 ( ℃)
jiaoyan(校驗)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校驗正確)
2、DHT11傳輸數據時序
主機發送開始信號後,延時等待 20us-40us 後讀取 DH11T 的回應信號,讀取總線為低電平,說明 DHT11 發送響應信號,DHT11 發送響應信號後,再把總線拉高,準備發送數據,每一 bit 數據都以低電平開始。

使用STM32F103ZET6採集DHT11溫濕度串口顯示

3、DHT11的數字「0」和數字「1」表示方法
DHT11的數字0和數字1表示方式和常見的不同,一般的數據表示0的是低電平,表示1的是高電平,DHT11不同,開始傳輸數據之後他數字0的表示方式是高電平26-28us,數字1的表示方式是高電平116-118us。

使用STM32F103ZET6採集DHT11溫濕度串口顯示
使用STM32F103ZET6採集DHT11溫濕度串口顯示

代碼篇

本次實驗定義的IO口是PB11,傳輸的數據是串口一
1、主機發送開始信號到DHT11即單片機拉低18ms之後再拉高20-40us

static void DHT11_Rst(void)
{                
		GPIO_SETOUT();											//配置成輸出模式
    GPIO_ResetBits(DHT11_IO,DHT11_PIN); //拉低數據線
    Delay_ms(20);    										//拉低至少18ms
    GPIO_SetBits(DHT11_IO,DHT11_PIN); 	//拉高數據線 
	  Delay_us(30);     									//主機拉高20~40us
		GPIO_ResetBits(DHT11_IO,DHT11_PIN);
}

2、DHT11發送響應信號到主機(32單片機),DHT11的數據線會拉低40-50us的,在拉高40-50us,讓單片機的IO口檢測信號。

函數名:static u8 DHT11_Check(void)
參數說明:無
返回值:檢測到回應-->返回1,否則0
函數作用:檢測DHT11的響應信號
***********************************************/
static u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	GPIO_SETIN();			//設置為輸入模式	
	
  while (!GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry<100)//DHT11會拉低40~50us
	{
		retry++;
		Delay_us(1);
	}
	if(retry >= 100)	//超時未響應/未收到開始信號,退出檢測
		return 0;
	else 
		retry = 0;
  while (GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry<100)//DHT11拉低後會再次拉高40~50us
	{
		retry++;
		Delay_us(1);
	}
	if(retry>=100)		//超時,DHT11工作出錯,退出檢測
		return 0;
	return 1;					//設備正常響應,可以正常工作
}

3、DHT11開始傳輸數據給單片機,這有兩個傳輸數據的函數,一個是傳輸位元組的,在由傳輸位元組的函數來寫傳輸一個8位字符串的函數。

函數名:static u8 DHT11_Read_Bit(void)
參數說明:無
返回值:返回從DHT11上讀取的一個Bit數據
函數作用:從DHT11上讀取一個Bit數據
***********************************************/
static u8 DHT11_Read_Bit(void)
{
 	u8 retry = 0;
	//DHT11的Bit開始信號為12-14us低電平
	while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry<100)//等待變為低電平(等待Bit開始信號)
	{
		retry++;
		Delay_us(1);
	}
	retry = 0;
	while(!GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry<100)//等待變高電平(代表數據開始傳輸)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(30);//等待30us
	//0信號為26-28us,1信號則為116-118us,所以說超過30us去讀取引腳狀態就可以知道傳輸的值了
	if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN)) return 1;
	else return 0;		   
}


/***********************************************************************
函數名:static u8 DHT11_Read_Byte(void)
參數說明:無
返回值:返回從DHT11上讀取的一個byte數據
函數作用:從DHT11上讀取一個byte數據
************************************************************************/
static u8 DHT11_Read_Byte(void)    
{        
  u8 i,dat;
  dat=0;
	
	for (i=0;i<8;i++) 
	{
   	dat<<=1; 
	  dat|=DHT11_Read_Bit();
  }	
	
  return dat;
}

4、DHT11數據採集完畢之後通過主函數在串口顯示出來

函數名:int main(void)
參數說明:無
返回值:無
函數作用:主函數
***************************************************************************/
 int main(void)
 {	
	 
   clock_init();
	 uart_init(115200);		//初始化串口
	 printf("wecome to DHT11");
	 
	 
	 //初始化DHT11(有BUG,第一次上電總是失敗,按一下複位按鈕又能進了)
	 if(!DHT11_Init()){
		 printf("rn EEROR! THE DHT11 HAS NO RESPOND...");
		 //while(1);
	 }
	 printf("rn THE DHT11 HAS RESPOND");
	 Delay_ms(10);		//這裡延時10ms主要是因為,剛剛接收到響應信息,要等DHT11發送完信息
	 
	 while(1)
	 {
		 if(DHT11_Read_Data(&temp,&humi))
			printf("rn temp:%d,humi:%d",temp,humi);
		 else
		 //printf("rn EEROR! THE DHT11 HAS NO RESPOND...");//由於是庫函數編程,不能準確把握函數的執行時間,
																													//所以會經常出現這條警告信息
		 Delay_ms(100);
	 }
	  
 }
 

接線和實驗結果

使用STM32F103ZET6採集DHT11溫濕度串口顯示
使用STM32F103ZET6採集DHT11溫濕度串口顯示

總結

DHT11是性價比比較高的一個溫濕度模塊,用串口來顯示溫濕度來說是比較直觀的,長期發佈此類文章,喜歡的點個關注吧。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/208314.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:00
下一篇 2024-12-08 15:00

相關推薦

發表回復

登錄後才能評論