STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

时间:2024-05-20 13:25:46

 RTC
   RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
   RCC_BDCR:备份域控制寄存器。其LSEON、LSEBYP、RTCSEL和RTCEN位处于备份域,在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置 1 后才能对这些位进行改动;这些位只能由备份域复位清除。
   备份域复位:软件复位,RCC_BDCR 寄存器 BDRST位置1产生;
               在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 
   系统复位后,对后备寄存器和RTC的访问被禁止,执行以下操作将使能对后备寄存器和RTC的访问。

   后备寄存器和RTC的访问:
   1)设置寄存器 RCC_APB1ENR 的PWREN 和BKPEN位,使能电源和后备接口时钟。
   RCC_APB1ENR:APB1外设时钟使能寄存器;
   PWREN:电源接口时钟使能位,置1有效;BKPEN:备份接口时钟使能位,置1有效;
   后备接口为:RTC与APB1总线连接的的APB1接口,系统通过APB1接口访问RTC寄存器;

   2)电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。 
   PWR_CR:电源控制寄存器,DPB位:取消后备区域的写保护位,置1则允许写入RTC和后备寄存器。

   组成部分:
   1)APB1接口,由APB1总线时钟驱动,用来与APB1总线相连。此单元还包含一组16位寄存器(RTC_CRH/L),可通过APB1总线    对其进行读写操作。
   2)RTC核心,由一组可编程计数器组成,分成两个主要模块:
      i) 是RTC的预分频模块(RTC_PRL),包含了一个20位的RTC预分频器,可编程产生最长为1秒的RTC时间基准TR_CLK。如果在RTC_CR寄存器中设置了相应的允许位(RTC_CRH-SECIE位),则在每个TR_CLK周期中RTC产生一个中断(秒中断)。
      ii)一个32位的可编程计数器 RTC_CNT,可被初始化为当前的系统时间,对 TR_CLK信号计数操作。如果RTC_CRH寄存器中设置了相应的允许位(OWIE),计满时会产生溢出中断;
         系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CRH控制寄存器中设置了相应允许位(ALRIE),比较匹配时将产生一个闹钟中断。

简化的RTC框图:
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

   复位过程:
 
  1)APB1接口由系统复位;
   2)RTC核心(RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV 寄存器)只能由后备域复位。

   读RTC寄存器:
   软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。如果APB1接口曾经被关闭而读操作又是在刚刚重新开启APB1之后,则在第一次的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0)。
   下述几种情况下能够发生这种情形:

  • 发生系统复位或电源复位;
  • 系统刚从待机模式唤醒;
  • 系统刚从停机模式唤醒。

因此,若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置 1。
RTC的 APB1接口不受WFI和WFE等低功耗模式的影响,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。

   配置RTC寄存器:
   必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器。
   对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询 RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是 1时,才可以写入RTC寄存器。
   配置过程: 
   1.  查询RTOFF位,直到RTOFF的值变为 1;
   2.  置CNF值为1,进入配置模式;
   3.  对一个或多个RTC寄存器进行写操作; 
   4.  清除CNF标志位,退出配置模式;
   5.  查询RTOFF,直至RTOFF位变为 1 以确认写操作已经完成。

RTC控制寄存器低位(RTC_CRL):

STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

   RTC校准:
   将 RTCCLK 64分频后输出到防入侵引脚(PC.13),以供校验时钟是否正确。

BKP:

   备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。

   BKP控制寄存器用来管理侵入检测和RTC校准功能。

   特性:

   用来管理防侵入检测并具有中断功能的状态/控制寄存器;

   用来存储RTC校验值的校验寄存器;

   在PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲。

   访问:

   复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。

   1)、通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口(与APB1总线连接的接口)的时钟

   2)、电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。

   侵入检测:

   当TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器BKP_CR的TPAL位),会产生一个侵入检测事件,侵入检测事件将所有数据备份寄存器内容清除;

   侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从而在侵入检测引脚被允许前发生的侵入事件也可以被检测到;

   设置BKP_CSR寄存器的TPIE位为 1,当检测到侵入事件时就会产生一个中断。

   在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍然有侵入事件时对备份数据寄存器进行写操作。当VDD电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,TAMPER
引脚应该在片外连接到正确的电平。

   RTC校准:

   RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存器(BKP_RTCCR)的CCO位来开启这一功能。

   寄存器:

   BKP_DRx (备份数据寄存器x x = 1 … 10)

   BKP_DRx寄存器不会被系统复位、电源复位、从待机模式唤醒所复位,它们可以由备份域复位来复位或(如果侵入检测引脚TAMPER功能被开启时)由侵入引脚事件复位。


   BKP_RTCCR(RTC时钟校准寄存器)

   CCO 位:校准时钟输出(Calibration clock output)

           此位置1可以在侵入检测引脚输出经64分频后的RTC时钟。当CCO位置1时,必须关闭侵入检测功能(TPE 位)以避免检测到无用的侵入信号;当VDD供电断开时,该位被清除。

   ASOE 位:允许输出闹钟或秒脉冲(Alarm or second output enable)

           该位允许RTC闹钟或秒脉冲输出到TAMPER引脚上,输出脉冲的宽度为一个RTC时钟的周期。设置ASOE位时不能开启TAMPER的功能,该位只能被后备区的复位所清除。

   ASOS 位:闹钟或秒输出选择(Alarm or second output selection)

           当设置了ASOE位,ASOS位可用于选择在TAMPER引脚上输出的是RTC秒脉冲还是闹钟脉冲信号。

           0:输出RTC闹钟脉冲
           1:输出秒脉冲          该位只能被后备区的复位所清除。


   BKP_CR(备份控制寄存器)

   TPE 位:0:侵入检测TAMPER引脚作为通用IO口使用

           1:开启侵入检测引脚作为侵入检测使用

   TPAL 位:侵入检测TAMPER引脚有效电平(TAMPER pin active level)

           0:侵入检测TAMPER引脚上的高电平会清除所有数据备份寄存器(如果TPE位为1)
           1:侵入检测TAMPER引脚上的低电平会清除所有数据备份寄存器(如果TPE位为1)  

 

   BKP_CSR(备份控制/状态寄存器) 主要是侵入事件和中断的标志位和清除标志位、中断允许位。