当前位置: 首页 > news >正文

STM32 实时时钟(RTC)详解

一、RTC 简介

RTC(Real Time Clock)即实时时钟,本质上是一个 32 位的秒级计数器:

  • 最大计数值为 4294967295 秒,约合 136 年:

     

    复制编辑

    4294967295 / 60 / 60 / 24 / 365 ≈ 136 年

  • RTC 初始化时,主要配置两项:

    1. 时钟源(决定 1 秒的基准周期)

    2. 计数器初值(转换为日期 + 时间)

RTC 表现形式对比

MCU型号表现形式
STM32F103仅提供一个以秒为单位的数值,由软件完成时间转换
STM32F407硬件直接提供时间和日期寄存器


二、RTC 模块特性

  • 可编程的 预分频系数,最大支持 2^20。

  • 32 位计数器,用于长时间测量。

  • 支持三种 RTC 时钟源:

    • HSE / 128

    • LSE(32.768KHz)→ 1Hz

    • LSI

  • 两种独立复位机制:

    • APB1 接口系统复位

    • RTC 核心(后备域)复位

  • 三种中断:

    • 闹钟中断(Alarm)

    • 秒中断(每秒触发)

    • 溢出中断(计数器回到0)


三、RTC 架构简析

RTC 模块主要由两部分构成:

  1. APB1 接口部分

    • 与 MCU 通信,通过一组 16 位寄存器控制 RTC 配置。

    • 由 PCLK1 驱动。

  2. RTC 核心部分

    • 预分频器模块:产生 1 秒基准时钟 TR_CLK

    • 计数器模块:32 位,累加系统时间,支持闹钟中断比较


四、RTC 初始化流程(STM32F1 示例)

  1. 使能 PWR、BKP 时钟:

     

    RCC_APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;

  2. 允许访问后备寄存器:

     

    PWR->CR |= PWR_CR_DBP;

  3. 复位备份域:

     

    RCC->BDCR |= RCC_BDCR_BDRST; RCC->BDCR &= ~RCC_BDCR_BDRST;

  4. 打开并等待 LSE 时钟稳定:

     

    RCC->BDCR |= RCC_BDCR_LSEON; while (!(RCC->BDCR & RCC_BDCR_LSERDY));

  5. 选择 LSE 为 RTC 时钟源:

     

    RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;

  6. 启用 RTC 时钟:

     

    RCC->BDCR |= RCC_BDCR_RTCEN;

  7. 等待上一次写操作完成(RTOFF = 1)

  8. 等待寄存器同步(RSF = 1)

  9. 进入配置模式(CNF = 1)

  10. 配置分频器和时间值:

     

    RTC->PRLH = ...; RTC->PRLL = ...; RTC->CNTH = ...; RTC->CNTL = ...;

  11. 退出配置模式(CNF = 0)

  12. 等待写操作完成(RTOFF = 1)


五、RTC 读写注意事项

写操作流程

  1. 等待 RTOFF = 1(前一次写完成)

  2. 设置 CNF = 1(进入配置模式)

  3. 写入目标寄存器(如 PRL、CNT、ALR)

  4. 清除 CNF = 0(退出配置模式)

  5. 等待 RTOFF = 1(确认写操作完成)

每次写入至少需要等待 3 个 RTCCLK 周期。

读操作注意事项

RTC 核心独立于 APB1 接口,RTC 内部值在 RTC 时钟上升沿同步 到 APB1 接口:

  • 若系统曾关闭 APB1 时钟,第一次读取值可能无效(常为0)

  • 必须等待 RSF = 1(寄存器同步完成)后再读数据

情况示例:复位后 / 停机唤醒后 / APB1重新打开


六、RTC 寄存器说明

寄存器名描述复位方式
RTC_CNT当前计数值(时间)后备复位
RTC_PRL分频器设定后备复位
RTC_ALR闹钟时间值后备复位
其他寄存器配置与控制系统复位


七、总结

RTC 模块作为独立的低功耗定时单元,在低功耗应用中非常重要。STM32 的 RTC 模块可实现秒级定时、闹钟中断、时间持久化(VBAT 支持)等功能。

相关文章:

  • HTTP GET报文解读
  • 胶片转场视频剪辑思路
  • 国产 ETL 数据集成厂商推荐—谷云科技 RestCloud
  • Axure设计之内联框架切换页面、子页面间跳转问题
  • 【爬虫】DrissionPage-2
  • 前端面试宝典---js垃圾回收机制
  • 大模型越狱:技术漏洞与安全挑战——从原理到防御
  • 生活实用小工具-手机号归属地查询
  • Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能
  • 文章记单词 | 第74篇(六级)
  • 16S18S基础知识(1)
  • OpenHarmony平台驱动开发(十七),UART
  • 【vue】脚手架
  • UniApp 微信小程序绑定动态样式 :style 避坑指南
  • 2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码
  • day014-服务管理
  • SpringbBoot nginx代理获取用户真实IP
  • Mac的web服务器
  • Python解释器、REPL与脚本的区别
  • 适用于 iOS 的 开源Ultralytics YOLO:应用程序和 Swift 软件包,用于在您自己的 iOS 应用程序中运行 YOLO
  • 因存在安全隐患,福特公司召回约27.4万辆SUV
  • 沪喀同心|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动
  • 紫光集团原董事长赵伟国一审被判死缓
  • 古巴外长谴责美国再次将古列为“反恐行动不合作国家”
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁
  • “一节课、两小时”,体育正在回归“C位”