微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的I2C-EEPROM已调试成功

STM32的I2C-EEPROM已调试成功

时间:11-17 来源:互联网 点击:

Addr = WriteAddr % I2C_PageSize;//写入地址是每页的第几位
count = I2C_PageSize - Addr;//在开始的一页要写入的个数
NumOfPage = NumByteToWrite / I2C_PageSize;//要写入的页数
NumOfSingle = NumByteToWrite % I2C_PageSize;//不足一页的个数
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
/* If WriteAddr is I2C_PageSize aligned */
if(Addr == 0) //写入地址是页的开始
{
/* If NumByteToWrite < I2C_PageSize */
if(NumOfPage == 0) //数据小于一页
{
I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);//写少于一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
}
/* If NumByteToWrite > I2C_PageSize */
else //数据大于等于一页
{
while(NumOfPage--)//要写入的页数
{
I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_PageSize); //写一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
WriteAddr += I2C_PageSize;
pBuffer += I2C_PageSize;
}

if(NumOfSingle!=0)//剩余数据小于一页
{
I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);//写少于一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
}
}
}
/* If WriteAddr is not I2C_PageSize aligned */
else //写入地址不是页的开始
{
/* If NumByteToWrite < I2C_PageSize */
if(NumOfPage== 0) //数据小于一页
{
I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);//写少于一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
}
/* If NumByteToWrite > I2C_PageSize */
else//数据大于等于一页
{
NumByteToWrite -= count;
NumOfPage = NumByteToWrite / I2C_PageSize; //重新计算要写入的页数
NumOfSingle = NumByteToWrite % I2C_PageSize;//重新计算不足一页的个数

if(count != 0)//在此处count一定不为0,此判断条件好象有点多余
{
I2C_EE_PageWrite(pBuffer, WriteAddr, count);//将开始的空间写满一页
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
WriteAddr += count;
pBuffer += count;
}

while(NumOfPage--)//要写入的页数
{
I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_PageSize);//写一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
WriteAddr += I2C_PageSize;
pBuffer += I2C_PageSize;
}
if(NumOfSingle != 0)//剩余数据小于一页
{
I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); //写少于一页的数据
I2C_EE_WaitEepromStandbyState();//EEPROM设为待命状态
}
}
}
}

/*******************************************************************************
* Function Name : I2C_EE_ByteWrite
* Description : Writes one byte to the I2C EEPROM.
* Input : - pBuffer : pointer to the buffer containing the data to be
* written to the EEPROM.
* - WriteAddr : EEPROMs internal address to write to.
* Output : None
* Return : None
pBuffer:指向要写入数据数组的指针
WriteAddr:24c02中要写入数据的首地址
*******************************************************************************/
void I2C_EE_ByteWrite(u8* pBuffer, u8 WriteAddr)//写一个字节到EEPROM
{
/* Send STRAT condition */
I2C_GenerateSTART(I2C1, ENABLE);//产生 I2Cx传输 START条件

/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //检查最近一次 I2C事件是否是输入的事件

/* Send EEPROM address for write */
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);//向指定的从 I2C设备传送地址字,选择发送方向
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//检查最近一次 I2C事件是否是输入的事件

/* Send the EEPROMs internal address to write to */
I2C_SendData(I2C1, WriteAddr);//通过外设 I2Cx发送地址
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//检查最近一次 I2C事件是否是输入的事件

/* Send the byte to be written */
I2C_SendData(I2C1, *pBuffer); //通过外设 I2Cx发送数据

/* Test on EV8 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//检查最近一次 I2C事件是否是输入的事件
/* Send STOP condition */
I2C_GenerateSTOP(I2C1, ENABLE);//产生 I2Cx传输 STOP条件
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top