CH32V103學(xué)習(xí)筆記之五——硬件IIC
1、前言
????????距離上篇文章更新已經(jīng)過去一個半月了,期間并沒有在摸魚,而是探索了不少有實(shí)際意義的知識點(diǎn)。結(jié)合目前正著手移植的程序,重點(diǎn)解決了硬件IIC的連續(xù)讀寫和SPI DMA讀寫問題。現(xiàn)在將學(xué)習(xí)結(jié)果做些小結(jié)分享出來。
????????本篇文章主要總結(jié)硬件IIC的配置流程,結(jié)合使用IIC通信的OLED液晶屏和MPU6050模塊來說明硬件IIC的使用。
2、IIC的初始化流程
????????IIC作為嵌入式MCU一個常見外設(shè),配置流程和其他外設(shè)并沒有區(qū)別。使能外設(shè)IO時鐘、復(fù)用外設(shè)IO(必要時重映射IO),使能IIC時鐘、初始化IIC工作模式、使能IIC。
iic.c
iic.h
在使用IIC模塊之前,需要調(diào)用IIC初始化函數(shù)完成IIC的初始化。
3、使用IIC向從設(shè)備讀、寫一字節(jié)數(shù)據(jù)
????????為了能簡單明了說明IIC的通信時序,這里截取了某品牌M32F4參考手冊中IIC章節(jié)內(nèi)容,CH32V103參考手冊IIC章節(jié)沒有此說明圖表。
寫一字節(jié)數(shù)據(jù)配置流程

讀一字節(jié)數(shù)據(jù)配置流程

EV事件超時處理函數(shù)
5、中斷對IIC通訊的影響
????????先上一張邏輯分析儀抓的時序圖。在時序圖中可以看到,IIC在被中斷前會完成當(dāng)前字節(jié)的傳輸,并發(fā)送出ACK信號。再拉低SCL,釋放SDA,再中斷函數(shù)執(zhí)行完之后會繼續(xù)完成IIC通訊。

5、小結(jié)
??? ? 最開始接觸32位MCU的時候,能找到的關(guān)于IIC的資料,多以普通IO模擬IIC通訊時序?qū)崿F(xiàn)數(shù)據(jù)傳輸,介紹硬件IIC使用的資料沒有多少。流傳的原因無非是早年某品牌MCU IIC的硬件BUG容易造成程序卡死,造成很多人習(xí)慣了使用軟件模擬的IIC。CH32V103R8作為一種新架構(gòu)的MCU在設(shè)計(jì)IIC應(yīng)該是注意過此問題,經(jīng)過實(shí)際驗(yàn)證,硬件IIC和其他片內(nèi)外設(shè)一樣,并沒有什么問題,可以正常使用。
????????下一篇將介紹IIC連續(xù)讀寫數(shù)據(jù)與OLED液晶屏和MPU6050通訊。
