【问题标题】:Error in writing/Reading to I2C EEPROM + STM32F0 Discovery写入/读取 I2C EEPROM + STM32F0 发现错误
【发布时间】:2017-02-23 15:33:05
【问题描述】:

我正在努力写入或读取 AT24C256 I2C EEPROM。我正在使用 STM32F0 探索板读取/写入 EEPROM。

我正在使用 HAL 库和 CUBEMX 作为基本结构。我编写了小代码来测试读写功能。在调试时,Test 的值始终为“2”,而如果成功写入内存,则应该为“1”。这是:-

  #define ADDR_24LCxx_Write 0x50
  #define ADDR_24LCxx_Read 0x50
  #define BufferSize 5
  uint8_t WriteBuffer[BufferSize],ReadBuffer[BufferSize],Test;
  uint16_t i;

  I2C_HandleTypeDef hi2c1;

  int main(void)
  {

   HAL_Init();

   /* Configure the system clock */
   SystemClock_Config();

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_I2C1_Init();

   for(i=0; i<5; i++)
    {
            WriteBuffer[i]=i; 
    }

    if(HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,BufferSize, 0x10) == HAL_OK)
    {
            Test = 1;
    }

    else
    {
            Test = 2;
    }

    HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize, 0x10);

    if(memcmp(WriteBuffer,ReadBuffer,BufferSize) == 0 ) /* check date */
    {
            Test = 3;
    }

    else
    {
            Test = 4;
    }

   }

【问题讨论】:

    标签: hal eeprom stm32f0


    【解决方案1】:

    您应该单步执行函数 HAL_I2C_Mem_Write 以了解它为什么不返回 HAL_OK。更具体地说,您应该检查它究竟返回什么,它会对您有所帮助。 查看您的代码,我确信问题出在 I2C 地址上。在 AT24C256 数据表中,他们说 I2C 地址是:

    1 0 1 0 0 A1 A2 读/写

    假设您将引脚 A1 和 A2 连接到 GND,则 I2C 地址为:

    1 0 1 0 0 0 0 读/写

    在十六进制中,I2C 地址为 0xA0。所以,改变你的地址定义如下:

     #define ADDR_24LCxx 0xA0
    

    在 HAL 函数中:

    HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,BufferSize, 100)
    HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize, 100)
    

    请注意,我还将超时时间增加到 100 毫秒。对于测试,你真的不想遇到超时问题......

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多