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

news2024/11/27 11:58:42

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),周期为1Hz
	RTC->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.coloradmin.cn/o/1865710.html

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

相关文章

我的3次软考高项通关之旅

1、缘起 初次听说软考是在2022年下半年了,软考的高级分为很多种,我起先想报考高级架构师,但是架构师一年才考一次,如果一次考不过得再准备一年,时间对我来说太长了,于是我决定报考一年考两次的高项。对于国…

10个AI高考上岸朋友圈文案设计

高考是人生中的一个重要时刻,上岸后分享朋友圈的文案可以既表达喜悦,也可以展现对未来的期待。以下是10个不同风格的高考上岸朋友圈文案,供你参考: 1. **梦想成真版**: "十年磨一剑,今朝试锋芒。高…

测试基础16:测试用例设计方法-测试大纲法

课程大纲 1、应用场景 验证页面跳转:有多个窗口/页面,每个窗口/页面有多个动作,每个动作之间有相互的联系的场景。看点击后,页面跳转正确与否。 2、设计步骤 step1.列出大纲:列出涉及的页面和页面可执行的动作。 s…

大厂面试官问我:Redis中热key和大key是怎么解决的?【后端八股文五:Redis热key和大key八股文合集】

往期内容: 大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客 大厂面试官问我:布隆过滤…

2024HW面试真题(三)之看完蓝初变蓝高

以下是部分面试真题记录‍‍ 关于黑客&网络安全学习指南 学好 网络安全不论是就业还是做副业赚钱都不错,但要学会 网络安全 还是要有一个学习规划。最后给大家分享一份全套的 网络安全学习资料,给那些想学习网络安全的小伙伴们一点帮助!…

eventbus和vuex

EventBus和Vuex EventBus 工作原理 创建一个vue实例,然后通过空的vue实例作为组件之间的桥梁,进行通信,利用到的设计模式有发布订阅模式 Vuex 工作原理 维护了一个state树,是独立的状态树,有明显的层级关系。不论…

振兴黄河新生力 打造文旅新地标——全国首家黄河会客厅在山东济南启幕

6月26日,由黄河文化发展工作站组织实施的全国首家黄河会客厅平台发布会暨山东基地启动仪式在济南成功召开。黄河会客厅以“民生黄河、生态动能、中华文明”为核心主题,融汇黄河智库、黄河文明、黄河产域、黄河金融、黄河科创、黄河物贸六大振兴赋能体系&…

Leetcode Hot100之矩阵

1. 矩阵置零 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路 题目要求进行原地更改,也就是不能使用额外的空间,因此我们可以使用第一行的元素来记录对应的…

工业液晶屏G065VN01 V2规格书简介

G065VN01 V2 背面实物图 2. 概述 G065VN01 V2 专为 VGA (640 x RGB x 480) 分辨率和 16.2M(RGB 6 位 FRC)或 262k 色(RGB 6 位)的工业显示应用而设计。它由TFT-LCD面板、驱动IC、控制和电源电路板以及包括…

等保相关总结

等级划分准则 等保2.0基本框架 等保2.0变化解读 等级测评 3保1评 分保工作简介 分保工作流程 等保 等保工作流程:定级 -》备案 -》整改 -》测评 -》复核 关保 密评

C++系列-String(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” assign 这个接口的目的是用一个新的值代替之前的那个值 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<list> #include&l…

Python自动造波器椭圆曲线波孤子解

&#x1f3af;要点 &#x1f3af;快速傅立叶变换算法周期域解椭圆曲线波 | &#x1f3af;算法数值解孤波脉冲和结果动画 | &#x1f3af;三种语言孤子解浅水表面波方程 | &#x1f3af;渐近分解算法孤子波 | &#x1f3af;自适应步长算法孤子波 | &#x1f3af;流体自动造波器…

react学习——17react中todoList案列

1、项目目录 2、App.js //创建“外壳”组件APP import React, {Component} from "react"; //引入Header组件 import Header from "./components/Header"; //引入List组件 import List from "./components/List"; //引入Footer组件 import Foot…

【unity笔记】八、Unity人物动画介绍

一、效果预览 本内容仅介绍为unity场景中的任务添加简单的动画效果。 二、小试牛刀 2.1 插件准备 在unity 中导入人物模型。常使用的免费人物模型和动画模型有Robot Kyle&#xff0c;Unity-Chan! Model&#xff0c;Basic Motions FREE。 其中Robot Kyle仅支持URP渲染。如…

docker内apt-get update Waiting for headers 0%

问题描述 docker运行debian等容器时&#xff0c;执行apt update或者apt-get update&#xff0c;可能会出现以下错误&#xff1a;root754a91d3630a:/# apt-get update 0% [Waiting for headers] [Waiting for headers] [Connected to developer.download.nvidia.com (152.199.3…

oracle11.2.0.4 RAC 保姆级静默安装(一) GI集群软件

一、响应文件准备 我们直接使用软件解压后的response文件夹中的响应文件模板进行修改 选择当前服务器的主机名,产品目录是在已存在的/u01/app目录基础上自动创建的无需提前创建oraInventory 按需选择语言,具体语言配置参考表格 一般rac默认选择安装类型为CRS_CONFIG 对应正…

Python 基础 (标准库):collections (集合类)

1. 官方文档 collections --- 容器数据类型 — Python 3.12.4 文档 Python 的 collections 模块提供了许多有用的数据类型&#xff08;包括 OrderedDict、Counter、defaultdict、deque 和 namedtuple&#xff09;用于扩展 Python 的标准数据类型。掌握 collections 中的数据类…

一些3D数据集的简单介绍

一、Objaverse 1.0 Objaverse 1.0: a large dataset of objects with 800K (and growing) 3D models with descriptive captions, tags and animations. Assets not only belong to varied categories like animals, humans, and vehicles, but also include interiors and ex…

超越边界:探索深度学习的泛化力量

深度学习的泛化能力 一. 简介1.1 深度学习的定义1.2 什么是泛化能力1.3 深度学习模型的泛化能力1.4 提升深度学习模型的泛化能力 二. 泛化能力的重要性2.1 深度学习中泛化能力的作用2.1.1 防止过拟合2.1.2 处理噪声和不完整数据2.1.3 对于数据分布的变化具有适应性 2.2 泛化能力…

关于服务器的一些知识

1. 云服务器 和 轻量应用服务器 腾讯云中的"云服务器"&#xff08;Cloud Virtual Machine, CVM&#xff09;和"轻量应用服务器"&#xff08;Lite Cloud Server&#xff09;都是提供云端计算资源的服务&#xff0c;但它们在定位、特性和使用场景上存在一些差…