在I2C的Example 5 中有个i2c_ee.c文件,其中这个函数 void I2C_EE_WaitEepromStandbyState(void) { vu16 SR1_Tmp = 0;
do { /* Send START condition */ I2C_GenerateSTART(I2C1, ENABLE); /* Read I2C1 SR1 register */ SR1_Tmp = I2C_ReadRegister(I2C1, I2C_Register_SR1); /* Send EEPROM address for write */ I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter); }while(!(I2C_ReadRegister(I2C1, I2C_Register_SR1) & 0x0002)); /* Clear AF flag */ I2C_ClearFlag(I2C1, I2C_FLAG_AF); } 1.这个函数在执行中do{ }while循环执行结束后EEPROM作为I2C的从器件会怎样响应?是等待接数据还是不做反应?如果是等待接收数据,那么如果下次再对此EEPROM写入数据时,在总线上的起始条件EEPROM会不会将这个起始条件作为重复的起始条件而影响接收?
2.在运行例程时我试着将这个函数屏蔽掉,结果利用I2C读写EK-STM32F开发板(南京万利买的)上的24C02无法正常继续下去。由此我判断在上面的函数运行结束后I2C外设只是收到了EEPROM的应答,此时的EEPROM已经做好了再次通讯的准备,EEPROM对此次接收到自身地址的写命令不予理会。
3.SR1_Tmp = I2C_ReadRegister(I2C1, I2C_Register_SR1);语句似乎没有作用。莫非是在读这个寄存器的值的同时会将寄存器内数据清除?
4.在得到2的结论后将此函数用1s的延时程序代替,还是不能正常读写24C02,莫非这个函数还有其他什么用途?
对于这个问题,希望高手们不吝赐教!! |