实时时钟RTC+电源控制PWR(速记版)

RTC时钟

RTC时钟模块和RCC时钟控制器

RTC(Real-Time Clock)实时时钟:

        RTC 实时时钟是一个独立的定时器,一般拿来做时钟和日历

        RTC 处在BKP区(后备区域),可实现VDD断电后,备用电源VBAT供电,数据不丢失。

        RTC 本身是个定时器,可以配置成特定时间产生中断,或者产生事件唤醒MCU。 

        RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.0~3.6V)断电后可借助VBAT(1.8~3.6V)供电继续走时。

        RTC具有

        32位 的 计数器,可对应Unix时间戳的秒计数器。

        20位 的 预分频器,可适配不同频率的输入时钟。

        系统复位后,禁止访问BKP。所以设置RTC的寄存器之前, 先要取消BKP写保护。

系统VDD上电前,RTC 依靠LSI内部晶振提供时钟,上电后,依靠LSE外部晶振提供时钟。

虽然 RTC 挂载在APB1总线上,由APB1总线控制使能,但是RTC没有使用APB1提供的时钟源,而是使用 LSI 或者 LSE。同时需要通过总线访问RTC的寄存器。

        且LSE晶振需要配合起振电容(负载电容)来确保晶振能够正常启动和稳定工作。

        起振电容的作用:震荡频率,调整负载电容、帮助快速启动。

RCC(Reset and Clock Control)时钟控制器:

        RCC,复位和时钟控制模块。RCC用于系统时钟和各种外设时钟的启用和时钟源配置。

        RCC的时钟来源包括HSE、LSE、HSI、LSI、PLL等。

        HSE(16MHz)、LSE(32.768KHz)、HSI(8MHz)、LSI(40KHz)

        此处PLL锁相环的作用是倍频,对于STM32来说,其系统时钟不超过72MHz;而时钟源的时钟频率最多也就16MHz,无法达到芯片的要求,此时就需要倍频器将外部时钟频率进行倍频,再传给系统时钟;

        RCC_CFGR可配置PLL的倍频系数输入时钟源PLL预分频器的分频因子

        STM32 的系统时钟 SYSCLK 为整个芯片提供时序信号。系统时钟信号来源分别为:HSE、HSI以及经过分频器的输出信号;AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频得到。

RCC的备份区域控制寄存器BDCR

        RCC时钟源的选择及是能设置都是通过备份控制寄存器BDCR实现的,,所以我们在 RTC 操作之前先要通过这个寄存器选择 RTC 的时钟源。

RTC相关寄存器

        RTC 内核完全独立于 RTC APB1 接口,而软件是通过 APB1 接口访问 RTC 的预分频值、计
数器值和闹钟值的。读取RTC寄存器必须等待 CRL 寄存器的寄存器同步标志位RSF被硬件置 1。

注意,STM32F4的RTC寄存器和F1的有区别。这里只讲F1

控制寄存器 CRH、CRL

        RTC 总共有 2 个控制寄存器 CRHCRL,两个都是 16 位的。

        CRH 的低 3 位分别是溢出中断闹钟中断秒中断中断使能

        CRL 的低 6 位分别是 操作完成(last task off)、配置模式寄存器同步标志位溢出闹钟秒中断中断标志位

        溢出中断:CNT溢出 

        闹钟中断:CNT达到ALR寄存器设定值。

闹钟中断可以在RTC_ITConfig(RTC_IT_ALR, ENABLE);使能并在RTC_IRQHandler中读取闹钟中断的标志位来执行内部中断。也可以通过EXTI线17触发EXTI4中断服务函数(EXTI虽然有16个中断线,但只有7个中断服务函数)(PVD也可走外部中断EXTI3线)

        秒中断:预分频装载寄存器PRL溢出时,秒中断产生,CNT加1。

        RTC 内核完全独立于 APB1 接口,而软件需要通过 APB1 接口访问 RTC 的寄存器。但是RTC相关寄存器只在 APB1 时钟进行重新同步的 时钟上升沿 被更新。因此,读取RTC寄存器必须等待 CRL 寄存器的 寄存器同步标志位RSF 被硬件置 1。

预分频装载寄存器PRLH、PRLL

        PRLH低4位存放预分频值的19~16位,PRLL存放前15~0位。

        共20位的预分频值PRL。

        一般RTC时钟源配置为LSE=32.768KHz的情况下,PRL配置为32767,该寄存器自减,用来保存还需要多少时钟周期获得一个秒信号。在一次秒钟更新后,由硬件重新装载。

预分频余数寄存器DIVH、DIVL

        预分频余数寄存器用来获得比秒钟更为准确的时钟,如0.1s、0.01s。比如0.1s就把DIV设置成10,DIV溢出PRL-1。

        该寄存器自减,溢出后PRL-1。同样是共20位的预分频值DIV。

计数器CNTH、CNTL

        该寄存器由 2 个 16 位的寄存器组成 RTC_CNTH 和 RTC_CNTL,总共 32 位,一般用来记录秒钟值。注意修改这个寄存器时要先进入配置模式。

闹钟寄存器ALRH、ALRL

        该寄存器也是由 2 个 16 为的寄存器组成 RTC_ALRH 和 RTC_ALRL。总共也是 32 位,如果 RTC_CNT 的值与 RTC_ALR 的值相等,并使能了中断的话,会产生一个闹钟中断。该寄存器的修改也要进入配置模式才能进行。

时间戳

Unix时间戳介绍

        Unix时间戳以秒为单位从1970年1月1日00:00:00 UTC(协调世界时间)开始计算。这个时间点被称为“Unix纪元”(Unix Epoch)。Unix时间戳表示从这个起始时间点到指定时间点的秒数。Unix时间戳与时区无关。无论在世界的哪个地方,Unix时间戳都是相同的。

UTC/GMT

UTC格林尼治时间(协调世界时)和GMT格林威治时间

精确度:UTC比GMT更精确,因为UTC基于原子时并定期调整以对齐地球自转,而GMT基于天文学的平均太阳时间。

调整:UTC会根据需要添加闰秒,而GMT不做这样的调整。

C语言time.h

注意C语言标准库提供的时间是从1900开始计算的

time_t time(time_t*);获取系统时钟
struct tm* localtime(const time_t*);秒计数器转换为日期时间(当地时间)

BKP备份寄存器

        BKP备份寄存器是 42 个 16 位的寄存器使用备份寄存器其实就是向BKP_DR写数据。

        备份寄存器处在备份域里,当 VDD 电源被切断,他们仍然由 VBAT 维持供电。即使系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。此外,BKP 控制寄存器用来管理侵入检测和 RTC 校准功能。一般用 BKP 来存储 RTC 的校验值或者记录一些重要的数据。

        复位后,对备份寄存器和 RTC 的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和 RTC 的访问:
        1)通过
APB1外设时钟使能寄存器 RCC_APB1ENR打开电源和后备区域的时钟
        2)PWR_CR 来对 BKP 和 RTC 使能访问权限

        PWR_BackupAccessCmd()使能备份寄存器访问使能,设置PWR_CR的DPB位,失能写保护,Disable Protect Backup

PWR

PWR(Power Control)电源控制

PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器低功耗模式的功能

可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时(边沿触发),PVD会触发外部中断PVD,用于执行紧急关闭任务

低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

整个PWR可以分为3部分,后备供电区电压调节器(1.2V区域)、VDD供电区

后备供电区将备用电源连接到 VBAT 引脚上,当 VDD 断电,可用来保持 BKP 的内容和 RTC 的功能。同时 VBAT 也为 SRAM 和 LSE 振荡器供电。

电压调节器为备份域和待机电路以外的所有数字电路供电。电压调节区输出电压约为1.2V,有两个外部电容连接到专用引脚 Vcap1Vcap2。激活电压调节器就将这俩专用引脚接到 VDD/VSS。电压调节器有运转、停止、待机三种模式。运转模式下,电压调节器为内核、内存、外设供电;停止模式下,为备份域和SRAM供电;待机模式下,仅为备份域供电。

VDD供电区指的是参考电压和A/D转换器的独立电源。

主要寄存器

控制寄存器 CR

        用来设置低功耗睡眠低功耗运行模式,使能备份域写保护清除待机标志使能PVD设置PVD阈值电平

控制状态寄存器 CSR

        用来指示唤醒事件状态待机状态启用唤醒引脚

         **睡眠模式**不需要启用 `RCC_APB1Periph_PWR` 时钟,因为它不涉及到电源管理的复杂操作,只是将处理器置于低功耗状态。

        而**停止模式**和**待机模式**涉及到更复杂的电源管理,需要启用 PWR 时钟来正确配置和管理这些模式下的电源状态。

上电复位POR/掉电复位PDR:VDD小于阈值POR/PDR时,触发复位信号

欠压复位BOR:VDD小于阈值时复位

可编程电压检测器PVD :PVD可以指定阈值,并设置大于或小于触发外部中断。EXTI3。

低功耗模式

低功耗模式包括睡眠停机待机三种情况。

睡眠模式CPU时钟关闭,其他时钟和ADC时钟开着。可设置WFI/WFE,由任一中断/事件唤醒。

停机模式所有时钟关闭。VDD保持供电,所以寄存器和内存信息可以保留。停止模式下,如果电压调节器关了,会有一段启动延时,如果PWR停机模式下电压调节器开着启动延时会变短。可有WFI/WFE唤醒。 

待机模式,在内核深睡眠模式下关闭电压调节器,可以进入待机模式。除备份域(RTC寄存器,RTC备份寄存器,备份SRAM)和待机电路中的寄存器外SRAM 和其他寄存器内容都将丢失。退出待机模式可以用WKUP引脚的上升沿、RTC闹钟事件外部中断引脚上升沿、复位引脚IWDG复位。

待机模式功耗最低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大象荒野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值