[mw_shl_code=c,true]void BKP_Write(void)
{
u8 i;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟
PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
// RTC_WaitForSynchro(); //等待RTC寄存器同步 使用这个函数需要打开RTC,否择有可能死在这里
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
for(i=1;i<43;i++)
{
if(i<21)BKP_WriteBackupRegister(0x0000+i*4,read_D (7450+i-1,1)); //D7450 ~ D7469 共20个D电池保存
if(i>20 && i<31)BKP_WriteBackupRegister(0x0000+i*4,read_D (7450+i-1,1)); //D7479
if(i>30 && i<41)BKP_WriteBackupRegister(0x0000+i*4,read_D (7450+i-1,1)); //D7489
if(i==41)BKP_WriteBackupRegister(0x0000+i*4,all_data[0x009D]); //M2512 ~ M2527 共16个M电池保存
if(i==42)BKP_WriteBackupRegister(0x0000+i*4,sysdata);
}
}
void BKP_Read(void)
{
u8 i;
for(i=1;i<43;i++)
{
if(i<21)write_D (7450+i-1,1,BKP_ReadBackupRegister(0x0000+i*4)); //从指定的后备寄存器中读出数据
if(i>20 && i<31)write_D (7450+i-1,1,BKP_ReadBackupRegister(0x0000+i*4));
if(i>30 && i<41)write_D (7450+i-1,1,BKP_ReadBackupRegister(0x0000+i*4));
if(i==41)all_data[0x009D] = BKP_ReadBackupRegister(0x0000+i*4);
if(i==42) sysdata = BKP_ReadBackupRegister(0x0000+i*4);
}
}[/mw_shl_code]
|