stm32学习笔记-RTC实时时钟
文章目录
- 一、RTC基础知识
- 1.1 RTC简介
- 1.2 RTC的晶振
- 二、stm32的RTC
- 2.1 RTC和后备寄存器
- 2.2 stm32 RTC结构框图及特性
- 三、stm32 RTC编程
- 2.1 RTC初始化
- 2.2 RTC控制程序
一、RTC基础知识
1.1 RTC简介
实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。
实时时钟芯片是日常生活中应用最为广泛的消费类电子产品之一。它为人们提供精确的实时时间,或者为电子系统提供精确的时间基准,目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。有些时钟芯片为了在主电源掉电时,还可以工作,需要外加电池供电。
RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。
1.2 RTC的晶振
任何实时时钟的核心都是晶振,晶振频率为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性,晶振必须正常工作,不能够收到干扰。RTC的晶振又分为:外部晶振和内置晶振。
RTC的晶振频率为什么是32768Hz?
- 32768 Hz = 215 ,可以分频15次后得到1Hz的频率,1S的周期 ,实现秒计时。
- 经过工程师的经验总结32768 Hz,时钟最准确。
- 规范和统一。
二、stm32的RTC
2.1 RTC和后备寄存器
RTC电源
RTC和后备寄存器通过一个开关供电,在VDD有 效时该开关选择VDD供电,否则由VBAT引脚供电。
后备寄存器(10个16位的寄存器)可以用于在关闭VDD时,保存20个字节的用户应用数据。
RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。
RTC晶振
实时时钟具有一组连续运行的计数器,可以通过适当的软件提供日历时钟功能,还具有闹钟中断和阶段性中断功能。
RTC的驱动时钟可以是一个使用外部晶体的32.768kHz的振荡器、内部低功耗RC振荡器或高速的外部时钟经128分频。
为补偿天然晶体的偏差,可以通过输出一个512Hz的信号对RTC的时钟进行校准。
RTC具有一个32位的可编程计数器,使用比较寄存器可以进行长时间的测量。
有一个20位的预分频器用于时基时钟,默认情况下时钟为32.768kHz时,它将产生一个1秒长的时间基准。
RTC计时
- STM32的RTC只用一个32位计数器来计时,而不是用年月日时分秒的分组寄存器。
- 通过设置可以让这个计数器1秒加1,从0-0XFFFFFFFF大约可计时136年。
- 时间起点一般设置为1970-01-01 00:00:00(因现有函数如此定义,想更改需要重新编写时间换算函数。
如果要读当前的年月日时分秒,先读出32位RTC计数器值,然后以1970-01-01 00:00:00为起点, 加上计数器中的秒数,再换算成年月日时分秒,即可得出当前时间。
后备寄存器
2.2 stm32 RTC结构框图及特性
stm32的实时时钟RTC(real time clock)是一个独立的32位的定时器。stm32的RTC可以提供日历时钟,闹钟的功能。
RTC模块和时钟配置是在后备区域(下图灰色区域位后备区域)。只要后备区域提供电源,RCT便不会停止工作。通常会在后备区域提供一个纽扣电池保证RTC正常工作。
RTC_DIV寄存器、RTC_PRL寄存器是20位。RTC_CNT寄存器、RTC_ALR寄存器是32位。
- 3种时钟来源
常使用LSE作为时钟来源。因为215 = 32768,LSE=32.768K
RTC_DIV常配置为32768,对LSE时钟进行分频。分频后,频率就为1Hz,实现一秒记一次数。 - 可编程的32位的计数器
只能向上计数。
- 3个专门的可屏蔽中断:
闹钟中断还可以用来唤醒CPU,可以利用RTC实现为定时开机的功能。
闹钟中断还可以连接外部中断。 - 系统复位保护
除了RTC_PRL、 RTC_ALR、 RTC_CNT和RTC_DIV寄存器外,所有的系统寄存器都由系统复位或电源复位进行异步复位。
RTC_PRL、 RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位。
系统复位后,默认禁止访问后备寄存器和 RTC,防止对后备区域(BKP)的意外写操作。若想后备寄存器和RTC ,需使能PWR、BKP时钟,允许后备寄存器BKP访问。
三、stm32 RTC编程
2.1 RTC初始化
RTC初始化分为首次启动RTC初始化,普通启动RTC初始化。
注意,由于RTC时钟与众不同,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。
首次启动RTC初始化具体步骤如下: (RTC相关 库函数在stm32f10x rtc. c和stm32f10x_ rtc h文件中)
- 使能电源时钟和后备寄存器时钟,允许RTC后备寄存器写访问。
(PWR中有备用寄存器和RTC相关的电源,RTC使用到后备寄存器,所以要打开BKP)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP, ENABLE) ;
PWR_BackupAccessCmd(ENABLE) ;//允许后备寄存器访问 - 复位备份区域,开启外部低速振荡器并等待晶振稳定。
BKP_DeInit();//这个将导致RTC被复位,不用每次都调用这个
RCC_LSEConfig(RCC_LSE_ON) ;//打开外部低速振荡器
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); - 选择RTC时钟,并使能RTC,让RTC开始工作。
RCC_RTCCLKConfi g (RCC_RTCCLKSource_LSE) ;
RCC_RTCCLKCmd (ENABLE) ; - 开启RTC后,检查时钟同步,等待写操作完成。
RTC_WaitForSynchro();
RTC_WaitForLastTask(); - 设置RTC分频器,使RTC时钟为1Hz,等待写操作完成。
RTC_SetPrescaler(32767);//RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
RTC_WaitForLastTask(); - 设置RTC中断。(不需要中断可略)
RTC_ITConfig(RTC_IT_SEC, ENABLE);//秒中断
RTC_WaitForLastTask(); - 编写RTC中断服务函数。(不需要中断可略)
RTC_IRQHandler
FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG) ;
RTC_ClearITPendingBit(RTC_IT_SEC) ;
2.2 RTC控制程序
建立一个结构体来管理时间。
相关文章:

stm32学习笔记-RTC实时时钟
文章目录 一、RTC基础知识1.1 RTC简介1.2 RTC的晶振 二、stm32的RTC2.1 RTC和后备寄存器2.2 stm32 RTC结构框图及特性 三、stm32 RTC编程2.1 RTC初始化2.2 RTC控制程序 一、RTC基础知识 1.1 RTC简介 实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称…...

简历中的期望薪资怎么定?
在简历中撰写期望薪资时,既要体现你的价值认知,又要保持一定的灵活性和开放性,以便在后续的面试和薪资谈判中留有余地。以下是一些撰写期望薪资的合理方法: 一、明确薪资范围 1.市场调研: 在撰写期望薪资前…...
MySQL 中的 GROUP BY 使用
MySQL 中的 GROUP BY 使用指南 GROUP BY 是 SQL 中一个非常强大的语句,用于将查询结果按指定的列进行分组,并对每个分组执行聚合函数。它常常与聚合函数(如 COUNT、SUM、AVG、MIN 和 MAX)结合使用,以生成汇总信息。 …...

在 ubantu 20.04 云服务器上基于 bochs 编译 linux0.11
安装 bochs 将下面的命令全部执行一遍: sudo apt-get install build-essential sudo apt-get install xorg-dev sudo apt-get install bison sudo apt-get install g 我们区官网下载一下bochs的源码:bochs下载 这里我下载好了bochs2.6.8 这个版本的…...
docker-compose安装部署和使用
docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务 1.docker-compose安装 github上下载二进制文…...
Java之静态
静态: 使用 static 关键字声明的成分属于类本身,而不是类的任何特定对象的实例。这意味着你可以在创建类的任何对象之前访问它们。 静态变量: 静态变量(也称为类变量)是被类的所有实例共享的变量。无论你创建多少对象…...

PCB缺陷检测数据集 xml 可转yolo格式 ,共10688张图片
PCB缺陷检测数据集(yolov5,v7,v8) 数据集总共有两个文件夹,一个是pcb整体标注,一个是pcb部分截图。 整体标注有6个分类,开路,短路等都已经标注,标注格式为xml,每个文件夹下有100多张…...
【linux开发-驱动】-设备树
一、什么是设备树 描述设备树的文件叫做DTS(Device Tree Source),采用树形结构描述板级设备,也就是开发板上的设备信息,比如IIC接口上接了那些设备,内存基地址等 树的主干就是系统总线,枝干就…...
不动产证ocr识别场景解析、房产证识别API
不动产证OCR识别、房产证识别接口是通过光学字符识别技术(OCR)从不动产证书的图像或扫描件中自动提取关键信息的技术应用。该场景的主要目标是提高信息录入的效率,减少人工输入的错误,并能自动化处理大量不动产证书、房产证的数据…...

gpg 密钥生成、导入、导出、自动输入密码
目录 一、系统环境 二、常用命令(以签名密钥为例) (1)生成密钥 (2)列出私钥 (3)列出公钥 (4)导出公钥 (5)导出私钥 ÿ…...

新个性化时尚解决方案!Prompt2Fashion:自动生成多风格、类型时尚图像数据集。
今天给大家介绍一种自动化生成时尚图像数据的方法Prompt2Fashion。 首先创建了一组描述,比如“适合婚礼的休闲风格服装”,然后用这些描述来指导计算机生成图像。具体来说,他们使用了大型语言模型来写出这些服装的描述,接着将这些描…...

软件设计师——计算机网络
📔个人主页📚:秋邱-CSDN博客☀️专属专栏✨:软考——软件设计师🏅往期回顾🏆:软件设计师——操作系统🌟其他专栏🌟:C语言_秋邱 一、OSI/ RM七层模型(⭐⭐⭐)…...
Python 实现电话号码和Email地址提取程序
Python 实现电话号码和Email地址提取程序 背景 在日常工作或学习中,我们经常需要从网页或文档中提取信息,比如电话号码和E-mail地址。手动查找和提取这些信息可能会耗费大量时间,而自动化工具可以帮助我们快速完成这个任务。 本篇博客将带…...

JavaGuide(3)
一、项目背景与简介 JavaGuide由GitHub用户Snailclimb开发并维护,是一个全面而深入的Java学习资源库。它旨在为Java初学者和有经验的开发者提供一个系统的学习路径和丰富的资源,帮助他们系统地学习和巩固Java及相关技术知识。 二、项目内容与特点 Jav…...
微信小程序15天
UniApp(Vue3组合式API)和微信小程序15天学习计划 第1天:开发环境配置和基础知识 UniApp和微信小程序概述及对比安装并配置HBuilderX(UniApp)和微信开发者工具创建第一个UniApp Vue3项目和微信小程序项目了解两个平台的项目结构差异配置外部浏览器和各种小程序模拟…...
用Python制作数据可视化仪表盘:使用Dash与Plotly构建实时交互式仪表盘
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在数据驱动的世界中,可视化是理解和解释复杂数据的关键工具。通过数据可视化,用户能够快速洞察数据趋势,做出明智决策。而仪表盘作为一种高度集成的可视化工具,能够将多种数据图表汇总到一个界面上,便于实时…...

干部管理系统:全面提升干部管理效能
数字化浪潮下,干部管理系统作为管理利器,日益凸显其核心价值。该系统全面实现干部信息的数据化,涵盖从基础档案到教育、工作、培训及考核等全方位细节,信息详尽且条理清晰。这不仅极大提升了干部信息查询与更新的效率,…...
Java之方法
方法(函数) Java中的方法必须定义在类或接口中。 package day2;import java.util.Scanner;public class way {public static void main(String[] args) {int arr[] new int[5];Scanner sc new Scanner(System.in);for (int i 0; i < arr.length;…...
MyBatis 数据表与实体映射的隐藏陷阱
这两天在处理一个线上问题时,发现Mybatis数据表和实体映射的时候会埋一个坑。这个问题看似微小,但却可能在关键时刻给我们带来不小的困扰。接下来,让我们深入剖析这个问题,并探究其发生的根源。 一、问题描述 我们在使用 Mybati…...
leetcode-239. 滑动窗口最大值
题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...