解釋什麼是「軟體i2c」和「硬體i2c」?
i2c通訊協議是由philips 公司開發的一種簡單、雙向二線制同步序列匯流排協議,它只需要兩根線即可連線於匯流排上的器件之間傳送資訊。
i2c的兩種方式——硬體i2c和軟體i2c
①硬體i2c
直接利用 stm32 晶元中的硬體 i2c 外設。
硬體i2c的使用
只要配置好對應的暫存器,外設就會產生標準串列埠協議的時序。在初始化好 i2c 外設後,只需要把某暫存器位置 1,此時外設就會控制對應的 scl 及 sda 線自動產生 i2c 起始訊號,不需要核心直接控制引腳的電平。
②軟體i2c
直接使用 cpu 核心按照 i2c 協議的要求控制 gpio 輸出高低電平,從而模擬i2c。
軟體i2c的使用
需要在控制產生 i2c 的起始訊號時,控制作為 scl 線的 gpio 引腳輸出高電平,然後控制作為 sda 線的 gpio 引腳在此期間完成由高電平至低電平的切換,最後再控制scl 線切換為低電平,這樣就輸出了乙個標準的 i2c 起始訊號。
主要**:
void
read_aht20_once
(void
)
void
read_aht20
(void
)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
)else
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");
}
結果顯示:
溫濕度感測器採集
軟體 keil firetool助手 硬體 stm32核心板,溫濕度感測器,st link燒錄器,ttl轉usb模組 首先保證程式編譯通過,電腦連線stm32核心板 核心板連線溫濕度感測器 st link燒錄器 ttl轉usb模組 預設電腦已安裝st link驅動 設定keil相關引數,參考 最後燒...
溫濕度感測器採集
硬體i2c 對應晶元上的i2c外設,有相應的i2c驅動電路,其所使用的i2c管腳也是專用的,因而效率要遠高於軟體模擬的i2c 一般也較為穩定,但是程式較為繁瑣。硬體i2c是直接呼叫內部暫存器進行配置 而軟體i2c是沒有暫存器這個概念的。軟體i2c 一般是使用gpio管腳,用軟體控制scl,sda線輸...
溫濕度感測器採集
1 什麼是i2c協議 i2c 通訊協議 inter integrated circuit 是由 phiilps 公司開發的,由於它引腳少,硬體實現簡單,可擴充套件性強,不需要 usart can 等通訊協議的外部收發裝置,現在被廣泛地使用在系統內多個積體電路 ic 間的通訊。2 i2c 協議的物理層...