嵌入式——实时时钟(RTC)

目录

一、初识RTC

1.简介

2.特性

3.后备寄存器和RTC寄存器特性

二、RTC组成

1.相关寄存器

(1)控制寄存器高位(RTC_CRH)

(2)控制寄存器低位(RTC_CRL)

(3)预分频装载寄存器高位(RTC_PRLH)

(4)预分频裝载寄存器低位(RTC_PRLL)

(5)计数器寄存器高位(RTC_CNTH)

(6)计数器寄存器低位(RTC_CNTL)

(7)电源控制寄存器(PWR_CR)

(8)APB1 外设时钟使能寄存器(RCC_APB1ENR)

(9)备份域控制寄存器(RCC_BDCR)

2.RTC结构

3.RTC基本配置步骤

4.RTC系统配置流程描述

三、RTC驱动程序


一、初识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

嵌入式——实时时钟(RTC)_第1张图片

位2(OWIE):允许溢出中断位。

位1(ALRIE):允许闹钟中断。

位0(SECIE):允许秒中断。

(2)控制寄存器低位(RTC_CRL

嵌入式——实时时钟(RTC)_第2张图片

位5(RTOFF):RTC操作关闭。(指示对其寄存器进行的最后一次操作的状态,即指示操作是否完成

位4(CNF):配置标志。(只有当此位在被置’1’并重新由软件清’0’后,从而允许向RTC_CNT、RTC_ALR或RTC_PRL寄存器写入数据)

(3)预分频装载寄存器高位(RTC_PRLH)

嵌入式——实时时钟(RTC)_第3张图片

(4)预分频裝载寄存器低位(RTC_PRLL)

嵌入式——实时时钟(RTC)_第4张图片

(5)计数器寄存器高位(RTC_CNTH)

嵌入式——实时时钟(RTC)_第5张图片

(6)计数器寄存器低位(RTC_CNTL)

嵌入式——实时时钟(RTC)_第6张图片

(7)电源控制寄存器(PWR_CR

嵌入式——实时时钟(RTC)_第7张图片

(8)APB1 外设时钟使能寄存器(RCC_APB1ENR

嵌入式——实时时钟(RTC)_第8张图片

位28(PWREN):电源接口时钟使能。

位27(BKPEN):备份接口时钟使能。

(9)备份域控制寄存器(RCC_BDCR

嵌入式——实时时钟(RTC)_第9张图片

位15(RTCEN):RTC时钟使能。

位9:8(RTCSEL):RTC时钟源选择。

嵌入式——实时时钟(RTC)_第10张图片

位 0(SEON):外部低速振荡器使能。

2.RTC结构

        RTC由两个主要部分组成。第一部分(APB1接口)用来和APB1总线相连另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块(可编程产生最长为1秒的RTC时间基准TR_CLK)。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间

嵌入式——实时时钟(RTC)_第11张图片

补充:

(1)RTC可以选择三种RTC的时钟源

        ①HSE时钟除以128。

        ②LSE振荡器时钟。

        ③LSI振荡器时钟。

嵌入式——实时时钟(RTC)_第12张图片

(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当前日期和时间

嵌入式——实时时钟(RTC)_第13张图片

嵌入式——实时时钟(RTC)_第14张图片

你可能感兴趣的:(单片机,stm32,嵌入式硬件,笔记)