msp430和stm32 dht11驅動程式

2021-09-25 07:33:16 字數 3571 閱讀 1489

最近使用msp430f5529讀取dht11的溫度和濕度資料,記錄下驅動程式,需要可移植。

dht11模組是一塊溫濕度感測器模組,可以採集溫度和濕度資訊轉化為資料傳送出來,模組介紹如下:

概述:dht11 是廣州奧松****生產的一款溼溫度一體化的數字感測器。該感測器包括乙個電阻式測溼元件和乙個 ntc 測溫元件,並與乙個高效能 8 位微控制器相連線。通過微控制器等微處理器簡單的電路連線就能夠實時的採集本地濕度和溫度。dht11 與微控制器之間能採用簡單的單匯流排進行通訊,僅僅需要乙個i/o 口。感測器內部濕度和溫度資料 40bit 的資料一次性傳給微控制器,資料採用校驗和方式進行校驗,有效的保證資料傳輸的準確性。dht11 功耗很低,5v 電源電壓下,工作平均最大電流 0.5ma。

data 用於微處理器與 dht11之間的通訊和同步,採用單匯流排資料格式,一次通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數部分用於以後擴充套件,現讀出為零.操作流程如下:

一次完整的資料傳輸為40bit,高位先出。

資料格式 : 8bit濕度整數資料+8bit濕度小數資料+8bi溫度整數資料+8bit溫度小數資料+8bit校驗和

資料傳送正確時校驗和資料等於「8bit濕度整數資料+8bit濕度小數資料+8bi溫度整數資料+8bit溫度小數資料」所得結果的末8位。

使用者mcu傳送一次開始訊號後,dht11從低功耗模式轉換到高速模式,等待主機開始訊號結束後,dht11傳送響應訊號,送出40bit的資料,並觸發一次訊號採集, 使用者可選擇讀取部分資料.從模式下,dht11接收到開始訊號觸發一次溫濕度採集, 如果沒有接收到主機傳送開始訊號,dht11不會主動進行溫濕度採集.採集資料後轉換到低速模式。

通訊過程:

匯流排空閒狀態為高電平,主機把匯流排拉低等待dht11響應,主機把匯流排拉低必

須大於18毫秒,保證dht11能檢測到起始訊號。dht11接收到主機的開始訊號後, 等待主機開始訊號結束,然後傳送80us低電平響應訊號.主機傳送開始訊號結束

後,延時等待20-40us後, 讀取dht11的響應訊號,主機傳送開始訊號後,可以切換

到輸入模式,或者輸出高電平均可, 匯流排由上拉電阻拉高。

匯流排為低電平,說明dht11傳送響應訊號,dht11傳送響應訊號後,再把匯流排拉

高80us,準備傳送資料,每一bit資料都以50us低電平時隙開始,高電平的長短定

了資料位是0還是1.格式見下面圖示.如果讀取響應訊號為高電平,則dht11沒有

響應,請檢查線路是否連線正常.當最後一bit資料傳送完畢後,dht11拉低匯流排

50us,隨後匯流排由上拉電阻拉高進入空閒狀態。

訊號表示方法:

標頭檔案:

/*

* dht11.h

* * created on: 2023年7月10日

* author: 23605

*/#ifndef dht11_h_

#define dht11_h_

#define dht_direction_in

#define dht_direction_out p3dir |= bit3;

#define o_dht_dat_h p3out |= bit3

#define o_dht_dat_l p3out &= ~bit3

#define i_dht_dat (p3in & bit3)

void delay_ms(uint16_t ms);

void delay_us(uint32_t us);

void dht11_reset(void);

uint8_t dht11_isonline(void);

uint8_t dht11_readbit(void);

uint8_t dht11_readbyte(void);

uint8_t dht11_read_data(uint8_t *temp,uint8_t *temps,uint8_t *humi);

void dht11_init(void);

#endif /* dht11_h_ */

原始檔:

/*

* dht11.c

* * created on: 2023年7月10日

* author: 23605

*/#include #include "lcd.h"

#include "hal_ucs.h"

#include "hal_pmm.h"

#include "ff.h"

#include "sht20.h"

#include "iic.h"

#include "dht11.h"

#include #define sysclk 25000000/1000 //_delay_cycles(sysclk) [系統時鐘/1000] 1ms'ticks

#define sysclk2 25

void delay_ms(uint16_t ms)

else

while (!i_dht_dat && retry < 100)//dht11拉低後會再次拉高40~80us

if(retry >= 100)

return 0;

}uint8_t dht11_readbit(void)

retry = 0;

while(!i_dht_dat && retry < 100)

delay_us(40);//等待40us

if(i_dht_dat)

else

}uint8_t dht11_readbyte(void)

return dat;

}//從dht11讀取一次資料

//temp:溫度值(範圍:0~50°)

//humi:濕度值(範圍:20%~90%)

//返回值:0,正常;1,讀取失敗

uint8_t dht11_read_data(uint8_t *temp,uint8_t *temps,uint8_t *humi)

if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])

}else

return 0;

}void dht11_init(void)

msp430和stm32 lcd屏驅動程式

最近使用了一塊msp430f5529微控制器做課設,自帶的拓展板上有一塊12864的cog的lcd屏,記錄下使用的驅動程式。硬體原理圖 cog cs為片選訊號,每次資料或指令通訊完畢,需要拉低拉高一次。cog rst為上電復位引腳,正常工作後不控制。cog a0是資料命令選擇端,低電平表示傳輸的是資...

STM32 HAL庫驅動DHT11讀取溫濕度程式

驅動dht11 dht22 ds18bb20等溫濕度模組時序是比較簡單的,關鍵在於控制好時序的延時時間,hal庫的延時函式hal delay是毫秒級別延時函式,所關鍵點就是實現微秒級別的延時函式。微秒級別延時函式實現見我的另一篇部落格 io方向設定 define dht11 io in pc10 i...

STM32驅動DHT11溫濕度感測器

dht11 是一款溼溫度一體化的數字感測器。該感測器包括乙個電阻式測溼元件和乙個 ntc 測溫元件,並與乙個高效能 8 位微控制器相連線。通過微控制器等微處理器簡單的電路連線就能夠 實時的採集本地濕度和溫度。dht11 與微控制器之間能採用簡單的單匯流排進行通訊,僅僅需要一 個 i o 口。感測器內...