RTC相关知识

描述

RTC 是一个独立的定时器,能够在 STM32 的低功耗模式下运行。

选择 RTC 时钟源

RTC 时钟的时钟源能够有三种选择,分别是 HSE 高速晶振、LSE 低速晶振、LSI 内部晶振,如题下图所示。

时钟源

通过 RCCHSEConfig()、RCCLSEConfig()、RCC_LSICmd() 三个函数能够分别对上述三种时钟进行设置。

本质上分别是对 RCCCR、RCCBDCR、RCC_CSR 中相对应寄存器进行设置。

通过 RCC_RTCCLKConfig() 等函数能够选择 RTC 的时钟源,如下图所示:

时钟源

RTC 结构

时钟源

RTC 和 BKP 的结构如上图所示,阴影部分是 BKP 区域,其中有 RTC 相关的寄存器,后备区域独立于 CPU,通过对 PWRCR 寄存器中 DBP 的置位,即 PWRBackupAccessCmd() 函数,能够开启 RTC 和 BKP 区域的写使能,理论上说,设置 RTCCRL 寄存器中的 CNF 位即 RTCEnterConfigMode() 函数也能够让 RTC 进入设置模式,但目前操作不成功。

RTCPRL 置位后,RTCCNT 计数器开始运行,配合 RTCALR、RTCCR 等寄存器,开始实现 RTC 功能。

时钟源

RTCWaitForSynchro() 函数,读 RTCCLR 寄存器中 RSF 位,确保RTCCNT、RTCALR或RTCPRL已经被同步。(若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTCCRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。)

RTCWaitForLastTask() 函数,读 RTCCLR 寄存器中 RTOFF 寄存器,判断上一次操作是否已完成。

RTCITConfig(RTCITSEC,ENABLE) 函数,开启 RTC 中的秒中断,RTC 中共有三种中断,如上图所示,由 RTCCR 寄存器中的相关标志位管理。

RTCSetPrescaler() 函数设置上图中 RTCPRL 寄存器,即预分频值,PRL 寄存器修改后会装载进 RTCDIV 寄存器,通过读 RTCDIV 寄存器能够得到 RTC_PRL 寄存器中的值。

RTC 和 PWR 待机模式

STM32 能够通过某些操作进入待机模式(Standby Mode),待机模式能够通过 RTC 的闹钟中断唤醒(Alarm),其中有两点需要注意:

中断需要在进入待机模式前启动,进入待机模式后无法配置 RTC 寄存器。

PWR 模式被唤醒后,执行完 Alarm 中断处理程序,会重新从主函数开始运行。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分