目录
[(8)APB1 外设时钟使能寄存器(RCC_APB1ENR)](#(8)APB1 外设时钟使能寄存器(RCC_APB1ENR))
一、初识RTC
1.简介
实时时钟是一个独立的定时器 。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可**提供时钟日历的功能,**计数频率常为秒。修改计数器的值可以重新设置系统当前的时间和日期。
2.特性
(1)32位的可编程计数器,可用于较长时间段的测量
(2)能在MCU掉电后运行
(3) 低功耗
3.后备寄存器和RTC寄存器特性
(1)部分寄存器写保护:RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不会被系统复位。
(2)数据存储功能 :RTC和后备寄存器不会被系统或电源复位源复位 ;当从待机模式唤醒时,也不会被复位。后备寄存器可用于保存掉电时的数据。
(3)独立工作 :RTC和后备寄存器通过一个开关供电 ,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电 。在VBAT供电时仍可继续工作。
(4)2个独立复位:APB1接口由系统复位;RTC核心只能由后备域复位;
二、RTC组成
1.相关寄存器
(1)控制寄存器高位(RTC_CRH)
位2(OWIE):允许溢出中断位。
位1(ALRIE):允许闹钟中断。
位0(SECIE):允许秒中断。
(2)控制寄存器低位(RTC_CRL)
位5(RTOFF):RTC操作关闭。(指示对其寄存器进行的最后一次操作的状态,即指示操作是否完成)
*位4(CNF):配置标志。(只有当此位**在被置'1'并重新由软件清'0'*后,从而允许向RTC_CNT、RTC_ALR或RTC_PRL寄存器写入数据)
(3)预分频装载寄存器高位(RTC_PRLH)
(4)预分频裝载寄存器低位(RTC_PRLL)
(5)计数器寄存器高位(RTC_CNTH)
(6)计数器寄存器低位(RTC_CNTL)
(7)电源控制寄存器(PWR_CR)
(8)APB1 外设时钟使能寄存器(RCC_APB1ENR)
位28(PWREN):电源接口时钟使能。
位27(BKPEN):备份接口时钟使能。
(9)备份域控制寄存器(RCC_BDCR)
位15(RTCEN):RTC时钟使能。
位9:8(RTCSEL):RTC时钟源选择。
位 0(SEON):外部低速振荡器使能。
2.RTC结构
RTC由两个主要部分组成。++第一部分(APB1接口)++ 用来和APB1总线相连 。++另一部分(RTC核心)++ 由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块 (可编程产生最长为1秒的RTC时间基准TR_CLK)。第二个模块是一个32位的可编程计数器 ,可被初始化为当前的系统时间。
++补充:++
(1)RTC可以选择三种RTC的时钟源:
①HSE时钟除以128。
②LSE振荡器时钟。
③LSI振荡器时钟。
(2)RTC的APB1单元还包含一组16位寄存器,可通过APB1,总线对其进行读写操作。
(3)APB1接口由APB1总线时钟驱动,用来与APB1总线接口。
(4)RTC的预分频模块 包含的是一个20位的可编程分频器 (RTC预分频器),分频系数最高为2的20次方。
(5)RTC有3个专门的可屏蔽中断:
①**闹钟中断:**用来产生一个软件可编程的闹钟中断。
②**秒中断:**用来产生一个可编程的周期性中断信号(最长可达1秒)。
③**溢出中断:**指示内部可编程计数器溢出并回转为0的状态。
(6)如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期 中RTC产生一个中断(++秒中断++)。
(7)系统时间按TR_CLK周期 累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个中断(++闹钟中断++)。
3.RTC基本配置步骤
(1)使能对RTC的访问:使能PWR和BKP时钟( RCC_APB1ENR**)** 、使能对后备寄存器和RTC( PWR_CR**)**的访问权限
(2)设置RTC时钟源:激活LSE,设置RTC的计数时钟源为LSE 。(RCC_BDCR)
(3)进入配置模式:等待RTOFF位 为1,设置CNF位 为1。(RTC_CRL)
(4)设置RTC寄存器:设置分频值、计数值 等(RTC_PRL),一般先只设置分频值,CNT的设置独立。
(5)退出配置模式:清除CNF位 ,等待RTOFF 位 为1(RTC_CRL)即配置完成。
4.RTC系统配置流程描述
(1)查询RTOFF位,直到RTOFF的值变为1。
(2)置CNF值 为1,进入配置模式。
(3)对一个或多个RTC寄存器进行写操作。
(4)清除CNF标志位 ,退出配置模式。
(5)查询RTOFF,直至RTOFF 位变为 **'1'**以确认写操作已经完成。
三、RTC驱动程序
1.使能电源时钟并使能后备域访问: __HAL_RCC_PWR_CLK_ENABLE(使能电源时钟)、__HAL_RCC_BKP_CLK_ENABLE (使能备份时钟)、HAL_PWR_EnableBkUpAccess(使能备份访问)
2.开启LSE / 选择RTC时钟源 / 使能RTC时钟: HAL_RCC_OscConfig(开启LSE)、HAL_RCCEx_PeriphCLKConfig (选择RTC时钟源)、__HAL_RCC_RTC_ENABLE (使能RTC时钟)
3.初始化RTC,设置分频值以及工作参数: HAL_RTC_Init(初始化RTC)、HAL_RTC_MspInit(完成RTC底层初始化工作)
4.设置RTC的日期和时间
5.获取RTC当前日期和时间