最后更新:2個月前 手機定位技術交流文章
帶你了解 STM32 中的 I2C
如果你想研究一臺機器, 你可以聽我的, 信任我個人, 或者在評論部分回應我。 我們直接控 制 STM32 的兩 個 GPIO 引腳,分別用 作 SCL 及 SD A ,根據上述信號的時間序列,直接控制 制 LED 燈那樣控制引腳的輸 出 ( 若是接收數據時則讀 取 SDA 電 平 ) , I2 C 這將使我們能夠進行對口,同樣,如果我們按 照 USAR T 你想做什么 管理你的腳是正確的。 現 USAR T 通信。 只要協議得到遵循, 就 能按通訊標準交互。
直接控 制 GPIO 當腳趾水平生成電信時間序列時,您需要它。 由 CPU 隨時控制推力狀態。 這個方式叫作 “ 軟件模擬協 議 ” 。
當然 還 有 “ 硬件協 議 ” 方式 , STM32 的 I2C 片上外設專門負責實 現 I2C 通訊議定書,只要它已經建立。 這個 對外,它將產生一個協議要求的通信信號,發送和接收數據,并儲存數據。 , CP U 只要檢測到網站和訪問數據儲存庫的狀態,數據就會得到接收和傳送,這是一種硬件安排。 理 I2 C 協議的方式減輕 了 CPU 的工作, 而且讓 軟件設計更加簡單。
STM32 的 I2C 外設簡介
STM32 的 I2C 外部通信托管和支助 持 100Kbit/s 和 400Kbit/s 的速率,支 持 7 位 、 10 位設備地址,支 持 DMA 它負責數據傳輸和驗證。 的 I2C 外設還支 持 SMBus2.0 協議 , SMBus 協議 與 I2C 同樣,它主要用于膝上型計算機細胞管理。
STM32 的 I2C 架構剖析
通訊引腳
I2C 地圖的左邊是所有硬件建設的基礎。 側 SCL 線 和 SDA 線展開 的 ( 其中 的 SMBA 線用 于 SMBUS 的警告信號 , I2C 通訊沒有使 用 ) 。 STM32 芯片有多 個 I2C 外設,它們 的 I2C 通訊信號引出到不同 的 GPIO 在使用腳的時候,你必須適應這些特定的腳。 于 GPI O 引腳的復用功能,以 使用手冊 為準。
時鐘控制邏輯
SCL 線的時鐘信號, 由 I2C 接口根據時間調節存款 。 器 (CCR ) 控制。參數大多是時鐘頻率。 置 I2C 的 CCR 登記冊可以改變通信費率特點,例如:
可選 擇 I2C 通訊 的 “ 標 準 / 快 速 ” 模式,這兩個模式分 別 I2C 對 應 100/400Kbit/s 的通訊速率。
在快速模式下可選 擇 SCL 時鐘的占空比,可 選 Tlow/Thigh=2 或 Tlow/Thigh=16/ 9 模式,我們知 道 I2C 協議 在 SCL 高電平時 對 SDA 信號采樣 , SCL 低電平 時 SD A 準備下一個數據,修 改 SCL 數據抽樣受高低比率的影響。
CCR 寄存器中還有一 個 12 位的配置因 子 CC R ,它 與 I2C 外部時鐘源協作、產出 生 SCL 時鐘 , STM32 的 I2C 外設都掛載 在 APB1 總線上,使 用 APB1 的時鐘 源 PCLK 1 , SCL 信號線輸出時鐘公式如下:
計算結果得 出 CCR 為 3 0 要控制, 請將此值寫入此登記槽 。 制 IIC 的通訊速率 為 400KH z ,其實即使配置出來 的 SCL 時鐘不完全等于標準 的 400KH z , IIC 傳輸的準確性將不受影響,就象所有數據通信一樣。 由 SCL 只要保持時鐘頻率,它就得到協調。 偏差不要太大就行 。
數據控制邏輯
I2C 的 SDA 信號主要與數據傳輸登記冊及其數據來源和目標有關。 器 (DR ) 、地址寄存 器 (OAR ) 、 PEC 寄存器以 及 SDA 數據行。在傳輸數據時,使用數據轉換登記冊。 以 “ 數據寄存 器 ” 逐項獲取數據源的數據。 過 SDA 當從外部收到數據時,發出信號線;使用數據傳輸登記冊。 把 SDA 由信號線取樣的數據一次保存一個。 到 “ 數據寄存 器 ” 在這里,如果數據可以確認,發送的數據將被視為有效。 過 PCE 計算器操作和數據存儲 在 “ PEC 寄存 器 ” 中。
當 STM32 的 I2C 在機器操作時,當收到設備地址信號時,數據傳輸記錄器收到地址。 與 STM32 的自身 的 “ I2C 地址寄存 器 ” 回應主機所在位置 。 STM32 的自 身 I2C 地址可通過修 改 “ 自身地址寄存 器 ” 修改以允許兩者使用 個 I2C 為設備地址分別保留兩個地址。 在 OAR1 和 OAR2 中。
整體控制邏輯
合并協調的整體控制邏輯 個 I2C 用來管理邏輯的勞動模式 是由我們的設置決定的 的 “ 控制寄存 器 (CR1/CR2 ) ” 參數影響控制邏輯。 外部工作時, 控制邏輯是根據外部任務的工作狀態確定的 。 改 “ 狀態寄存 器 (SR1 和 SR2 ) ” 我們只需要讀讀這些 與保管人有關的空位。 解 I2 C 控制邏輯還負責根據需要管理生產。 生 I2C 中斷信號 、 DM A 請求及各 種 I2C 的通訊信 號 ( 啟動,暫停,并回復信號。 等 ) 。
通訊過程
使 用 I2C 在對外通訊方面,它將在不同層次的通訊上進行。 對 “ 狀態寄存 器 (SR1 及 SR2 ) ” 數據比特存儲在參數中,我們可以通過讀取這些內存標記來確定通信狀況。
主發送器
圖中的 是 “ 主發送 器 ” 流程,即作 為 I2C 在發送來文時通過何種程序發送數據。
主發送器通訊過程
以下是主要發件人發送程序和事件說明:
(1) 控制產生起始信 號 (S ) 當信號被激活時,會發生一些事情 件 “ EV 5 ” ,并會 對 SR1 寄存器 的 “ S B ” 位 置 1 表示已發送初始信號;
(2) 傳送裝置的地址 等待反應信號 如果機器響應 就會出事 件 “ EV 6 ” 及 “ EV 8 ” ,這 時 SR1 寄存器 的 “ ADD R ” 位 及 “ TX E ” 位被 置 1 , ADDR 為 1 表示地址已經發送 , TXE 為 1 此值表示數據儲存庫為空 。
(3) 以上步驟正常執行并 對 ADDR 位清零后,我們 往 I2C 的 “ 數據寄存 器 D R ” 這里您正在寫入您要傳輸的數據 。 時 TXE 位會被重 置 0 ,表示數據登記冊不是空的。 , I2C 外設通 過 SDA 數據通過信號線發送和生成。 生 “ EV 8 ” 事件, 即 TXE 位被 置 1 ,然后用數個字節的數據重復操作;
(4) 當我們完成傳輸數據后 控制器就完成了 制 I2C 設備產生一個停止信 號 (P ) ,這個時候會產 生 EV8_2 事件 , SR1 的 TXE 位 及 BTF 位都被 置 1 ,表示通訊結束。
假如我們使能 了 I2C 如果發生上述所有情況,它們就會形成。 生 I2C 信號中斷,使用相同的中斷服務功能。 到 I2C 服務恢復后我們就出發 查看 寄存器 的 確定是哪一種情況。
主接收器
然后,審查并執行初級接收程序。 為 I2C 當通信托管時,從外部世界接收數據的過程。
以下是關鍵接收接收程序和事件:
(1) 連同主啟動信息一起發送 號 (S ) 它來自主機端,有一個起始信號, 和它有任何關系。 件 “ EV 5 ” ,并會 對 SR1 寄存器 的 “ S B ” 位 置 1 表示已發送初始信號;
(2) 傳送裝置的地址 等待反應信號 如果機器響應 就會出事 件 “ EV 6 ” 這 時 SR1 寄存器 的 “ ADD R ” 位被 置 1 ,表示地址已經發送。
(3) 在從服務器獲取數據到地址后,您開始向主機端發送數據。當主機獲得數據時,它會創建數據。 生 “ EV 7 ” 事件 , SR1 寄存器 的 RXNE 被 置 1 表示接收數據登記冊不是空的,當我們閱讀登記冊時,我們可以將數據登記冊清空,以便接收下一個數據。 制 I2C 發送應答信 號 (ACK ) 或非應答信 號 (NACK ) 重復前述接收數據的步驟,如果沒有收到答復,則停止傳送;
(4) 當發出無響應信號時,將創建停止信。 號 (P ) ,結束傳輸。
在發送和接收過程中發生了一些事件,這些事件不僅標志著我們以前討論過的立場,而且還可能同時標出立場,例如東道國,在閱讀之后,標記必須消除,這更加困難。 用 STM32 標準圖書館方法立即檢測這些事件的綜合指標,減少方案擬訂的復雜性。
你可以依靠我 如果你想加入一組學生 學習獨奏機器編程。 復 “ 我要入 門 ” 如果你喜歡和我們一起長大 你可以多留意我們一點
本文由 在線網速測試 整理編輯,轉載請注明出處 。