你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32实例-RTC实时时钟实验①-STM32F1 RTC 介绍

[复制链接]
STMCU小助手 发布时间:2022-6-28 10:00
   我们来学习下STM32F1 的实时时钟(以下简称 RTC),利用 RTC设计
一个简单的电子时钟。要实现的功能是:通过串口打印出日期和时间,D1指示灯闪烁提示系统运行。

RTC简介
    STM32 的实时时钟( RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
    RTC 模块和时钟配置是在后备区域,无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要保证后备区域供电正常,RTC 便不会停止工作,所以通常会在后备区域供电端加一个纽扣电池,即使主电源停止供电,后备电源也会启动供电,从而保证 RTC 时钟不停的运行,只有当主电源和后备纽扣电池都没有电的时,RTC 才停止工作。RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD 和 VBAT 都掉电,那么备份域中保存的所有数据将丢失。备份域除了 RTC 模块的寄存器, 还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位。我们一般用 BKP 来存储 RTC 的校验值或者记录一些重要的数据,相当于一个 EEPROM,不过这个 EEPROM 并不是真正的 EEPROM,而是需要电池来维持它的数据。
    从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它
的时钟来源有三种,分别为高速外部时钟的 128 分频( HSE/128)、 低速内部时钟 LSI 以及低速外部时钟 LSE。使用 HSE 分频时钟或 LSI 的话,在主电源VDD 掉电的情况下,这两个时钟来源都会受到影响,因此没法保证 RTC 正常工作。所以 RTC 一般使用低速外部时钟 LSE, 在设计中, 频率通常为实时时钟模块中常用的 32.768KHz,这是因为 32768 = 2^15,分频容易实现,所以它被广泛应用到 RTC 模块。在主电源 VDD 有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式。
RTC结构框图
    STM32F1 RTC 拥有这么多功能,是由 RTC 内部结构决定。要更好的理解STM32F1 的 RTC,就需要了解它内部的结构。如下图所示:(大家也可以查看《STM32F10x 中文参考手册》-16 实时时钟(RTC)章节内容)

微信图片_20220627104005.png

    从上图中可以看出,浅灰色的部分都是属于备份域的,在 VDD 掉电时可
在 VBAT 的驱动下继续运行。这部分仅包括 RTC 的分频器,计数器,和闹钟控制器。若 VDD 电源有效,RTC 可以触发 RTC_Second(秒中断)、RTC_Overflow(溢出事件)和 RTC_Alarm(闹钟中断)。从上图可以分析到,其中的定时器溢出事件无法被配置为中断。若 STM32 原本处于待机状态,可由闹钟事件或 WKUP 事件(外部唤醒事件,属于 EXTI 模块,不属于 RTC)使它退出待机模式。闹钟事件是在计数器 RTC_CNT 的值等于闹钟寄存器 RTC_ALR 的值时触发的。
    在备份域中所有寄存器都是 16 位的, RTC 控制相关的寄存器也不例外。
它的计数器 RTC_CNT 的 32 位由 RTC_CNTL 和 RTC_CNTH 两个寄存器组成,分别保存定时计数值的低 16 位和高 16 位。在配置 RTC 模块的时钟时, 通常把输入的 32768Hz 的 RTCCLK 进行 32768 分频得到实际驱动计数器的时钟TR_CLK = RTCCLK/32768= 1 Hz,计时周期为 1 秒,计时器在 TR_CLK 的驱动下计数,即每秒计数器 RTC_CNT 的值加 1。
    由于备份域的存在,使得 RTC 核具有了完全独立于 APB1 接口的特性,也因此对 RTC 寄存器的访问要遵守一定的规则。
    系统复位后, 默认禁止访问后备寄存器和 RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和 RTC 的访问:
(1) 设置 RCC_APB1ENR 寄存器的 PWREN 和 BKPEN 位来使能电源和后备接口时钟。
(2) 设置电源控制寄存器(PWR_CR)的 DBP 位使能对后备寄存器和 RTC 的访问。
    设置后备寄存器为可访问后,在第一次通过 APB1 接口访问 RTC 时, 因为时钟频率的差异, 所以必须等待 APB1 与 RTC 外设同步, 确保被读取出来的 RTC寄存器值是正确的。若在同步之后,一直没有关闭 APB1 的 RTC 外设接口,就不需要再次同步了。
    如果内核要对 RTC 寄存器进行任何的写操作,在内核发出写指令后, RTC
模块在 3 个 RTCCLK 时钟之后, 才开始正式的写 RTC 寄存器操作。由于 RTCCLK的频率比内核主频低得多,所以每次操作后必须要检查 RTC 关闭操作标志位RTOFF,当这个标志被置 1 时,写操作才正式完成。

收藏 评论0 发布时间:2022-6-28 10:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版