1 綜述
采用GD32內嵌IIC控制器,以中斷方式,快速實作的IIC通信,速度400kbps,
IIC通信,諸如常用的STM32,多是用IO口模擬IIC通信的,曾經以STM32內嵌IIC控制器,以中斷方式,快速實作了IIC通信,實作的關鍵是1位元組的讀取操作,
作為后起之秀,GD對IIC控制器邏輯改進了很多,已經很好用,
寫通信較易實作,簡單處理讀操作也容易實作,但總會發現始終多做了1位元組的無用功,尋找合適的NCK和STOP位發出時刻,可以實作2位元組以上的讀取操作,沒有無用功,但1位元組較難實作,努力之后,還是發現有1位元組無用功,反復除錯,最終消除1位元組讀取時的多余1位元組無用功,
這些問題,在STM32中,也存在,本人已在此之前完美解決,
2 關鍵環節
- 發出START位前,3位元組以內讀取時準備NCK,2位元組讀取時還需置位允許ACKEN決定下1位元組發送NCK位,其它情況準備ACK位;
- 3個以上多位元組讀取,需要在倒數第2位元組中斷接收后時,及時準備發出NCK和STOP位;
- 2個位元組讀取,需要在收到第1個資料中斷未讀取資料時,恰到好處的發出STOP位;
- 1個位元組讀取,還需要在START中斷時,及時準備發出STOP位;
- 1個或最后1個位元組資料進入DR暫存器,會設定狀態標識,但不會引發中斷,需要在中斷以外讀取,在中斷中設定恰當的標識位,其它情況資料讀取在中斷中進行,
3 相關代碼
3.1 讀取操作
3.2 中斷處理代碼
4 測驗代碼
這里以TOF傳感器VL530L0X暫存器讀取為例說明,先發暫存器地址,再讀取1~4位元組內容,
4.1 函式封裝

4.2 測驗代碼

5 測驗波形圖
5.1 四位元組讀取
![]()

5.2 三位元組讀取
![]()

5.3 二位元組讀取 

5.4 一位元組讀取
![]()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290521.html
標籤:其他
下一篇:C語言小惡搞之猜數字游戲
