学前班
最后登录1970-1-1
在线时间 小时
注册时间2014-10-31
|
本帖最后由 fyh529920 于 2014-10-31 18:09 编辑
野火哥以及各位网友大家好,我今天看了野火哥写的STM32库开发指南的I2C接口那里,我发现有个地方有问题,不知道是不是我的理解有错误,希望大家指导。我先贴他的原程序。
Void I2C_EE_BufferWrite()
{
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 ;
NumOfSingle = NumByteToWrite % I2C_PageSize ;
if(ADDr == 0)
{
if(NumOfPage == 0)
{
I2C_EE_Pagewrite(pBuffer , WriteADDr , NumOfSingle);
I2C_EE_WaitStandbyState();
}
else
{
while(NumOfPage--)
{
I2C_EE_Pagewrite(pBuffer , WriteADDr , I2C_PageOfSize);
I2C_EE_WaitStandbyState();
WriteADDr += I2C_PageSize;
pBuffer += I2C_PageSize;
}
if(NumOfSingle != 0)
{
I2C_EE_Pagewrite(pBuffer , WriteADDr , NumOfSingle);
I2C_EE_WaitStandbyState();
}
}
}
else
{
if(NumOfPage == 0) //有问题的 就是这里
{
I2C_EE_Pagewrite(pBuffer , WriteADDr , NumOfSingle);
I2C_EE_WaitStandbyState();
}
else
{
NumByteToWrite -= count ;
NumOfPage = NumByteToWrite / I2C_PageSize ;
NumOfSingle = NumByteToWrite % I2C_PageSize ;
.....//以下省略
}
}
}
我先说一下,我对这个函数中的几个声明的理解,
ADDr用于判断,是否从该页的最开始往下写。
count 如果不是从该页的最开始往下写,count 该页剩余的字节数。
NumOfPage 判断需要几页
NumOfSingle 判断需要几个字节
这是我的理解, 然后有问题的地方我在程序已经标注
此时的ADDr 不等于0, 那就说明,该写入地址,不是该页的首地址,
然后我可以这样想,一页不是有8个地址来着吗,分别标号0到7,那么吗,当我从第6个地址开始往下写时,
而我的要写入的数据大小为7个字节,那么不是就需要翻页了吗? 可是我标注的那段程序中并没有翻页,
我的理解就是这样,希望大家指点。
个人认为,应该加上一个 NumOfSingle 和 conut 的 比较, 然后根据比较的结果来判断需要翻页与否。
|
|