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