【问题标题】:How to write and read an I2C eeprom using stm32f100 board如何使用 stm32f100 板读写 I2C eeprom
【发布时间】:2019-07-24 02:01:23
【问题描述】:

我正在团队中使用 stm32 f100 系列板进行项目。我应该使用外部 I2C eeprom 来存储一些数据,eeprom 如下:CAT24C512WI-GT3,我还有这个 I2C eeprom 的初始化代码:

void io_ee_scl(char s)
{
    if(s)
        GPIOB->BSRR=GPIO_PIN_6;
    else
        GPIOB->BRR=GPIO_PIN_6;
}

void io_ee_sda(char s)
{
    if(s)
        GPIOB->BSRR=GPIO_PIN_7;
    else
        GPIOB->BRR=GPIO_PIN_7;

}

void io_ee_wp(char s)
{
    if(s)
        GPIOB->BSRR=GPIO_PIN_5;
    else
        GPIOB->BRR=GPIO_PIN_5;
}
char read_eeprom()  //read eeprom function
{
    return ( (GPIOB->IDR&GPIO_PIN_7) ? 1 : 0 );
}

在互联网上,大多数指南都在谈论 HAL 库,但您可以看到我的同事不使用 HAL 库,并且考虑到我是 stm32 的新手,我不知道如何在 eeprom 上读取和写入数据。 有什么建议吗?

【问题讨论】:

    标签: c stm32 eeprom


    【解决方案1】:

    这不是初始化代码,而是纯软件(也称为 bit-banging)I2C 驱动程序的系统特定代码的一部分。

    除此之外,你还必须

    • 启用RCC->APB2ENR中的GPIOB外设时钟
    • GPIOB->CRL 中将两个引脚置于漏极开路、通用输出模式
    • 对于 I2C 时钟周期时间的 1/2 有一个 delay function,即如果它应该以 100 kHz 运行,单个周期需要 10 μs,你需要一个延迟 5 μs。

    然后可以使用general I2C code 与 EEPROM 进行通信。通信协议在EEPROM datasheet中有详细描述。

    也可以使用 STM32F1 的内置 I2C 外设,但对于初学者来说,作为该平台上的第一项任务,这将是相当具有挑战性的。不过,如果您想这样做,您可以研究相关的 HAL 源代码,看看它是如何完成的。

    【讨论】:

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