打印

例程中I2C从EEPROM里面写数据函数中读I2C是否Busy时,发现GetFlag返回的值不对

[复制链接]
296|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小的人呀|  楼主 | 2019-11-16 18:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例程中:检查忙状态函数I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY),其值一直是0X08000C90, 不是FlagStatus返回类型,
所以例程无法完成写和读,这是为什么?请群主测试一下,用的是硬件i2c I2C1例程, 单步调试的时候,卡死在这一步!


/**
  * @brief   在EEPROM的一个写循环中可以写多个字节,但一次写入的字节数
  *          不能超过EEPROM页的大小,AT24C02每页有8个字节
  * @param   
  *  @arg pBuffer:缓冲区指针
  *  @arg WriteAddr:写地址
  *     @arg NumByteToWrite:写的字节数
  * @retval  无
  */
void I2C_EE_PageWrite(u8* pBuffer, u8 WriteAddr, u8 NumByteToWrite)
{
    while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008                    //检查忙状态函数I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY),其值一直是0X08000C90, 不是FlagStatus返回类型
   
  /* Send START condition */
  I2C_GenerateSTART(I2C1, ENABLE);
  
  /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  
  /* Send EEPROM address for write */
  I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
  
  /* Test on EV6 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
  /* Send the EEPROM's internal address to write to */   
  I2C_SendData(I2C1, WriteAddr);  
  /* Test on EV8 and clear it */
  while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  /* While there is data to be written */
  while(NumByteToWrite--)  
  {
    /* Send the current byte */
    I2C_SendData(I2C1, *pBuffer);
    /* Point to the next byte to be written */
    pBuffer++;
  
    /* Test on EV8 and clear it */
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  }
  /* Send STOP condition */
  I2C_GenerateSTOP(I2C1, ENABLE);
}

使用特权

评论回复

相关帖子

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

本版积分规则

399

主题

399

帖子

0

粉丝