打印

求助,硬件IIC读写EEPROM,读写出错~

[复制链接]
495|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
香菇选手|  楼主 | 2018-7-14 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用硬件I2C,配置了GPIO和I2C模式,测试读写EEPROM,总是返回写数据失败!驱动编写如下,请问大神哪些地方有可能出错呢??怎么就是读写不进去??
使用的F767IGT6开发版

int main(void)
{

    SystemClock_Config();
    LED_GPIO_Config();
    LED_BLUE;
    DEBUG_USART_Config();
    SysTick_Init();
    I2C_EE_Init();
     
    if(I2C_Test() ==1)
    {
        LED_GREEN;
    }
    else
    {
        LED_RED;
    }

    while (1)
    {
        
    }  

   
}

void I2C_GPIO_Config(void)
{

  GPIO_InitTypeDef  GPIO_InitStructure;
   
  /*!< EEPROM_I2C Periph clock enable */
  EEPROM_I2C_CLK_ENABLE();
  
  /*!< EEPROM_I2C_SCL_GPIO_CLK and EEPROM_I2C_SDA_GPIO_CLK Periph clock enable */
  EEPROM_I2C_SCL_GPIO_CLK_ENABLE();
  EEPROM_I2C_SDA_GPIO_CLK_ENABLE();
  
  /*!< Configure EEPROM_I2C pins: SCL */   
  GPIO_InitStructure.Pin = EEPROM_I2C_SCL_PIN;
  GPIO_InitStructure.Mode = GPIO_MODE_AF_OD;
  GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
  GPIO_InitStructure.Pull  = GPIO_NOPULL;
  GPIO_InitStructure.Alternate = EEPROM_I2C_SCL_AF;
  HAL_GPIO_Init(EEPROM_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);

  /*!< Configure EEPROM_I2C pins: SDA */
  GPIO_InitStructure.Pin = EEPROM_I2C_SDA_PIN;
  HAL_GPIO_Init(EEPROM_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);

}

void I2C_Mode_Config(void)
{

    I2C_Handle.Instance = EEPROM_I2C;
    I2C_Handle.Init.Timing           = 0x90913232;//100KHz
    I2C_Handle.Init.OwnAddress1      = 0;
    I2C_Handle.Init.AddressingMode   = I2C_ADDRESSINGMODE_7BIT;
    I2C_Handle.Init.DualAddressMode  = I2C_DUALADDRESS_DISABLE;
    I2C_Handle.Init.OwnAddress2      = 0;
    I2C_Handle.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
    I2C_Handle.Init.GeneralCallMode  = I2C_GENERALCALL_DISABLE;
    I2C_Handle.Init.NoStretchMode    = I2C_NOSTRETCH_DISABLE;

    HAL_I2C_Init(&I2C_Handle);   

    HAL_I2CEx_AnalogFilter_Config(&I2C_Handle, I2C_ANALOGFILTER_ENABLE);   
}

void I2C_EE_Init(void)
{
  I2C_GPIO_Config();

  I2C_Mode_Config();
}

uint8_t I2C_Test(void)
{
    u16 i;

   printf("写入数据");
   
    for ( i=0; i<=255; i++ )
  {   
    I2c_Buf_Write = i;

    printf("0x%02X ", I2c_Buf_Write);
    if(i%16 == 15)   
        printf("

");   
   }

  if(HAL_I2C_Mem_Write(&I2C_Handle, 0xA0, 0, I2C_MEMADD_SIZE_8BIT,I2c_Buf_Write,256, 0x10) == HAL_OK )

   printf("写入数据成功");
  else
  {
     printf("写入数据失败");
      return 0;
  }
  printf("读出数据");
  if(HAL_I2C_IsDeviceReady(&I2C_Handle,0xA0, 10, 1000)!=HAL_OK)
    return 0;
  HAL_I2C_Mem_Read(&I2C_Handle,0xA1, 0, I2C_MEMADD_SIZE_8BIT,I2c_Buf_Read,256, 0x10);
    for (i=0; i<256; i++)
    {   
        if(I2c_Buf_Read != I2c_Buf_Write)
        {
            printf("0x%02X ", I2c_Buf_Read);
            printf("写入与读出不一致");
            return 0;
        }
    printf("0x%02X ", I2c_Buf_Read);
    if(i%16 == 15)   
        printf("

");
   
    }
   printf("读写测试成功");
    return 1;
}

使用特权

评论回复

相关帖子

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

本版积分规则

450

主题

462

帖子

0

粉丝