打印

I2C例程中的一些小问题,求解答

[复制链接]
427|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
你画我瞎|  楼主 | 2019-11-27 13:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天学习到了I2C这一章节,感觉难度骤增啊,例程里面有几处疑惑的地方,百度了半天也没搞明白,特来发帖求教。while(NumByteToRead)  
  {
    if(NumByteToRead == 1)
    {
      I2C_AcknowledgeConfig(I2C1, DISABLE);

      I2C_GenerateSTOP(I2C1, ENABLE);
    }

    if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
    {      
      *pBuffer = I2C_ReceiveData(I2C1);
      pBuffer++;
      NumByteToRead--;        
    }   
  }
  I2C_AcknowledgeConfig(I2C1, ENABLE);
}


这段代码中关于*pBuffer = I2C_ReceiveData(I2C1);这句话解释是“返回通过I2C最近接收的数据”,我想问的第一个问题:pBuffer[0]中是I2C中的第一个数据还是最后一个数据,比如我向I2C中输入了1,2,3,4,5.那么是1还是5?第二个问题:在循环一次后,再次到了*pBuffer = I2C_ReceiveData(I2C1)这句话时候,库函数I2C_ReceiveData(I2C1)会自动移了一个数据吗?pBuffer[1]直接就等于2(或者4)?



还有就是下面这段等待函数中:
void I2C_EE_WaitEepromStandbyState(void)      
{
  vu16 SR1_Tmp = 0;

  do
  {
    I2C_GenerateSTART(I2C1, ENABLE);
    SR1_Tmp = I2C_ReadRegister(I2C1, I2C_Register_SR1);
    I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
  }while(!(I2C_ReadRegister(I2C1, I2C_Register_SR1) & 0x0002));

  I2C_ClearFlag(I2C1, I2C_FLAG_AF);
  I2C_GenerateSTOP(I2C1, ENABLE);
}


SR1_Tmp = I2C_ReadRegister(I2C1, I2C_Register_SR1);这句话有什么作用?

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝