關於STM32的硬體IIC使用問題解決方案

2021-05-22 23:18:57 字數 1143 閱讀 7253

最近公司上stm32,對新的東西不太熟悉。直接上手,平台配置啥的都還算順利,畢竟八位機平台的東西在。到硬體iic的時候就出大問題了,剛剛上板子的pcf8563(rtc),我也懶,直接就用st官方給的庫。剛剛開始幾次可以讀寫pcf8563,後來直接就杯具。查了兩天,發現連star訊號都發不出來,直接卡在iic時鐘使能那個地方。匯流排永遠是忙!實在沒辦法。。。

求助 幾個朋友,其中一種說法是:stm32的抗干擾問題,導致iic匯流排有動作,讓iic器件認為忙。要在vdd和vss,接近管腳的地方加104的電容。有可能是這種原因,不過我手頭板子限制,我沒辦法加電容,我沒有試,要不誰試一下。

然後到網上一搜,乖乖,原來不只是我碰到這個問題,n多人都碰到這個問題,官方也出了乙個修定基本承認這是乙個硬體bug。杯具了,很多人都直接用io直接模擬了。我的日程安排也打算,再弄乙個早止,如果不成我也直接用io模擬了。

繼續調,繼續搜。在乙個blog(實在對不起,由於大量的檢視網頁,我實不記得那部落格是哪的了)裡看到有這麼乙個說法:首先是,應用時序不完全標準。其次是,iic自動ack的問題。受這個啟發我從新整理iic的時序。

由於是匯流排一開始就是忙,那我在配置io的時候,就先更改io狀態,讓io先全部拉高。想當於強制釋放匯流排,然後再配置io和iic。一看,嘿嘿,iic不忙了。大喜!!!理所當然,接下來的寫函式也正確了,至少沒有出現star發不出的情況。到讀資料,杯具又出現了!又當在了發star的時候,我都無語了。鬱悶過後,仔細跟蹤進去發現:第一次讀資料是正確的,而第二次讀資料的時候才出現了star不能發的情況。我又從新組織乙個讀的io配置程式,無果。又陷入無語。能讀出第乙個資料,那麼我的讀時序肯定是沒有問題的,可為啥第二次讀的時候就杯具呢?我單步進入函式,更驚奇的發現竟然單步讀資料能讀出來!!會不會真的是傳說中的自動ack設定的問題呢?我測試了一下,無解。然後,想想單步和全速的區別,難道還真是速度?加了乙個延時函式在每一次讀的後面,ok,世界就這麼清淨了!

我承認,期間我問候了st很多任務程師的家人,實在不好意思。

1.匯流排總是忙的問題,這個我覺得可能和io結構和iic狀態機有關。不知道st怎麼弄的,感覺這個io像是能「記憶」一樣,把過去的值和干擾都記住了,死活不忘掉。

2.至於後面的ack,這個可能與它的iic狀態機有關。狀態機剛剛應ack,就直接置標誌,而實際上ack遠沒有結束,而使用者直接就進行下一步操作,這當然杯具。同樣的地況在msp430裡的uart一德行。

STM32硬體IIC之DMA傳輸資料

這裡給出乙個實現用dma傳輸iic資料的實現過程這裡咱們說3個點 1.檢查iic匯流排上是否有指定位址的器件 2.iic讀取資料 3.iic寫資料 下面來乙個乙個詳細說明 1.檢查iic匯流排上是否有指定位址的器件 1.判斷是否匯流排忙,如果忙則等待 2.產生起始位 3.等待起始位產生完成 4.傳送...

stm32(十四)IIC總結

一 iic匯流排知識 sda 雙向資料線,主機可以通過sda線傳送資料給集群,集群也可以通過sda線傳送資料給主機 scl 時鐘訊號線,驅動資料線收發資料的脈衝訊號由scl提供,scl脈衝訊號永遠由主機發出 在匯流排上sda和scl都有上拉電阻,因為iic匯流排介面的晶元sda,scl輸出都是開漏輸...

stm32軟體模擬iic

iic inter integrated circuit 匯流排是一種由philips公司在80年代開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。它是半雙工通訊方式。iic匯流排最主要的優點是其簡單性和有效性。由於介面直接在元件之上,因此iic匯流排占用的空間非常小,減少了電路板的空間和晶元...