楼主你好!
我看到你在community里面说,遇到问题的时候: I2C Status register MSTPENDING BIT is 0 always or MSTSTATE is NACK Address/NACK Data
所以,建议你代码里面加上如果主机接收到NACK之后,退出,并且发送start重新开始。用if去判断,而不是用while在那死等。
具体可以参考user manual。
楼主,如果你要使用查询方式,你的代码请按照user manual34章去写,尤其在查询I2C_STAT_MSTSTATE状态的时候,用if去判断,如果不正确,那么放弃该次I2C通信,重新开始,不要死等,我看了你代码中很多死等的,甚至有一个如果状态不是你期望的状态,你在里面加了while(1),这种情况是很不利于软件恢复的。