美文网首页
RTC 相关

RTC 相关

作者: 土DOU吹雪 | 来源:发表于2019-03-07 17:56 被阅读0次

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

    选择 RTC 时钟源

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

    RTC时钟源RTC时钟源

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

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

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


    选择RTC时钟源选择RTC时钟源

    RTC 结构

    RTC寄存器RTC寄存器

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

    RTC_PRL 置位后,RTC_CNT 计数器开始运行,配合 RTC_ALR、RTC_CR 等寄存器,开始实现 RTC 功能。

    RTC配置RTC配置
    1. RTC_WaitForSynchro() 函数,读 RTC_CLR 寄存器中 RSF 位,确保RTC_CNT、RTC_ALR或RTC_PRL已经被同步。(若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。)

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

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

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

    RTC 和 PWR 待机模式

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

    1. 中断需要在进入待机模式前启动,进入待机模式后无法配置 RTC 寄存器。
    2. PWR 模式被唤醒后,执行完 Alarm 中断处理程序,会重新从主函数开始运行。

    相关文章

      网友评论

          本文标题:RTC 相关

          本文链接:https://www.haomeiwen.com/subject/nlshpqtx.html