摘要:如圖所示在了解起始條件和停止條件后,我們再來看看在這個過程中數據的傳輸是如何進行的。四參考資料通過接口實現溫濕度的采集硬件和軟件區別
I2C 總線在物理連接上非常簡單,分別由SDA(串行數據線)和SCL(串行時鐘線)及上拉電阻組成。通信原理是通過對SCL和SDA線高低電平時序的控制,來 產生I2C總線協議所需要的信號進行數據的傳遞。在總線空閑狀態時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。
I2C協議規定,總線上數據的傳輸必須以一個起始信號作為開始條件,以一個結束信號作為傳輸的停止條件。起始和結束信號總是由主設備產生。總線在空閑狀態 時,SCL和SDA都保持著高電平,當SCL為高電平而SDA由高到低的跳變,表示產生一個起始條件;當SCL為高而SDA由低到高的跳變,表示產生一個 停止條件。在起始條件產生后,總線處于忙狀態,由本次數據傳輸的主從設備獨占,其他I2C器件無法訪問總線;而在停止條件產生后,本次數據傳輸的主從設備 將釋放總線,總線再次處于空閑狀態。如圖所示:
在了解起始條件和停止條件后,我們再來看看在這個過程中數據的傳輸是如何進行的。數據傳輸以字節為單位。主設備在SCL線上產生每個 時鐘脈沖的過程中將在SDA線上傳輸一個數據位,當一個字節按數據位從高位到低位的順序傳輸完后,緊接著從設備將拉低SDA線,回傳給主設備一個應答位, 此時才認為一個字節真正的被傳輸完成。當然,并不是所有的字節傳輸都必須有一個應答位,比如:當從設備不能再接收主設備發送的數據時,從設備將回傳一個否 定應答位。數據傳輸的過程如圖所示:
I2C總線上的每一個設備都對應一個唯一的地址,主從設備之間的數據傳輸是建立在地址的基礎上,也就是說,主設備在傳輸有效數據之前 要先指定從設備的地址,地址指定的過程和上面數據傳輸的過程一樣,只不過大多數從設備的地址是7位的,然后協議規定再給地址添加一個最低位用來表示接下來 數據傳輸的方向,0表示主設備向從設備寫數據,1表示主設備向從設備讀數據。如圖所示:
所謂硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的;軟件I2C一般是用GPIO管腳,用軟件控制管腳狀態以模擬I2C通信波形。
模擬I2C 是通過GPIO,軟件模擬寄存器的工作方式,而硬件(固件)I2C是直接調用內部寄存器進行配置。如果要從具體硬件上來看,可以去看下芯片手冊。因為固件I2C的端口是固定的,所以會有所區別。
(1)硬件IIC用法比較復雜,模擬IIC的流程更清楚一些。
(2) 硬件IIC速度比模擬快,并且可以用DMA
(3)模擬IIC可以在任何管腳上,而硬件只能在固定管腳上。
軟件i2c是程序員使用程序控制SCL,SDA線輸出高低電平,模擬i2c協議的時序。一般較硬件i2c穩定,但是程序較為繁瑣,但不難。
硬件i2c程序員只要調用i2c的控制函數即可,不用直接的去控制SCL,SDA高低電平的輸出。但是有些單片機的硬件i2c不太穩定,調試問題較多。
具體信息請到官方下載對應產品介紹文檔,資料鏈接如下
http://www.aosong.com/class-36.html
在野火提供的示例代碼中,打開一個只包含固件庫的空項目。向工程中添加相關代碼,添加代碼的具體內容請參考下面鏈接:
https://blog.csdn.net/hhhhhh277523/article/details/111397514
1.AHT20芯片的使用過程
void read_AHT20_once(void){ delay_ms(10); reset_AHT20();//重置AHT20芯片 delay_ms(10); init_AHT20();//初始化AHT20芯片 delay_ms(10); startMeasure_AHT20();//開始測試AHT20芯片 delay_ms(80); read_AHT20();//讀取AHT20采集的到的數據 delay_ms(5);}
2.AHT20芯片讀取數據
void read_AHT20(void){ uint8_t i; for(i=0; i<6; i++) { readByte[i]=0; } I2C_Start();//I2C啟動 I2C_WriteByte(0x71);//I2C寫數據 ack_status = Receive_ACK();//收到的應答信息 readByte[0]= I2C_ReadByte();//I2C讀取數據 Send_ACK();//發送應答信息 readByte[1]= I2C_ReadByte(); Send_ACK(); readByte[2]= I2C_ReadByte(); Send_ACK(); readByte[3]= I2C_ReadByte(); Send_ACK(); readByte[4]= I2C_ReadByte(); Send_ACK(); readByte[5]= I2C_ReadByte(); SendNot_Ack(); //Send_ACK(); I2C_Stop();//I2C停止函數 //判斷讀取到的第一個字節是不是0x08,0x08是該芯片讀取流程中規定的,如果讀取過程沒有問題,就對讀到的數據進行相應的處理 if( (readByte[0] & 0x68) == 0x08 ) { H1 = readByte[1]; H1 = (H1<<8) | readByte[2]; H1 = (H1<<8) | readByte[3]; H1 = H1>>4; H1 = (H1*1000)/1024/1024; T1 = readByte[3]; T1 = T1 & 0x0000000F; T1 = (T1<<8) | readByte[4]; T1 = (T1<<8) | readByte[5]; T1 = (T1*2000)/1024/1024 - 500; AHT20_OutData[0] = (H1>>8) & 0x000000FF; AHT20_OutData[1] = H1 & 0x000000FF; AHT20_OutData[2] = (T1>>8) & 0x000000FF; AHT20_OutData[3] = T1 & 0x000000FF; } else { AHT20_OutData[0] = 0xFF; AHT20_OutData[1] = 0xFF; AHT20_OutData[2] = 0xFF; AHT20_OutData[3] = 0xFF; printf("讀取失敗!!!"); } printf("/r/n"); //根據AHT20芯片中,溫度和濕度的計算公式,得到最終的結果,通過串口顯示 printf("溫度:%d%d.%d",T1/100,(T1/10)%10,T1%10); printf("濕度:%d%d.%d",H1/100,(H1/10)%10,H1%10); printf("/r/n");}
溫濕度傳感器接法 由于本程序采用的軟件I2C實現的,采用GPIO引腳是PB6,PB7。具體定義代碼如下
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
#define IIC_SCL PBout(6) //SCL
#define IIC_SDA PBout(7) //SDA
#define READ_SDA PBin(7) 所以,SCL連接PB6,SDA連接PB7。 如果采用硬件I2C進行實現,可以查看關于STM32的原理圖,可以看到硬件I2C接口,野火stm32mini開發板的I2C接口是PA2,PA3,要實現硬件I2C讀取數據,就根據上面使用的方式進行配置,就可以完成通訊
本次實驗了解了I2C總線協議的具體內容、了解了硬件I2C和模擬I2C的主要區別,硬件I2C的效率要遠高于軟件的,而軟件I2C由于不受管腳限制,接口比較靈活。學會了如何用stm32實現用實現溫濕度的測量。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/124459.html
摘要:三小結本次實驗在實現了溫濕度數據采集并通過串口顯示和利用屏數據顯示代碼的基礎上,完成屏顯示采集的溫濕度數據也并不復雜,其中,溫濕度數據采集的過程使用的是模擬,屏的數據顯示采用的是。 ...
摘要:文章目錄一原理二實現顯示中文滾動顯示顯示字符串讀取溫濕度顯示溫濕度三結果開機顯示歡迎信息循環讀取溫濕度以及滾動顯示我的四總結五參考六源碼一原理的定義就是串行外圍設備接口。 ...
摘要:帶中文字庫的是一種具有位位并行線或線串行多種接口方式,內部含有國標一級二級簡體中文字庫的點陣圖形液晶顯示模塊其顯示分辨率為。貼片按鍵模塊支持標準的協議,完整的協議棧。以最低成本提供最大實用性,為功能嵌入其他系統提供無限可能。 項目簡介 開發環境: Keil5.14,CubeMX6.0.1,主...
摘要:使用庫讀寫環境光照度傳感器本文將教大家如何快速使用庫讀取光照度數據。五實驗樣機測試展示通過之前配置好的面板,通過涂鴉智能進行配網實時采集光照度傳感器的數據。 使用STM32 HAL庫讀寫環境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數據。 實現功能:通...
摘要:基于的與通信連接,實現溫濕度數據互傳,控制第一步,在實現將傳感器數據采集之后,并且完成配網步驟,可以正常通過模塊正常將數據發送到云平臺之后進行以下閱讀,上述內容可以跳轉到以下鏈接進行查看具體操作。 ...
閱讀 3003·2021-11-23 09:51
閱讀 1012·2021-09-26 09:55
閱讀 3962·2021-09-22 14:58
閱讀 1491·2021-09-08 09:35
閱讀 1083·2021-08-26 14:16
閱讀 886·2019-08-23 18:17
閱讀 2068·2019-08-23 16:45
閱讀 706·2019-08-23 15:55