
stm32f103使用eeprom作为寄存器,断电重启后保存的数据消失,请大神看下程序是否有问题?
voidI2C_XieRu(void)//保存数据到EEPROM{num_I2C++;if(num_I2C>=20)//最多保存20组数据num_I2C=0;I2c_Bu...
void I2C_XieRu(void)//保存数据到EEPROM
{
num_I2C++;
if(num_I2C>=20)//最多保存20组数据
num_I2C=0;
I2c_Buf_Write[240]=num_I2C;//写入起始标志
I2c_Buf_Write[num_I2C*12+0]=DataX%256;
I2c_Buf_Write[num_I2C*12+1]=DataX/256;
I2c_Buf_Write[num_I2C*12+2]=DataY%256;
I2c_Buf_Write[num_I2C*12+3]=DataY/256;
I2c_Buf_Write[num_I2C*12+4]=acccy%256;
I2c_Buf_Write[num_I2C*12+5]=acccy/256;
I2c_Buf_Write[num_I2C*12+6]=calendar.min;//分
I2c_Buf_Write[num_I2C*12+7]=calendar.hour;//时
I2c_Buf_Write[num_I2C*12+8]=calendar.w_date;//日
I2c_Buf_Write[num_I2C*12+9]=calendar.w_month;//月
I2c_Buf_Write[num_I2C*12+10]=calendar.w_year%256;//年L
I2c_Buf_Write[num_I2C*12+11]=calendar.w_year/256;//年H
AT24CXX_Write( EEP_Firstpage, I2c_Buf_Write, 256); //写入
}
void I2C_DuChu(void)//读出EEPROM数据
{
u8 i;
AT24CXX_Read( EEP_Firstpage, I2c_Buf_Write, 256); //读出
for(i=0;i<240;i++)
{
I2c_Buf_Write[i]=I2c_Buf_Read[i];
}
num_I2C=I2c_Buf_Read[240];
} 展开
{
num_I2C++;
if(num_I2C>=20)//最多保存20组数据
num_I2C=0;
I2c_Buf_Write[240]=num_I2C;//写入起始标志
I2c_Buf_Write[num_I2C*12+0]=DataX%256;
I2c_Buf_Write[num_I2C*12+1]=DataX/256;
I2c_Buf_Write[num_I2C*12+2]=DataY%256;
I2c_Buf_Write[num_I2C*12+3]=DataY/256;
I2c_Buf_Write[num_I2C*12+4]=acccy%256;
I2c_Buf_Write[num_I2C*12+5]=acccy/256;
I2c_Buf_Write[num_I2C*12+6]=calendar.min;//分
I2c_Buf_Write[num_I2C*12+7]=calendar.hour;//时
I2c_Buf_Write[num_I2C*12+8]=calendar.w_date;//日
I2c_Buf_Write[num_I2C*12+9]=calendar.w_month;//月
I2c_Buf_Write[num_I2C*12+10]=calendar.w_year%256;//年L
I2c_Buf_Write[num_I2C*12+11]=calendar.w_year/256;//年H
AT24CXX_Write( EEP_Firstpage, I2c_Buf_Write, 256); //写入
}
void I2C_DuChu(void)//读出EEPROM数据
{
u8 i;
AT24CXX_Read( EEP_Firstpage, I2c_Buf_Write, 256); //读出
for(i=0;i<240;i++)
{
I2c_Buf_Write[i]=I2c_Buf_Read[i];
}
num_I2C=I2c_Buf_Read[240];
} 展开
1个回答
展开全部
系统上电之后,要看一下数据是否写入正确。就是写入后会读,看看写入的数据是不是正确,如果没问题说明不是数据写入和读出的问题。
看你的程序应该是保存时间信息,我猜测是不是你的程序在初始化的时候每次都写入了一个固定的值,造成断电之后,再上电把之前断电前的信息给覆盖了,造成了掉电EEPROM信息丢失的假象。
建议把你的程序完整的放上来,或者是把初始化程序和主程序都放上来,这样好分析一些。
看你的程序应该是保存时间信息,我猜测是不是你的程序在初始化的时候每次都写入了一个固定的值,造成断电之后,再上电把之前断电前的信息给覆盖了,造成了掉电EEPROM信息丢失的假象。
建议把你的程序完整的放上来,或者是把初始化程序和主程序都放上来,这样好分析一些。
更多追问追答
追问
大神你有邮箱吗,我把程序单独发给你,你帮我看下可以吗
追答
david_linux@163.com
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询