天天看點

一文讀懂STM32中的I2C技術

作者:Xzxxxxxx
一文讀懂STM32中的I2C技術

I2C是一種由飛利浦公司開發的串行通信協定,它使用兩條信号線SDA和SCL進行資料傳輸和同步,可以連接配接多個主機和從機裝置,具有低成本、高可擴充性和簡單易用的特點。

一文讀懂STM32中的I2C技術

STM32晶片上有内置的I2C外設,可以實作硬體I2C通信,也就是說,隻需要配置好外設的寄存器,它就會自動根據協定要求産生通訊信号,收發資料并緩存起來,CPU隻要檢測外設的狀态和通路資料寄存器,就能完成資料收發。

一文讀懂STM32中的I2C技術

硬體I2C的GPIO引腳是固定的,如下表所示:

STM32F10X SDA SCL
I2C1 PB7 PB6
I2C1 PB9 PB8
I2C2 PB11 PB10
一文讀懂STM32中的I2C技術

硬體I2C的通信速率可以通過CCR寄存器來設定,可以選擇标準模式(100kbit/s)或快速模式(400kbit/s),還可以選擇SCL時鐘的占空比。

硬體I2C的通信過程分為以下幾個步驟:

  • 主機發送起始信号S,表示開始通信。
  • 主機發送從機位址SLAVE_ADDRESS和資料方向位R/W,表示要讀或寫從機的資料。
  • 從機接收到位址後,如果比對,則傳回應答信号A。
  • 主機根據資料方向位R/W,選擇主發送器模式或主接收器模式。
  • 主發送器模式下,主機向從機發送一個位元組資料,并等待從機的應答信号A。重複這個過程直到發送完所有資料。
  • 主接收器模式下,主機接收從機發送的一個位元組資料,并傳回應答信号A。重複這個過程直到接收完所有資料。最後一個位元組時,主機傳回非應答信号NACK。
  • 主機發送停止信号P,表示結束通信。
一文讀懂STM32中的I2C技術