STM32 I2C 不工作的問題
爲了方便調試, 我特意在它啓動的時候打印了一些字符, 在固件載入完畢之後拔掉下載綫, 啓動設備。
結果現在的情況是, 這些字符打印了, 但設備的 I2C 不工作。
1 | [2022-08-16 12:07:21.006] |
量過, 這個時候 I2C 總綫的 SCL 和 SDA 實際上是處於高電平, 也就是空閑狀態。
但 SR2->BUSY 位是 1, 有點靈異。
我也去網上搜羅過很多關於 STM32 I2C 問題的解決方案, 似乎有很多人遇到過。但各種 reset 代碼都加上了, 它們都不太適用我的情況。
事出有因
文章寫到這裡, 已經是第二天了。
我突然開始好奇, 這個問題竟然會如此穩定的復現, 肯定是有哪寫炸了什麽的。
於是就打開 keil 開始單步代碼, 同時打開邏輯分析儀查看波形。
結果真就給我找到了些許端倪 (
這個地方是我正在用 axp173 給 I2C 縂綫上從設備配電。
從設備在上電的時候也會初始化 I2C, 然後把 SCL 綫短暫地拉低了 36us。
再次點擊單步之後我就發現 SR2->BUSY 就被置了 1, STM32 隨即開始智障,
什麽數據都發不出去了, 因爲它覺得自己很忙, 各種返回 HAL_BUSY。
問題也好解決, 只要先給設備上電再初始化 I2C 就行了,
或者在初始化之後重載一下 I2C。對於我種比較懶的人, 肯定選是後者了 XD
對症下藥
然後就順手給它加上了這一句代碼,
本意是清除掉 BUSY 位, 讓它能夠回到正常工作的狀態。
結果重新一跑, 發現這寄存器是 RO (Read Only) 的, 沒辦法手動清掉。(駡駡咧咧
不得已, 換個辦法。
我就原地重新初始化一下, 應該沒問題吧
不過看起來是修好了 XD
STM32 I2C 不工作的問題