如何使用stm32f100板读写I2C eeprom

如何使用stm32f100板读写I2C eeprom,c,stm32,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) {

我在一个使用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 );
}
在互联网上,most指南谈论HAL库,但正如你所见,我的同事不使用HAL库,而且考虑到我是stm32新手,我不知道如何在eeprom上读写数据。
一些建议?

这不是初始化代码,而是仅用于软件(又称位碰撞)I2C驱动程序的系统特定代码的一部分

除此之外,你还必须

  • RCC->APB2ENR
  • GPIOB->CRL
  • 将I2C时钟周期时间的1/2设为1/2,即,如果以100 kHz的频率运行,单个周期需要10μs,则需要5μs的延迟
然后可以使用与EEPROM通信。通信协议将在中详细描述


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

这不是初始化代码,而是仅用于软件(也称为位碰撞)I2C驱动程序的系统特定代码的一部分

除此之外,你还必须

  • RCC->APB2ENR
  • GPIOB->CRL
  • 将I2C时钟周期时间的1/2设为1/2,即,如果以100 kHz的频率运行,单个周期需要10μs,则需要5μs的延迟
然后可以使用与EEPROM通信。通信协议将在中详细描述

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