GD32实战16__备份域

原理

​ 备份域是只有一个目的,就是即使系统发生,该域也不会受影响,能够继续正常运行和保持数据不变。如图,为了达到该目的,备份域独立供电(图中1),独立时钟源(图中2),独立复位系统(图中3),独立的寄存器(图中4),还支持唤醒VDD域(图中5),同时提供APB通信接口(图中6)

在这里插入图片描述

配置方法

​ 其中,图中5会在下章(复位&电源控制&低功耗)说明,LSE、RTC和APB INTF1(图中6)的特性已经在RTC章节介绍过了,3、4是本章介绍的重点。

​ BREG(备份寄存器)共42个16位寄存器,可存储高达84个字节数据,从待机模式唤醒或系统复位都不会对这些寄存器造成影响。

​ 在复位之后,任何对备份寄存器的写操作都是禁止的,即备份寄存器和RTC不允许访问,使能备份寄存器和RTC的写操作步骤如下:

  1. 首先通过设置RCC_APB1CCR寄存器的PWREN和BKPEN位来打开电源和备份接口时钟

  2. 然后再通过设置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章节都已经用过了,可以仔细阅读。

测试方法

在这里插入图片描述

  1. 使用RTC的例子代码。
  2. 将上图中2、3脚接到一起,并安装电池,此步目的是为备份域提供备用电源(即电池供电)。
  3. 将开发板断电,等一段时间后,例如10s,再重新上电,会发现RTC没有重新初始化,且时间也正常运行。说明BKP_DR1寄存器没有被清除,且RTC的内核也在正常工作。
  4. 扣掉电池则不行。

代码路径

https://github.com/YaFood/GD32F103/tree/master/TestRTC

猜你喜欢

转载自blog.csdn.net/qq_17854661/article/details/91955505