小学生
最后登录1970-1-1
在线时间 小时
注册时间2021-2-7
|
发表于 2022-3-17 18:53:40
|
显示全部楼层
我也遇见了同样的问题I2C_EE_BufferRead卡死在检测EV6的循环中
while(!I2C_CheckEvent(EEPROM_I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(11);
}
然后我在I2C_EE_BufferRead读数据前加入这个函数I2C_EE_WaitEepromStandbyState()等待EEPROM收到地址的ACK,之后可以接收到数据了。
void I2C_EE_WaitEepromStandbyState(void)
{
vu16 SR1_Tmp = 0;
do
{
/* Send START condition */
I2C_GenerateSTART(EEPROM_I2Cx, ENABLE);
/* Read I2C1 SR1 register */
SR1_Tmp = I2C_ReadRegister(EEPROM_I2Cx, I2C_Register_SR1);
/* Send EEPROM address for write */
I2C_Send7bitAddress(EEPROM_I2Cx, EEPROM_ADDRESS, I2C_Direction_Transmitter);
}while(!(I2C_ReadRegister(EEPROM_I2Cx, I2C_Register_SR1) & 0x0002));
/* Clear AF flag */
I2C_ClearFlag(EEPROM_I2Cx, I2C_FLAG_AF);
/* STOP condition */
I2C_GenerateSTOP(EEPROM_I2Cx, ENABLE);
}
手册上写I2C_SR1 bit1 ADDR:地址已被发送(主模式) 7位地址模式时,当收到地址的ACK后该位被置’1’。 |
|