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有時鐘的問題,我就把自己的工程中的模式時鐘和引腳時鐘放到了一起(下圖),然後就好了。測試了半天也沒有不穩定的現象,但是至於爲什麼會這樣我仍然解釋不了。

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章