板上接了一塊 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)中。
把 'E' 寫入, 再讀出放入 ch2中。
打印出來(lái)的是方塊,%d打出來(lái)的是-95。
Debug中,走到讀出寄存器值時(shí),已經(jīng)正確讀出來(lái)了。
最后正確打印出 'E'。
等待總線空閑程序,放在寫字節(jié)函數(shù)的結(jié)尾、讀字節(jié)函數(shù)的開頭。
請(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ì)這樣。