STM32 AT24C02 读写函数的应用:蓝桥杯 E2PROM
本文 代码使用
HAL
库 。
文章目录
前言
本文 先列出 AT24C02 读写函数
,再对其进行详细讲解 。
比赛会给出我们 iic 的底层驱动代码,我们需要自己写出 AT24C02 读写函数。
一、AT24C02 读写函数:
这里 写入读取 的数据是 单 字节的,不要超过相应的范围 。
1. 写函数
void EEPROM_Write(u8 add, u8 dat)
{
I2CStart(); //起始信号
I2CSendByte(0xa0); //控制字,写
I2CWaitAck(); //等待响应
I2CSendByte(add); //发送地址
I2CWaitAck();
I2CSendByte(dat); //发送要写入的数据
I2CWaitAck();
I2CStop(); //停止
delay1(5); //延时 5 ms
}
2. 读函数:
u8 EEPROM_Read(u8 add)
{
u8 dat;
I2CStart(); //起始信号
I2CSendByte(0xa0); //控制字,写
I2CWaitAck(); //等待响应
I2CSendByte(add); //发送地址
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1); //控制字,读
I2CWaitAck();
dat = I2CReceiveByte();
I2CSendNotAck(); //发送非确认信号
I2CStop(); //停止
return(dat);
}
向地址 0x20 处,写入 数据 0x55, 再将其数据读出。( AT24C02 内部有256个地址,是从 0x00 到 0xFF )
u8 data =0;
EEPROM_Write(0x20, 0x55);
data = EEPROM_Read(0x20);
二. AT24C02 读写地址,原理图
1.下面是 AT24C02 的参考电路:
A0 , A1 , A2
(官方图片写错了,应该是 A2,不是 A3) 是 器件地址选择引脚,都接地。
2.参考 AT24C02 的数据手册 可以我们可以得到 E2PROM 设备地址
:
由于 AT24C02 是一个 2K 位串行CMOS E2PROM ,所以我们使用第一个设备地址。
一共有 8 位,最后一位是 R / W (读写位)。
从上面的图中可以看到 A0 , A1 , A2
都接地,就写为 0。
当读数据时,最后一位是 1;写数据时,最后一位是 0 。
所以,读数据时,器件地址:1010 001, 即 0xa1 代表读 AT24C02 的数据。
写数据时,器件地址:1010 000, 即 0xa0 代表向 AT24C02 写数据。
三. 延时问题
需要注意的是,连续多个字节写入EEPROM要进行 5ms 的延时,这是因为EEPROM处理数据的速度远小于单片机的速度,为了防止数据丢失,所以需要延时。
delay1(5); //延时 5 ms
总结
下一节讲解 MCP4017。
使用 E2PROM 来计算板子的上电次数 实验效果。
大家可以使用 E2PROM 来计算板子的上电次数(按下 RESET 复位键即可增加上电次数),实验效果放在B占,在以下网址:
https://www.bilibili.com/video/BV19R4y187eS/?vd_source=986c364d205fa1124b337bc665f57c4f