我正在团队中使用 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/