硬件IIC驱动EEprom

1690170127132139.png

1690170127126661.png

我在你们提供的例程基础上,写完一页加读会数据操作,但是每次程序运行都会卡死在,读事件的EVENT5事件查询中,下面是程序附图,帮忙解答下

您好,在主机使用I2C_GenerateSTART()函数发送START条件后,主机必须等待事件5(启动条件已在I2C总线上正确释放),关于事件5,主要是对是否发送起始位(STAR1寄存器位0)、主从模式以及总线是忙还是空闲(STAR2寄存器位0、位1)进行判断,当这3位均为1,即已发送起始位、主模式且总线忙,会跳过while循环进行下一步操作。若卡死在while循环,可以检查一下以上寄存器3位是否为1。此外,卡死在EVT事件,可按照以下方法试一下能否解决问题:

1、程序中关闭自动应答,不使用I2C_AcknowledgeConfig(I2C2, ENABLE),可以按照这样试一下

2、在读之前重新初始化一下IIC或者使能IIC试一下;

3、关于EV5事件的清除,读SR1然后将地址写入DR寄存器将清除该事件,可在程序中按照该流程试一下;

4、可尝试降低一下通信速度看看是否会有问题;

5、加入超时机制,当卡死在某事件(while循环)一段时间之后,直接跳过该循环,等待下一次操作;

后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通,若方便可将程序发过来看一下


只有登录才能回复,可以选择微信账号登录