關(guān)于 V307 的 I2C 讀寫 E2PROM 問題

板上接了一塊 FT24C32A 的E2PROM, 掛在在 I2C2, SCL-->PB10, SDA-->PB11, 寫數(shù)據(jù)地址是16位,2字節(jié)

同樣的代碼在F4上讀寫正常,但是無(wú)法在 V307上讀取正確的數(shù)據(jù)。

但是, 進(jìn)入Debug模式,利用單步跳過的方式走代碼,又能讀取出正確的數(shù)據(jù)。

讀和寫的代碼中都已經(jīng)做了等待總線空閑處理,全速運(yùn)行時(shí)能夠走完,但是打印出的數(shù)據(jù)不對(duì)。

官方例程也無(wú)法正常打印,會(huì)卡在I2C的某個(gè)狀態(tài)中。

1.jpg把 'E' 寫入, 再讀出放入 ch2中。


2.jpg

打印出來(lái)的是方塊,%d打出來(lái)的是-95。


3.jpg

Debug中,走到讀出寄存器值時(shí),已經(jīng)正確讀出來(lái)了。


4.jpg

最后正確打印出 'E'。


5.jpg等待總線空閑程序,放在寫字節(jié)函數(shù)的結(jié)尾、讀字節(jié)函數(shù)的開頭。


1662748913683036.jpg

1662748913145870.jpg


請(qǐng)問問題原因在哪里,另外還有一個(gè)奇怪的問題,在寫和讀函數(shù)中間加入多個(gè) printf 函數(shù),不會(huì)打印這些信息,調(diào)試代碼會(huì)發(fā)現(xiàn)進(jìn)入I2C總線忙碌狀態(tài)。

不明白為什么在沒有printf函數(shù)的情況下,能夠走完程序,不影響總線,而加了多個(gè)printf函數(shù),會(huì)影響I2C總線。

更奇怪的事,反復(fù)進(jìn)出調(diào)試模式,只是點(diǎn)調(diào)試和停止調(diào)試這兩個(gè)按鈕,這些printf函數(shù)又都能打印出來(lái),不明白為什么會(huì)這樣。

1662749166103892.jpg


您好,若你使用官方例程也有問題,應(yīng)該是卡死在EV6事件,主要是由于在判斷EV6事件的時(shí)候,EEPROM此時(shí)還在寫入數(shù)據(jù),地址發(fā)送了過去,但并沒有產(chǎn)生應(yīng)答,可在判斷EV6事件加一個(gè)延時(shí),應(yīng)該可以解決該問題,如下圖。附件為測(cè)試?yán)?,可測(cè)試一下。后續(xù)若有問題,可通過郵箱和我聯(lián)系(lzs@wch.cn)

icon_rar.gifIIC_EEPROM.zip

image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频