打印

I2C EEPROM 程序修改

[复制链接]
475|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3月的尾巴|  楼主 | 2018-7-3 12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习STM32有一段时间了

进度有点慢,到I2C通信这里的发现例有有个小BUG

问题会出现在:当写入地址不在页首地址,字节量小于一页,写入页剩余小于写入字节量时。

就是出现回到当前页起始地址写入的错误。

从例程序上作了一些修改,请大神看一下有没有不足之处

/**
  * @brief   将缓冲区中的数据写到I2C EEPROM中
  * @param   
  *                @arg pBuffer:缓冲区指针
  *                @arg WriteAddr:写地址
  *     @arg NumByteToWrite:写的字节数
  * @retval  无
  */
void I2C_EEPROM_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite)
{
        u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0;

        Addr = WriteAddr % I2C_PageSize; //判断写入地址与页起始地址距离
        if(Addr != 0)                    //写入起始地址不在页起始位置
        {
                count = I2C_PageSize - Addr; //写入起始页最多还能写入字节数
        }
        
        if(NumByteToWrite > count)       //如果写入数量大于起始页还能写入的数量,先把起始页写完(count != 0,等于0无所谓)
        {
                NumByteToWrite -= count;     //减去起始页写入的字节数
        }
        else count = 0;
        NumOfPage =  NumByteToWrite / I2C_PageSize;  //剩余要写入的整页数
        NumOfSingle = NumByteToWrite % I2C_PageSize; //不足一页的写入数量
        
        //写入不在页起始地址,写完当前页剩余能写的量
        if(count != 0)
        {
                I2C_EEPROM_PageWrite(pBuffer, WriteAddr, count);
                I2C_EEPROM_WaitEepromStandbyState();
                WriteAddr += count;
                pBuffer += count;
        }
        //写入一页
        while(NumOfPage--)
        {
                I2C_EEPROM_PageWrite(pBuffer, WriteAddr, I2C_PageSize);
                I2C_EEPROM_WaitEepromStandbyState();
                WriteAddr +=  I2C_PageSize;
                pBuffer += I2C_PageSize;
        }
        //写入不足一页
        if(NumOfSingle != 0)
        {
                I2C_EEPROM_PageWrite(pBuffer, WriteAddr, NumOfSingle);
                I2C_EEPROM_WaitEepromStandbyState();
        }
        
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

433

帖子

0

粉丝