當前位置:編程學習大全網 - 編程語言 - STM32 硬件I2C 到底是不是個坑

STM32 硬件I2C 到底是不是個坑

1、硬件I2C的CLK在50kHz及以下的情況下工作,不會出現任何情況下的卡住。

2、硬件I2C的CLK在常用的100kHz和400KHz下工作,99%的概率下會在1小時之內卡住,甚至只有幾十秒。

3、硬件I2C的CLK在任何頻率下工作,在讀取或者發送數據時,都絕對不允許其它中斷事件打斷它的工作,否則壹定會卡住,只是時間問題。

綜上,硬件I2C的穩定工作情況是:工作在50kHz及以下,並且保證無其它任何中斷打斷它的工作。這樣只適用於某些對速率要求不高的場所,比如EEPROM的讀取等,而對於高速器件例如某些型號的AD芯片,就不能用了。

如果妳壹定需要高速率(400KHz),那麽推薦大家使用STM32的替代方案GD32(兆易創新),它與STM32完全兼容但是解決了STM32的硬件I2C bug,經過本人實際測試,在400KHz的情況下工作,48小時無任何錯誤發生。但是仍需註意的是不能有外部中斷打斷I2C的工作。

對於ST公司推薦的將I2C工作在DMA和最高優先級的中斷,大家可以根據自己的情況使用,因為如果妳使用了ucos ii或者其它實時操作系統,那麽這種設置最高優先級的方式是絕對不推薦的。如果妳是裸機程序,並且任務數量不多,可以考慮這種DMA+中斷的方式,否則壹定會出現問題,只是測試時間長短問題。

最後需要說明的是:

(1)以上只是考慮了最純粹的硬件I2C代碼,對於某些使用了軟件彌補的方法,例如在經常卡住的部分設置超時退出,不在本文的討論範圍內,因為這樣已經破壞了正常的I2C協議。

(2)由於使用STM32的較高境界是使用中斷調度任務而不是死等循環,而硬件I2C對於中斷打斷十分忌諱,所以隨著妳的編程和對操作系統理解水平的提高,妳會越來越感覺STM32硬件I2C是個坑。

所以,STM32的硬件I2C確實是個坑,可以正常工作的環境要求十分苛刻。

  • 上一篇:適合學齡前兒童看的動畫片
  • 下一篇:泰安網通寬帶路由共享限制怎麽破?
  • copyright 2024編程學習大全網