板上接了一块 FT24C32A 的E2PROM, 挂在在 I2C2, SCL-->PB10, SDA-->PB11, 写数据地址是16位,2字节
同样的代码在F4上读写正常,但是无法在 V307上读取正确的数据。
但是, 进入Debug模式,利用单步跳过的方式走代码,又能读取出正确的数据。
读和写的代码中都已经做了等待总线空闲处理,全速运行时能够走完,但是打印出的数据不对。
官方例程也无法正常打印,会卡在I2C的某个状态中。
把 'E' 写入, 再读出放入 ch2中。
打印出来的是方块,%d打出来的是-95。
Debug中,走到读出寄存器值时,已经正确读出来了。
最后正确打印出 'E'。
等待总线空闲程序,放在写字节函数的结尾、读字节函数的开头。
请问问题原因在哪里,另外还有一个奇怪的问题,在写和读函数中间加入多个 printf 函数,不会打印这些信息,调试代码会发现进入I2C总线忙碌状态。
不明白为什么在没有printf函数的情况下,能够走完程序,不影响总线,而加了多个printf函数,会影响I2C总线。
更奇怪的事,反复进出调试模式,只是点调试和停止调试这两个按钮,这些printf函数又都能打印出来,不明白为什么会这样。