BKP/RTC

BKP/RTC
KayerBKP/RTC
1. BKP
1.1 BKP介绍
BKP(backup register,备份寄存器)。备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。它们处在备份域里,当VDD电源被切断,它们仍然由VBAT维持供电。
当系统在待机模式下被唤醒,或系统复位或电源复位时,它们也不会被复位。
此外,BKP控制寄存器用来管理侵入检测和RTC校准功能。
复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问:
通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟。
电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。
1.2 侵入检测功能
当TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器BKP_CR的TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。
设置BKP_CSR寄存器的TPIE位为1,当检测到侵入事件时就会产生一个中断。
1.3 RTC校准
为方便测量,RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存器(BKP_RTCCR)的CCO位来开启这一功能。
1.4 备份数据寄存器
用来存储用户数据。一共42个16位寄存器(大容量和互联型是42个,中小容量产品是20个),可以存84个字节的数据。
2. RTC
2.1 RTC介绍
RTC(Real Time Clock,实时时钟)。是一个****掉电*后仍然可以继续*运行*的*独立定时器****。
RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 ,RTC还包含用于管理低功耗模式的自动唤醒单元。
RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。由于其有一个专门供电系统,因此掉电之后还可以正常运行。
VDD掉电后,由VBAT负责给后备区域供电。VBAT由电路中的纽扣电池来供电,一般的电路设计中都会加上备用电池。只要这个电池有电,则后备区域就一直会有电供应。
2.2 RTC主要特征
- 可编程预分频器:分频因子高达 2^20
- 用于长期测量的 32 位可编程计数器
- 两个独立的时钟:用于 APB1 接口的 PCLK1 和 RTC 时钟(必须至少为比 PCLK1 时钟慢四倍)
- RTC 时钟源可以是以下任何一种:
- HSE 时钟除以 128
- LSE 振荡器时钟
- LSI 振荡器时钟
- 两种独立的 reset 类型:
- APB1 接口通过系统复位来复位
- RTC 核心(预分频器、闹钟、计数器和分频器)只能通过备份重置域重置
- 三条专用的可屏蔽中断线:
- 报警中断:用于生成软件可编程报警中断。
- 秒中断:用于生成具有可编程周期长度(最长 1 秒)。
- 溢出中断:用于检测内部可编程计数器何时计数到零。
2.3 RTC功能框图
2.3.1 RTC时钟源
RTC有3路时钟来源:HSE(8MHz)/128,LSE(32.768KHz),LSI(40KHz)。其中,如果 使用HSE或LSI的话,当主电源掉电的话,这两个始终都会受到影响,RTC就无法正常工作。所以,一般的通用做法是使用****LSE****。2个原因:一是LSE不受主电源掉电的影响,二是它的频率是我们都是选择32768Hz,正好是2^15,分频容易实现。
2.3.2 APB1接口
用来和APB1总线相连。此单元还包含一组 16 位寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线连接。
通过APB1接口可以访问RTC的相关寄存器(预分频值,计数器值,闹钟值)。
2.3.3 RTC预分频模块
RTC预分频模块属于后备区域,VDD掉电后,可以在VBAT下继续运行。包含了一个20位的可编程分频器(RTC预分频器)。它可编程产生 1 秒的 RTC 时间基准 TR_CLK。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。
2.3.4 32位可编程计数器
这个模块也属于后备区域,是一个32位的可编程计数器,可被初始化为当前的系统时间。一个32位的时钟计数器,按秒钟计算,可以记录4294967296秒,约合136年左右。
2.3.5 中断
三个中断
秒中断:每计时1s产生一次中断。
计数器溢出中断。136年才会产生溢出。
RTC闹钟中断。RCT_CNT和RTC_ALR会比较相等,如果相等表示闹钟时间到,会产生闹钟中断。
2.4 配置过程
- 查询 RTOFF,等待其值变为 1。
- 设置 CNF 位为1,进入配置模式。
- 写操作一个或多个 RTC 寄存器。
- 清除 CNF 位,以退出配置模式。
- 查询 RTOFF,等待其值变为 1 以确认写操作已经完成。
仅当CNF标志位被清除时,写操作才能进行。这个过程至少需要3个RTCCLK周期。