【STM32 RTC实时时钟如何配置!超详细的解析和超简单的配置,附上寄存器操作】

STM32 里面RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。因为系统对后备寄存器和RTC相关寄存器有写保护,所以如果想要对后备寄存器和RTC进行访问,则需要通过操作相应的寄存器来解除某些限制。

文章有点长,想要理解RTC原理的可以认真阅读。如果只想要源码的,可以直接拉到文章最下面

接下来进入正题:

一、解除寄存器操作限制

第一步首先需要设置RCC_APB1ENR的PWREN和BKPEN位。使能电源和后备接口时钟
在这里插入图片描述
第二步是设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问
在这里插入图片描述

二、配置RTC

完成上面两步之后,我们就可以操作后备寄存器和RTC相关的寄存器了。但我们先来看看RTC的简单框图吧
在这里插入图片描述
从图可以看出来,要想让RTC工作,得让它先有一个时钟,也就是图中RTCCLK时钟的选择。
1、RTC时钟的选择
RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。

LSE时钟在备份域里,但HSE和LSI时钟不是。因此:

● 如果LSE被选为RTC时钟:

─ 只要V BAT 维持供电,尽管V DD 供电被切断,RTC仍继续工作。

● 如果LSI被选为自动唤醒单元(AWU)时钟:

─ 如果V DD 供电被切断, AWU状态不能被保证。

● 如果HSE时钟128分频后作为RTC时钟:

─ 如果V DD 供电被切断或内部电压调压器被关闭(1.8V域的供电被切断),则RTC状态不确定。

RTC的时钟源有三个,但只有LSE(外部低速振荡器,一般为32.678kHz)在VDD供电被切断后,仍能继续工作,因此我们一般都选择它。

RTC时钟源的选择需要操作备份域控制寄存器(RCC_BDCR)
在这里插入图片描述
配置时钟步骤

1)打开外部振荡器(LSEON置1)

2)然后等待LSE就绪,也就是等待LSERDY置1

3)选择RTC时钟源,也就是配置RTCSEL[1:0]

4)使能RTC时钟(RTCEN置1)

2、配置RTC相关寄存器
从RTC框图可以知道,RTC时钟选择后就应该配置RTC预分频器(RTC_PRL寄存器)和RTC_CNT计数器和闹钟计数器RTC_ALR。

一般我们通过预分频器将RTCCLK的时钟进行分频,让预分频器的输出时钟TR_CLK的频率变成1Hz,也就是周期为1s。然后RTC_CNT在TR_CLK频率下递增。如果RTC_CNT里面的值和RTC_ALR里面的数值相等,则会触发闹钟标志,即ALRF标志位置1。在每个TR_CLK的周期都会触发一次秒标志,即SECF标志位会置1.

一般如果用于时钟时钟的话,RTC_CNT可以设置为当前的时间。

如果需要配置RTC的 RTC_PRL、RTC_CNT、RTC_ALR寄存器。则必须判断RTC寄存器是否处于更新中,只有RTC寄存器不是处于跟新中才可以进行配置,可以通过RTC_CR寄存器里面的RTOFF位来判断。在配置前还必须将RTC_CRL寄存器里面的CNF位置1,进入配置模式,等待配置后,还要退出配置模式。

配置过程

1)查询RTOFF位,直到RTOFF的值变为‘1’

2)置CNF为1,进入配置模式

3)对一个或多个RTC寄存器进行写操作

4)清除CNF标志位,退出配置模式

5)查询RTOFF,直到RTOFF变为1,才代表写操作完成

注意:只有当CNF标志位被清除时,写操作才能进行,这个过程至少需要3个RTCCLK周期

在正式进入配置之前我们先来看看RTC几个寄存器

RTC控制寄存器高位RTC_CRH

在这里插入图片描述
这几位是用来使能中断的,可以配合前面的RTC框图“食用”

RTC控制寄存器低位RTC_CRL
在这里插入图片描述
在这里插入图片描述
注意:标志位都需要由软件清零

RTC预分频转载寄存器(RTC_PRLH/RTC_PRLL)

该寄存器是用于配置预分频器的分频比的,只有前20位有效,即PRL[19:0]有效,总共20位。

时钟计算公式fTR_CLK = fRTCCLK /(PRL[19:0]+1)。

当LSE位32.678kHz时,只需将RTC_PRLL配置成32677即可。

RTC计数器寄存器(RTC_CNTH/RTC_CNTL)

该32寄存器可以通过配置来设定初值,并且在TR_CLK的基准下进行计数

RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)

该32位寄存器用来配置闹钟的数值。

现在基本知识框架都已经介绍好了正式进入配置阶段

首先我先给出直接操作寄存器的版本,后面我也会给出操作固件库的版本。

我相信通过前面的讲解,直接操作寄存器反而会更简单!代码也很容易看懂

//寄存器版本
void RTC_Init(void)
{
//这里是第一步解除写保护RCC->APB1ENR |= RCC_APB1ENR_PWREN;//电源接口时钟使能RCC->APB1ENR |= RCC_APB1ENR_BKPEN;//备份接口时钟开启PWR->CR |= PWR_CR_DBP;//允许写入RTC和后备寄存器
//这里是第二步进入配置RCC->BDCR |= RCC_BDCR_LSEON;//打开外部32kHz振荡器while(!(RCC->BDCR & RCC_BDCR_LSERDY));//等待外部32kHz振荡器就绪RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;//选择外部32kHz振荡器作为RTC时钟源RCC->BDCR |= RCC_BDCR_RTCEN;//RTC时钟使能while(!(RTC->CRL &RTC_CRL_RTOFF));//等待上一次写操作完成RTC->CRL |= RTC_CRL_CNF;//进入配置模式RTC->PRLL = 32767;//fTR_CLK = fRTCCLK /(PRL[19:0]+1),周期为1HzRTC->CNTL = 0;//配置当前时间RTC->CNTH = 0;RTC->ALRH = 0;//配置闹钟时间RTC->ALRL = 2;RTC->CRH |= (RTC_CRH_ALRIE + RTC_CRH_SECIE);//使能秒中断和闹钟中断	RTC->CRL &= ~(RTC_CRL_CNF);//退出配置模式
}

我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台,本着大家一起互相学习的心态而建立,不太成熟,希望志同道合的朋友一起来。QQ1群372991598

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/367263.html

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

相关文章

PHP校园论坛-计算机毕业设计源码08586

摘 要 本项目旨在基于PHP技术设计与实现一个校园论坛系统,以提供一个功能丰富、用户友好的交流平台。该论坛系统将包括用户注册与登录、帖子发布与回复、个人信息管理等基本功能,并结合社交化特点,增强用户之间的互动性。通过利用PHP语言及其…

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪,但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落,而段落又由许多句子组成。 啊。 即使在极少数情况下,我读完了一章,下一页上已经有另一章等着…

什么是自动气象站呢

自动气象站,作为现代气象观测的重要工具,已经深入到我们生活的各个领域,从气象预报到农业生产,再到环境保护,自动气象站都发挥着不可或缺的作用。 自动气象站,顾名思义,是一种能够自动收集、处理…

153. 寻找旋转排序数组中的最小值(中等)

153. 寻找旋转排序数组中的最小值 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:153. 寻找旋转排序数组中的最小值 2.详细题解 如果不考虑 O ( l o g n ) O(log n) O(logn)的时间复杂度,直接 O ( n ) O(n) O(n)时间复杂…

基于Spring Boot的先进时尚室内管理系统

1 项目介绍 1.1 研究背景 随着21世纪信息技术革命的到来,互联网的普及与发展对人类社会的演变产生了深远影响,跨越了物质生活的丰盈边界,更深层次地滋养了人类的精神文化生活。在过去,囿于地理位置和技术条件的限制,…

【网络】网络基础(一)

网络基础(一) 文章目录 一、计算机网络背景1.1网络发展1.2认识“协议” 二、网络协议初识2.1OSI七层模型2.2OSI五层模型 三、网络传输基本流程3.1局域网通信3.2网络传输流程不跨子网的网络传输跨子网的网络传输 3.3网络中的地址管理IP地址MAC地址 一、计…

使用conda安装第三方包报错CondaSSLError

使用conda安装第三方包报错CondaSSLError 1. 报错信息2. 解决方法 1. 报错信息 错误描述:刚刚下载的 anaconda 在使用 conda 安装 pytorch 时报错(CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to download …

LeetCode题练习与总结:二叉树的后序遍历--145

一、题目描述 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1]示例 2: 输入:root [] 输出:[]示例 3: 输入&#xff1a…

2002-2022年各省老年人口抚养比(人口抽样调查)数据

2002-2022年各省老年人口抚养比(人口抽样调查)数据 1、时间:2002-2022年 2、指标:老年人口抚养比 3、来源:国家统计局、统计年鉴 4、范围:31省, 5、缺失情况:无缺失,其中2010年的值取2009、…

Swift 中强大的 Key Paths(键路径)机制趣谈(下)

概览 在上一篇博文 Swift 中强大的 Key Paths(键路径)机制趣谈(上)中,我们介绍了 Swift 语言中键路径机制的基础知识,并举了若干例子讨论了它的一些用武之地。 而在本文中我们将再接再厉,继续有趣的键路径大冒险,为 KeyPaths 画上一个圆满的句号。 在本篇博文中,您将…

JavaScript之深入对象,详细讲讲构造函数与常见内置构造函数

前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家详细讲讲构造函数与常见内置构造函数,并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家,欢迎…

笔记:Git学习之应用场景和使用经验

目标:整理Git工具的应用场景和使用经验 一、开发环境 Git是代码版本控制工具;Github是代码托管平台。 工具组合:VSCode Git 需要安装的软件:vscode、Git 其中vscode需要安装的插件:GitLens、Git History 二、应用…

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具: 面板显示:工具包含一个面板,用于展示软件的不同版本信息。版本信息:面板上显示主版本号、当前版本号和子版本号。版本控制功能…

单目行车测距摄像系统(单目测距-行车)

单目行车测距摄像系统是一种利用单个摄像头实现车辆行驶中前方障碍物距离测量的技术。该系统通过计算机视觉算法,能够实时分析摄像头捕捉的图像,精确计算出车辆与前方物体之间的距离,对于自动驾驶、高级驾驶辅助系统(ADAS&#xf…

【探索Linux】P.36(传输层 —— TCP协议段格式)

阅读导航 引言一、TCP段的基本格式二、控制位详细介绍三、16位接收窗口大小⭕窗口大小的作用⭕窗口大小的限制⭕窗口缩放选项⭕窗口大小的更新⭕窗口大小与拥塞控制 四、紧急指针温馨提示 引言 在上一篇文章中,我们深入探讨了一种无连接的UDP协议,它以其…

《新华日报》理论版报刊简介及投稿邮箱

《新华日报》理论版报刊简介及投稿邮箱 《新华日报》是中国共产党在抗日战争时期和解放战争初期创办的大型机关报,1949 年 4 月在南京复刊,1952 年成为中国共产党江苏省委机关报,现为中共江苏省委直属事业单位。 该报纸的理论版(…

记录前端发现问题之 mock接口无返回数据导致所有后续接口调用报错:网络异常

1. 背景 就更新了代码,发现新涉及的页面,切换tab 之后会报错网络异常,再次切换其他没涉及的功能页面,继续报错网络异常 测试环境:纯前端代码,后端是前端mock的数据,仅供demo 2. 问题报错 手动…

开箱机视觉系统大揭秘:如何轻松辨别千差万别的包装?

在现代物流仓储领域,开箱机作为提升作业效率的关键设备,正日益受到行业的重视。而开箱机的视觉系统更是其十分强大,能够准确辨认不同包装,确保物流作业的高效与准确。与星派深入探究一下开箱机视觉系统是如何工作的,以…

女生读中职,选择什么专业最吃香!

自《国家职业教育改革实施方案》颁布实施以来,中国职业教育的改革和发展已取得显著进展。目前,我国已建立起世界上规模最大的职业教育体系,中高职学校每年培养约1000万高素质技术技能人才,职业教育实现了历史性的跨越。对于那些不愿加入“千军万马过独木桥”的高考竞争大军,初中…