打印
[应用相关]

STM32的I2C例程问题

[复制链接]
3442|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chunfeng12|  楼主 | 2008-4-23 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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,莫非这个函数还有其他什么用途?

对于这个问题,希望高手们不吝赐教!!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

52

帖子

1

粉丝