項目中經常需要用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有時鐘的問題,我就把自己的工程中的模式時鐘和引腳時鐘放到了一起(下圖),然後就好了。測試了半天也沒有不穩定的現象,但是至於爲什麼會這樣我仍然解釋不了。
如果有哪位大神知道請賜教。不過好在起碼現在是能用了,希望對其他人有幫助。