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文件中)

  1. 使能电源时钟和后备寄存器时钟,允许RTC后备寄存器写访问。
    (PWR中有备用寄存器和RTC相关的电源,RTC使用到后备寄存器,所以要打开BKP)
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP, ENABLE) ;
    PWR_BackupAccessCmd(ENABLE) ;//允许后备寄存器访问
  2. 复位备份区域,开启外部低速振荡器并等待晶振稳定。
    BKP_DeInit();//这个将导致RTC被复位,不用每次都调用这个
    RCC_LSEConfig(RCC_LSE_ON) ;//打开外部低速振荡器
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
  3. 选择RTC时钟,并使能RTC,让RTC开始工作。
    RCC_RTCCLKConfi g (RCC_RTCCLKSource_LSE) ;
    RCC_RTCCLKCmd (ENABLE) ;
  4. 开启RTC后,检查时钟同步,等待写操作完成。
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();
  5. 设置RTC分频器,使RTC时钟为1Hz,等待写操作完成。
    RTC_SetPrescaler(32767);//RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
    RTC_WaitForLastTask();
  6. 设置RTC中断。(不需要中断可略)
    RTC_ITConfig(RTC_IT_SEC, ENABLE);//秒中断
    RTC_WaitForLastTask();
  7. 编写RTC中断服务函数。(不需要中断可略)
    RTC_IRQHandler
    FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG) ;
    RTC_ClearITPendingBit(RTC_IT_SEC) ;

2.2 RTC控制程序

在这里插入图片描述
建立一个结构体来管理时间。

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

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

相关文章

【机器学习】深度学习、强化学习和深度强化学习?

深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标,虽然都属于机器学习的范畴,但各自的实现方式和侧重点有所不同。 1. 深度学习(Deep Learning) 深度学习是一种基于神经网络的…

76.【C语言】perror函数介绍

1.cplusplus的官网介绍 cplusplus的介绍 点我跳转 2.翻译 函数 perror void perror ( const char * str ); 打印错误信息 将errno(最后一个错误数字)的值解释为错误信息,之后把它打印到stderr中(标准错误输出流,通常是控制台)(备注有关"流"的概念在75.【C语言】文件…

CMake 属性之目录属性

【写在前面】 CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置。 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为。 通过目录…

Jax(Random、Numpy)常用函数

目录 Jax vmap Array reshape Random PRNGKey uniform normal split choice Numpy expand_dims linspace jax.numpy.linalg[pkg] dot matmul arange interp tile reshape Jax jit jax.jit(fun, in_shardingsUnspecifiedValue, out_shardingsUnspecifiedVa…

docker compose一键部署容器监控 CAdvisor+InfluxDB+Granfana

docker compose一键部署容器监控 CAdvisorInfluxDBGranfana CAdvisor监控收集InfluxDB存储数据Granfana展示图表 1、原生命令 通过docker stats 命令可以查看当前宿主机上所有创建的容器的CPU,内存和网络流量等信息 docker stats 缺点:只能查看当前宿主机的全部…

Pyppeteer:如何在 Python 中使用 Puppeteer 和 Browserless?

Python 中的 Pyppeteer 是什么? Pyppeteer 是流行的 Node.js 库 Puppeteer 的 Python 移植版本,用于以编程方式控制无头 Chrome 或 Chromium 浏览器。 本质上,Pyppeteer 允许 Python 开发人员在 Web 浏览器中自动执行任务,例如抓…

多选框的单选操作 Element ui

文章目录 样式预览Q:为什么要这么做?实现原理探索路程 样式预览 Q:为什么要这么做? 单选框的样式不够好看单选框因为框架等原因,无法取消选择 实现原理 判断多选框绑定的 value,如果长度为2,那…

oracle-函数-instr()的妙用以及相似功能like

INSTR(C1,C2[,I[,J]]) 【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等),按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【…

RTSP RTP RTCP SDP基础知识

理论 流(Streaming ) 是近年在 Internet 上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种 顺序流式传输 (Progressive Streaming) 实时流式传输 (Real time Streaming) ​​​​​…

国产长芯微LDC5422单通道、16位、电流源和电压输出DAC,HART连接完全P2P替代AD5422

描述 LDC5422是低成本、精密、完全集成、16位数模转换器(DAC),内置可编程电流源和可编程电压输出,设计用于满足工业过程控制应用的需要。 输出电流范围可编程设置为4 mA至20 mA、0 mA至20 mA或者超量程的0 mA至24 mA。 此产品的LFCSP版本有一个CAP2引脚…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”,我们该何去何从? 想象一下,你向最新的GPT模型提问:“9.9和9.11哪个大?”这本应是个小菜一碟的问题,却足以让不少高科技的“大脑”陷入沉思, 甚至给出令人啼笑皆非的答案。近…

vite学习教程06、vite.config.js配置

前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

智能桥梁:Profinet至CanOpen,台达伺服无缝对接

在工业自动化领域,将西门子S7-1200系列PLC与具备CANOPEN通讯功能的伺服驱动器设备集成时,由于PLC默认采用PROFINET实时以太网通讯协议,直接连接存在协议不匹配问题。为解决这一挑战,开疆推出的Profinet转CANOPEN网关提供了高效便捷…

Java基础知识——String篇

一、String 1、是什么 String 是 Java 中用于表示字符串的类。Java 中的字符串是不可变的,也就是说一旦创建,字符串的内容无法更改。 2、如何构造 (1)无参数构造方法: String str new String(); //创建一个空字符…

sass学习笔记(1.0)

1.使用变量 sass可以像声明变量那样进行使用,这样同样的样式,就可以使用相同的变量来提高复用。 语法为:$ 变量名 在界面中也可以正常的显示 当然了,变量之间也可以相互引用,比如下面 div{$_color: #d45387;$BgColo…

Word 拼写检查如何关闭?2 步轻松搞定

在日常进行文档编辑操作的过程中,拼写词语错误是比较常见的,特别是文档中包含大量文字的时候,一不小心就有可能输错,Word 当然有功能可以辅助我们发现这些问题,这就是 Word 拼写检查功能。 Word 拼写检查功能可以自动…

Spring Boot学习资源库:Java开发者的新篇章

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…

Java基本数据类型转换

一、自动类型转换 1.基本介绍 当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换数据类型按精度(容量)大小进行排序为: ![在这里插入图片描述](https://i-blog.csdnimg.…

【第2章 开始学习C++】C++语句

文章目录 导语声明语句和变量赋值语句cout的新花样使用cin类简介 导语 C 程序是一组函数, 而每个函数又是一组语句。 C 有好几种语句,例如:声明语句创建变量, 赋值语句给该变量提供一个值。 声明语句和变量 计算机是一种精确的…

Java 的数据结构整理(整合版)

Java 的数据结构整理(整合版) 一、数据输入输出 https://www.runoob.com/java/java-scanner-class.html 这部分是为了预防 leetcode 刷习惯了,忘记怎么处理输入输出的问题 数据输入 Java的数据输入和 C 相比非常繁琐,因此大多…