第一節IIC基礎
IIC最重要的就是時序,主要如下:
1. 起始條件(Start Condition):
-I2C通信開始時,主設備將SDA從高電平切換到低電平時,SCL處于高電平狀態。
-起始條件至少需要持續一個SCL周期。
2. 地址傳輸(Address Transmission):
-主設備發送設備地址和讀寫位(R/W)位來選擇特定的從設備。
-地址傳輸是以一個起始位開始的,表示數據的開始。
-7位地址模式:主設備發送7位設備地址,最后一位是R/W位,指示讀取(R=1)或寫入(W=0)操作。
-10位地址模式:主設備先發送第一個字節的高6位,然后發送一個僅包含從設備地址的位(R/W位)的起始位,最后發送第一個字節的低位。
3. 應答位(ACK/NACK):
-在每個字節的傳輸之后,接收設備需要提供一個應答位(ACK或NACK)。
-主設備接收到每個字節的最后一個位后,會釋放SDA線,接收設備通過將SDA線拉低來提供應答位。
-如果接收設備成功接收到數據,則提供ACK(拉低SDA線),否則提供NACK(保持SDA線為高電平)。
4. 數據傳輸(Data Transmission):
-主設備發送數據字節給從設備,每個字節由8個數據位和一個應答位組成。
-數據傳輸是以起始位開始的,并在每個SCL周期傳輸一個位。
-每個數據位都在SCL的上升沿或下降沿傳輸。
-數據傳輸的最后一個位由接收設備提供應答位。
5. 停止條件(Stop Condition):
-主設備將SDA從低電平切換到高電平時,SCL處于高電平狀態。
-停止條件至少需要持續一個SCL周期。
-停止條件表示I2C通信的結束。
6. 時鐘速率(Clock Speed):
-I2C總線的時鐘速率由主設備控制。
-標準模式下,時鐘頻率為100 kHz;快速模式下,時鐘頻率為400 kHz。
-高速模式和超高速模式下,時鐘頻率更高。
第二節 硬件解讀
上圖就是物聯網開發板上面的OLED模塊的原理圖,哪里來的?為什么是這樣的?請大家打開改OLED的數據手冊就知道了,如下圖:
這個就是數據手冊提供的原理圖,是不是和藍橋杯物聯網開發板上面的原理圖一模一樣?當芯片廠家提供了參考電路設計圖,我們工程師只需要把它COPY就可以啦。
需要注意的是OLED模塊的供電引腳是A_3V3,如下:
而A_3V3引腳又是同過STM32L071KBU6來控制的,如下圖:
通過上圖看出來,當PB5為低電平時,三極管SI2301導通,A_3V3得電,OLED工作;反之,三極管SI2301不導通,A_3V3失電,OLED熄滅。
說完OLED的電源引腳,來看看OLED的IIC引腳,如下:
看得出來STM32與OLED引腳的關系:
STM32引腳 | OLED引腳 |
PA8 | I2C3_CS |
PB4 | I2C3_SDA |
第三節 CubeMX配置
第一步:配置PB5為輸出模式,并初始化為低電平,使得OLED可以正常工作,不要忘記和6處一樣使用用戶標簽哦。
第二步:配置OLED的I2C3,如下圖:配置完后PA8和PB4會自動變成綠色。
第四節 MDK代碼
第一步:找到比賽提供的代碼驅動,將oled.h和font.h粘貼到“項目名/Core/Inc”文件夾中,如下圖:
第二步:找到比賽提供的代碼驅動,將oled.c粘貼到“項目名/Core/Src”文件夾中,如下圖:
第三步:按照如下圖將oled.c文件添加到項目中,如下圖:注意oled.c文件的目錄,在“項目名/Core/Src”中,不要選到其他位置,否則編譯過程中會報錯。
第四步:添加之后會看見oled.c,如下圖:然后改點“Colse”點“Colse”,改點“OK”點“OK”。
第五步:可以看見項目欄的多了一個oled.c文件,如下圖:
第六步:編譯代碼,發現有一個錯誤,如下圖:原來是OLED_Write函數有問題。這個函數就是需要我們手寫的OLED的驅動。
第七步:編寫OLED_Write函數,如下圖:
第八步:添加頭文件,如下圖:
第九步:編寫OLED相關代碼。如下圖:
第五節 實驗現象
注意:
1,下載程序的時候,請選擇A開發板。
現象:OLED第一行顯示”Hello”。
來源:撞上電子微信公眾號
版權:東莞市東城墨竹公子電子工作室
日期:2023.06.07
-
OLED
+關注
關注
119文章
6200瀏覽量
224216 -
IIC
+關注
關注
11文章
300瀏覽量
38339
發布評論請先 登錄
相關推薦
評論