欢迎光临
我们一直在努力

EEPROM读写_STM32HAL库

基于 I2C 协议向 EEPROM 写入单字节数据的函数

功能是将数据 dat 写入到指定地址 addr 中。

void eeprom_write(uint8_t addr,uint8_t dat)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CSendByte(dat);
I2CWaitAck();
I2CStop();

HAL_Delay(20);
}

  • 启动通信并发送设备地址

    • I2CStart():发起 I2C 起始信号,开始通信。
    • I2CSendByte(0xa0):发送 EEPROM 写设备地址(0xa0 高 7 位为设备地址,最低位 0 表示写操作)。
    • I2CWaitAck():等待 EEPROM 应答,确认设备已响应。
  • 发送目标地址与数据

    • I2CSendByte(addr):发送要写入的目标存储单元地址。
    • I2CWaitAck():等待应答,确认地址已被接收。
    • I2CSendByte(dat):发送要写入的数据字节。
    • I2CWaitAck():等待应答,确认数据已被接收。
  • 结束通信与等待写入完成

    • I2CStop():发送停止信号,结束本次 I2C 通信。
    • HAL_Delay(20):延迟 20ms,等待 EEPROM 内部完成数据写入(EEPROM 写入需要时间,此延迟可避免后续操作冲突)。
  • 基于 I2C 协议读取 EEPROM 设备数据的函数

    功能是从指定地址 addr 读取一个字节的数据。

    uint8_t eeprom_read(uint8_t addr)
    {
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CStop();

    I2CStart();
    I2CSendByte(0xa1);
    I2CWaitAck();
    uint8_t dat=I2CReceiveByte();
    I2CSendNotAck();
    I2CStop();

    return dat;
    }

  • 第一阶段:写入目标地址

    • I2CStart():发起 I2C 起始信号,启动通信。
    • I2CSendByte(0xa0):发送 EEPROM 写设备地址(0xa0 是常见的 EEPROM 写地址,高 7 位为设备地址,最低位 0 表示写操作)。
    • I2CWaitAck():等待从设备(EEPROM)的应答信号,确认设备已准备好。
    • I2CSendByte(addr):发送要读取的目标存储单元地址。
    • I2CWaitAck():再次等待应答,确认地址已被接收。
    • I2CStop():发送停止信号,结束写地址阶段。
  • 第二阶段:读取数据

    • I2CStart():再次发起起始信号,开启新一轮通信。
    • I2CSendByte(0xa1):发送 EEPROM 读设备地址(0xa1 最低位 1 表示读操作)。
    • I2CWaitAck():等待设备应答。
    • uint8_t dat=I2CReceiveByte():从总线上读取一个字节的数据并保存到变量 dat。
    • I2CSendNotAck():发送非应答信号(NACK),告诉设备不需要再发送数据。
    • I2CStop():发送停止信号,结束本次通信。
  • 返回结果

    • return dat:将读取到的数据返回给调用者。
  • 赞(0)
    未经允许不得转载:171主机测评 » EEPROM读写_STM32HAL库
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址