原理
备份域是只有一个目的,就是即使系统发生,该域也不会受影响,能够继续正常运行和保持数据不变。如图,为了达到该目的,备份域独立供电(图中1),独立时钟源(图中2),独立复位系统(图中3),独立的寄存器(图中4),还支持唤醒VDD域(图中5),同时提供APB通信接口(图中6)
配置方法
其中,图中5会在下章(复位&电源控制&低功耗)说明,LSE、RTC和APB INTF1(图中6)的特性已经在RTC章节介绍过了,3、4是本章介绍的重点。
BREG(备份寄存器)共42个16位寄存器,可存储高达84个字节数据,从待机模式唤醒或系统复位都不会对这些寄存器造成影响。
在复位之后,任何对备份寄存器的写操作都是禁止的,即备份寄存器和RTC不允许访问,使能备份寄存器和RTC的写操作步骤如下:
-
首先通过设置RCC_APB1CCR寄存器的PWREN和BKPEN位来打开电源和备份接口时钟
-
然后再通过设置PWR_CTLR寄存器的BKPWE位来使能写权限,代码如下
RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR | RCC_APB1PERIPH_BKP, ENABLE); PWR_BackupAccess_Enable(ENABLE);
寄存器读写接口如下
BKP_ReadBackupRegister(BKP_DR1);
BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
复位接口如下
void BKP_DeInit(void)
{
RCC_BackupReset_Enable(ENABLE);
RCC_BackupReset_Enable(DISABLE);
}
总结,以上代码在RTC章节都已经用过了,可以仔细阅读。
测试方法
- 使用RTC的例子代码。
- 将上图中2、3脚接到一起,并安装电池,此步目的是为备份域提供备用电源(即电池供电)。
- 将开发板断电,等一段时间后,例如10s,再重新上电,会发现RTC没有重新初始化,且时间也正常运行。说明BKP_DR1寄存器没有被清除,且RTC的内核也在正常工作。
- 扣掉电池则不行。