1. 首先 检查RTC电池是否装载,没电池的话,设备掉电也保存不了数据。

备份寄存器就是普通的RAM,需要配合外接电池使用,如果没有电池,就不能掉电保持数据。

因为是普通RAM,所以不存在写入次数的问题,理论上是无限次的。

其次在RCC_Configuration(); 中配置备份寄存器的如下:

/* Enable PWR(电源控制) and BKP clock */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

/* Enable write access to Backup domain */

PWR_BackupAccessCmd(ENABLE);

/* Clear Tamper pin Event(TE) pending flag */

BKP_ClearFlag();

2. 然后就可以开始读写功能了。

void WriteBKP(u16 Data,u8 DRNumber)       // 还可加入一些加密算法;DRNumber (1-9)

{

switch(DRNumber)

{

case 0x01:

BKP_WriteBackupRegister(BKP_DR1,Data);

break;

case 0x02:

BKP_WriteBackupRegister(BKP_DR2,Data);

break;

case 0x03:

BKP_WriteBackupRegister(BKP_DR3,Data);

break;

case 0x04:

BKP_WriteBackupRegister(BKP_DR4,Data);

break;

case 0x05:

BKP_WriteBackupRegister(BKP_DR5,Data);

break;

case 0x06:

BKP_WriteBackupRegister(BKP_DR6,Data);

break;

case 0x07:

BKP_WriteBackupRegister(BKP_DR7,Data);

break;

case 0x08:

BKP_WriteBackupRegister(BKP_DR8,Data);

break;

case 0x09:

BKP_WriteBackupRegister(BKP_DR9,Data);

break;

case 0x10:

BKP_WriteBackupRegister(BKP_DR10,Data);

break;

default:

BKP_WriteBackupRegister(BKP_DR1,Data);

}

BKP_WriteBackupRegister(BKP_DR10,CHECK_CODE);

}

u8 CheckBKP(void)

{

if( BKP_ReadBackupRegister(BKP_DR1) == 0x89)   // 如果此位数据丢失,则BPK数据丢失

return 1;

else

return 0;

}

3.调试总结:

可以在IAR或者keil的watch 中查看值是否写入,输入BKP_DR1,可以查看BKP_DR1中的数据是否写入正确,其他的备份寄存器类似操作。

另外在程序中有RTC程序的话,要注意配置顺序,因为RTC也对备份寄存器操作。我就是程序中有RTC程序,所以写入的数据老是被清零(RTC程序会初始化备份寄存器中的数据),浪费了点时间才找到原因所在。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐