STM32之I2C_EEPROM读写

本文详细介绍了如何使用STM32通过I2C接口进行EEPROM的读写操作,包括数据的分页处理、页写入时序及事件检测。在写入时,首先对缓冲区进行分页处理,然后调用I2C_EE_PageWrite函数进行数据传输,并在每次写入后等待EEPROM进入待机状态。读取过程涉及到两次起始信号的发送,确保通讯正常进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EEPROM的数据组织形式:
EEPROM设备把它的存储矩阵进行了分页处理:
这里写图片描述

型号是AT24C02的EEPROM分为32页,每一页可以存储8个字节的数据,若在同一页写入超过8字节,则超过的部分会被写在该页的起始地址(也就是一开始写好的部分会被覆盖).
为了把连续的缓冲区数组按页写入到 EEPROM ,就需要对缓冲区进行分页处理.I2C_EE_BufferWrite()是根据输入的缓冲区大小参数 NumByteToWrite,计算出需要写入多少页,计算写入位置。
分页处理好之后,调用 I2C_EE_PageWrite(),这个函数是与 EEPROM进行I2C通讯的最底层函数(里面都是调用STM32库函数)

EEPROM写入 I2C_EE_BufferWrite();
u8 I2c_Buf_Write[256];
//#define EEP_Firstpage 0x00(加个//免得字体放大)

void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite)
{
u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0;

/*计算出要写的页数和分页*/
Addr = WriteAddr % I2C_PageSize; 
count = I2C_PageSize - Addr;
NumOfPage = NumByteToWrite / I2C_PageSize; 

if(Addr == 0)
{
    if(NumOfPage == 0)
    {
        I2C_EE_PageWrite(pBuffer,WriteAddr,NumOfSingle);
        I2C_EE_WaitEepromStandbyState(); //检测是否为Standby状态,才可以进行下一步操作
    }
    else
    {
        while(NumOfPage--)
        {
            I2C_EE_PageWrite(pBuffer,WriteAddr,I2C_PageSize);
            I2C_EE_WaitEepromStandbyState();
            WriteAddr += I2C_PageSize;
            pBuffer += I2C_PageSize;
        }

        if(NumOfSingle!=0)
        {
            I2C_EE_PageWrite(pBuffer,WriteAddr,NumOfSingle);
            I2C_EE_WaitEepromStandbyState();
        }
    }
}

else
{
    if(NumOfPage == 0)
    {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值