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://www.mzph.cn/diannao/83003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《AI驱动的智能推荐系统:原理、应用与未来》

一、引言 在当今信息爆炸的时代,用户面临着海量的信息选择,从购物平台上的商品推荐到流媒体服务中的影视推荐,智能推荐系统已经成为我们日常生活中不可或缺的一部分。AI驱动的智能推荐系统通过分析用户的行为和偏好,为用户提供个性…

Django + Celery 打造企业级大模型异步任务管理平台 —— 从需求到完整实践(含全模板源码)

如需完整工程文件(含所有模板),可回复获取详细模板代码。 面向人群:自动化测试工程师、企业中后台开发人员、希望提升效率的 AI 业务从业者 核心收获:掌握 Django 三表关系设计、Celery 异步任务实践、基础 Web 交互与前后端分离思路,源码可直接落地,方便二次扩展 一、系…

创建对象

虽然Object构造函数或对象字面量可以方便地创建对象,但这些方式也有明显不足: 创建具有同样接口的多个对象需要重复编写很多代码 1.工厂模式 工厂模式是一种众所周知的设计模式,广泛应用于软件工程领域,用于抽象创建特定对象的过程 function createPerson(name,age){let…

深度理解指针(2)

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 深入理解指…

数据科学和机器学习的“看家兵器”——pandas模块 之一

目录 pandas 模块介绍 4.1 pandas 数据结构 一、课程目标 二、Series 对象介绍 三、DataFrame 对象介绍 四、Series 和 DataFrame 在具体应用中的注意事项 (一)Series 注意事项 (二)DataFrame 注意事项 五、实战案例 案例 1:学生成绩分析 案例 2:销售数据分析 案例 3:股…

STM32CubeMX HAL库 串口的使用

1.配置 2.开启中断后,生成代码 3.串口的接收 1).开启空闲中断接收 __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); // 关键步骤:启用空闲中断 2). 启动接收 调用 HAL_UARTEx_ReceiveToIdle_IT 启动异步接收,可以使用…

IIS服务器URL重写配置完整教程

1.下载URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安装

vite+vue建立前端工程

​ 参考 开始 | Vite 官方中文文档 VUE教程地址 https://cn.vuejs.org/tutorial/#step-1 第一个工程 https://blog.csdn.net/qq_35221977/article/details/137171497 脚本 chcp 65001 echo 建立vite工程 set PRO_NAMEmy-vue-appif not exist %PRO_NAME% (call npm i…

负进制转换

当一个数的基数是负数时,将这个数转换为负进制数时,大体思路和正数的情况一样,但是因为基数是负数,所以计算出来的余数就有可能是负数所以,需要在余数是负数时:将余数 基数的绝对值,商 1。 代…

K8S已经成为了Ai应用运行的平台工具

AI应用与K8s的深度融合:加速云原生时代的智能运维与业务创新 摘要: 随着人工智能(AI)技术的飞速发展,Kubernetes(K8s)作为容器编排领域的领军者,正逐步成为承载AI应用的核心基础设施…

NVMe简介1

它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA…

微服务商城(1)开篇、服务划分

参考:https://mp.weixin.qq.com/s?__bizMzg2ODU1MTI0OA&mid2247485597&idx1&sn7e85894b7847cc50df51d66092792453&scene21#wechat_redirect 为什么选择go-zero go-zero 为我们提供了许多高并发场景下的实用工具,比如为了降低接口耗时…

《隐私计算:数据安全与隐私保护的新希望》

一、引言 在数字化时代,数据已成为企业和组织的核心资产。然而,数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术,旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…

MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?

目录 一、bin log 与 redo log 的区别1)实现方式不同:2)日志内容不同:3)记录方式不同:4)使用场合不同: 二、为什么快速恢复使用 redo log 而不用 bin log? 面试题&#x…

用Array.from实现创建一个1-100的数组

一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) (1)arrayLike 类数组对象(如 { length: 100 })本身没有索引属性(如 0: undefined, 1: undefi…

javaScript简单版

简介 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言,是用来控制网页行为,实现页面的交互效果。 JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。 组成: ECMAScript:规定了JS基础语法核心知…

Python刷题练习

文章目录 1.寻找相同字串2.密钥格式化3.五键键盘的输出4.单词重量5.输出指定字母在字符串的中的索引6.污染水域7.九宫格按键输入8.任务最优调度9.高效的任务规划 1.寻找相同字串 题目描述: 给你两个字符串t和p,要求从t中找到一个和p相同的连续子串,并输…

MATLAB实现振幅调制(AM调制信号)

AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。 我们实现输入一个载波信号的频率与调制信号的频率后,再输入调幅度,得到已调信号的波形与包络信号的波形,再使用FFT算法分析出已调信号的频谱图。 源代码&#x…

JJJ:linux ida

文章目录 1.总结2.各类函数2.1 分配一个仓库2.2 销毁仓库2.3 从仓库里面分配一个整数id2.4 将上面分配的整数id从仓库里面删除2.5 在指定范围内分配一个id 1.总结 ida使用起来很简单,就是先分配一个仓库一样的实例,再从这个仓库里面分配一个独一无二的整…

FastByteArrayOutputStream和ByteArrayInputStream有什么区别

FastByteArrayOutputStream 和 ByteArrayInputStream 是两种完全不同的 Java I/O 类,它们的主要区别体现在 设计目的 和 使用场景 上。以下是详细对比: 1. 核心区别总结 特性FastByteArrayOutputStream (Spring框架)ByteArrayInputStream (JDK原生)所属…