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 中断处理程序,会重新从主函数开始运行。
-
晶振
+关注
关注
35文章
3648浏览量
73849 -
STM32
+关注
关注
2313文章
11196浏览量
374786 -
定时器
+关注
关注
23文章
3375浏览量
124737 -
RTC
+关注
关注
2文章
668浏览量
72254 -
时钟源
+关注
关注
0文章
113浏览量
16830
发布评论请先 登录
如何对实时时钟进行低功耗 RTC规范和相关的设计挑战
总结RTC(Real Time Clock)实时时钟相关的知识
关于RTC时钟的知识点
DS1302 RTC有关的知识介绍
STM32F030_RTC实时时钟相关的知识资料下载
RTC技术基础知识
什么是RTC?RTC的基础知识
RTC相关知识
评论