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 中断处理程序,会重新从主函数开始运行。
全部0条评论
快来发表一下你的评论吧 !