1. 程式人生 > >STM32外設IIC一個無法解釋的問題

STM32外設IIC一個無法解釋的問題

專案中經常需要用IIC來儲存一些重要引數,以前由於聽說stm32的硬體IIC有點不太好使,所以用了軟體模擬的方式解決。後來仔細計算髮現,如果用軟體IIC的話軟體的實時性會很差,所以就根據野火的歷程抑制了一個硬體IIC,結果剛開始就發現除錯不過去。

遇到的問題是:IIC傳送了起始訊號之後,stm32的暫存器檢測不到,直接就卡死了。卡死的地方如圖1。


通過示波器測試發現根本沒有起始訊號傳送出去。所以開始排查是不是軟體的問題,可是軟體就短短的幾行程式碼,找來找去找不出來問題的癥結所在,最後只能百度。

百度的結果:

1.有說“要STM32的硬體IIC本身不穩定的”(暫時不考慮);

2.有說“FSMC 模組和I2C1模組共用了PB7引腳所以使得I2C1沒有正常啟動,而且即使你沒有用到FSMC 只是打開了FSMC 的時鐘也會影響I2C1的啟動。解決辦法是改用I2C2或者重定義I2C 的時鐘線和資料線到PB8、9引腳;或者關掉FSMC 的時鐘”(嘗試了關閉FSMC時鐘,測試還是不行,如下圖);


最後:
除錯了好久還是不行,最後實在是除錯不過去,就仔細再研究野火的工程,看有什麼不一樣的地方,剛開始沒發現什麼不一樣的地方,最後的最後,考慮的剛才FSMC有時鐘的問題,我就把自己的工程中的模式時鐘和引腳時鐘放到了一起(下圖),然後就好了。測試了半天也沒有不穩定的現象,但是至於為什麼會這樣我仍然解釋不了。

如果有哪位大神知道請賜教。不過好在起碼現在是能用了,希望對其他人有幫助。