参考RT-touch的codec里面I2C写了一个I2C程序,然后用的是库,还是死在:
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
这一句里了,跟原来用库写I2C程序时一样。。。
下午弄模拟的吧
跟rtt应该没关系,裸跑用库也这样,偶尔死在EV5,偶尔死在EV8,偶尔没问题跑一会儿。。。
打电话给卖芯片的人,他说如果非高速传感器,建议硬件模拟
一直以为i2c在f4中没问题了,还是不行
模拟方式用30分钟就通了,跑了1小时都没问题,用库花了近2天。。。
如果用中断方式的话,这种问题应该也能够想办法绕过,方法就是增加超时机制,当检测到异常情况时复位I2C控制器,然后再重传上次的数据。其实I2C在很多芯片中都存在那么点问题,基本也都是在异常时复位控制器来解决的。
最悲催的是我们有一款产品,16路I2C数据交换器,基本上就没正式好用过。。。现在用的是NXP的片子了,第14路一进来,大家全卡死,最多13路,这个当初幸好没用stm32做啊。。。
你这个是一个I2C总线接16个从设备吗,不知道有没有正式采用stm32的I2C控制器做产品的,另外ST官方不知道有没有error datasheet这样的文档说明。