研究生
最后登录1970-1-1
在线时间 小时
注册时间2018-7-14
|
/**
* @brief Wait for EEPROM Standby state
* @param 无
* @retval 无
*/
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);
}
这个函数是等待EEPROM响应的函数,但我不知道作者为什么在末尾加上一句这样的代码
I2C_ClearFlag(EEPROM_I2Cx, I2C_FLAG_AF);
参考手册上说,7位地址模式时,当收到地址的ACK后ADDR位置1.这正好是循环跳出的条件,这说明ACK=0,
也就是说执行到I2C_ClearFlag(EEPROM_I2Cx, I2C_FLAG_AF)这条语句时,ACK已应答,为何还要I2C_ClearFlag,
这不显得多余么?
请各位老师指教! |
|