STM32 AT24C02 读写函数的应用:蓝桥杯 E2PROM

本文 代码使用 HAL 库 。

文章目录

  • 前言
  • 一、AT24C02 读写函数:
  • 1. 写函数
  • 2. 读函数:
  • 二. AT24C02 读写地址,原理图
  • 三. 延时问题
  • 总结
  • 下一节讲解 MCP4017。
  • 使用 E2PROM 来计算板子的上电次数 实验效果。

  • 前言

    本文 先列出 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

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 AT24C02 读写函数的应用:蓝桥杯 E2PROM

    发表回复