c - 如何使用stm32f100板读写I2C eeprom

标签 c stm32 eeprom

我正在团队中使用 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 上读取和写入数据。 一些建议?

最佳答案

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

除此之外,你还必须

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

然后可以使用general I2C code与EEPROM通信。 EEPROM datasheet 中详细描述了通信协议(protocol).

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

关于c - 如何使用stm32f100板读写I2C eeprom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174245/

相关文章:

arm - 让 bxCan 在 STM32f3 Discovery 上工作

arduino - 将字符串写入 Arduino ESP32 的永久闪存

c - C 中缺少数组数据

c - getchar() 在 C 中工作

c - 使用 UART 检查从 SPH0645 Mic I2S 协议(protocol)接收的数据

c++ - 如何使用STM32单片机生成REAL随机数?

PROGMEM 中保存的数据类型以后可以在程序中更改吗?

arduino - 是否有用于微 Controller EEPROM损耗均衡的通用算法?

python - 有人有 Linux 上 fd_set 的 gdb pretty-print 代码吗?

c - Gtk+ 3.0 : undefined reference 中的 GtkGlArea