备份域详解
一、简介
在参考手册的电源控制章节,提到了备份域,BKPR是在RTC外设中用到,包含20个备份数据寄存器(80字节),备份域包括4KB的备份SRAM,以32位、16位或8位模式寻址,在VBAT有电前提下可视为内部EEPROM
-
对BKP寄存器的访问
- 将
RCC_APB1ENR
寄存器中的PWREN
位置1,使能电源接口时钟 - 将
PWR_CR
电源控制寄存器中的DBP
位置1,使能对备份域的访问 - 选择
RTC
时钟源 - 通过对
RCC
备份域控制寄存器RCC_BDCR
中的RTCEN[15]
位进行编程使能RTC
时钟
- 将
-
对BKPSRAM的访问
- 将
RCC_APB1ENR
寄存器中的PWREN
位置1,使能电源接口时钟 - 将
PWR_CR
寄存器中的DBP
位置1 - 通过将
RCC_AHB1ENR
寄存器中的BKPSRANEB
位置1,使能备份SRAM时钟
- 将
二、案例分析
- 读写备份寄存器
c
void MyBKP_Init()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //电源控制寄存器在APB1总线
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); //备份域寄存器在AHB1总线
PWR_BackupAccessCmd(ENABLE); //使能对备份域的访问
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //RTC时钟源
RCC_RTCCLKCmd(ENABLE); //使能RTC
}
- 读写备份域SRAM
c
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //电源控制寄存器在APB1总线
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); //备份域寄存器在AHB1总线
PWR_BackupAccessCmd(ENABLE); //使能对备份域的访问
/* 应用程序必须等待备份调压器就绪标志 (BRR) 置 1,指示在待机模式和 VBAT 模式下会保持写入 RAM 中的数据。 */
while(PWR_GetFlagStatus(PWR_FLAG_BRR) != SET);