RTC简介

实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。

普通定时器拿来作时钟可行吗?普通定时器无法掉电运行!

RTC特性:

1,能提供时间(秒钟数) 2,能在MCU掉电后运行 3,低功耗

常用的RTC方案

对比因素

内部RTC

外置RTC

信息差异

提供秒/亚秒信号

提供秒信号和日历

功耗

功耗高

功耗低

体积

不用占用额外体积

体积大

成本

成本低

成本高

1,一般都需要设计RTC外围电路; 2,一般都可以给RTC设置独立的电源; 3,多数RTC的寄存器采用BCD码存储时间信息;

BCD码

时间戳

Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒

时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量

世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间

UTC/GMT

GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准

UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致

时间戳转换

C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换

函数

作用

time_t time(time_t*);

获取系统时钟

struct tm* gmtime(const time_t*);

秒计数器转换为日期时间(格林尼治时间

struct tm* localtime(const time_t*);

秒计数器转换为日期时间(当地时间)

time_t mktime(struct tm*);

日期时间转换为秒计数器(当地时间

char* ctime(const time_t*);

秒计数器转换为字符串(默认格式)

char* asctime(const struct tm*);

日期时间转换为字符串(默认格式)

size_t strftime(char*, size_t, const char*, const struct tm*);

日期时间转换为字符串(自定义格式)

STM32 F1 RTC框图介绍

1,RTC预分频器

2,32位可编程计数器

3,待机唤醒

4,RTC控制寄存器与APB1接口

3个时钟源(HSE / 128)            (LSI 40kHz)         (LSE 32.768kHz)

RTC工作在后备区域,VDD掉电仍正常

F1 RTC相关寄存器介绍

后备寄存器和RTC寄存器特性(F1)

部分寄存器写保护:RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不会被系统复位 

数据存储功能:RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。 后备寄存器可用于保存掉电时的数据。

独立工作:RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电。在VBAT供电时仍可继续工作。

2个独立复位:APB1接口由系统复位;RTC核心只能由后备域复位;

RCC_APB1ENR寄存器

使能PWR && BKP时钟

PWR_CR寄存器

使能后备域和RTC的访问权限

RCC_BDCR寄存器

通过RCC_BDCR配置: 1,开启RTC时钟 2,开启LSE时钟; 3,选择RTC计数时钟源;

选择LSE的原因,见F1参考手册V10 59页关于RTC时钟的描述

RTC_CRL寄存器

RTC进入配置模式,关注的位

RTC_CRH寄存器

复位值为0,置1可开启相关中断

RTC_PRLH寄存器

使计数器每计数一次就是1秒,即需要32768分频。

RTC_PRLL寄存器

与RTC_PRL相似的寄存器RTC_DIV可以在不停止分频计数器的工作,获得预分频计数器的当前值。

RTC_CNTH寄存器

注意:进入配置模式才能对寄存器进行操作

RTC_CNTL寄存器

与RTC_CNT相似的寄存器还有RTC_ALR,这里就不做介绍。

RTC相关的HAL库驱动介绍(F1)

驱动函数

关联寄存器

功能描述

HAL_RTC_Init(...)

CRL/CRH/PRLH/PRLL

初始化RTC

HAL_RTC_MspInit(…)

初始化回调

使能RTC时钟

HAL_RCC_OscConfig(…)

RCC_CR/PWR_CR

开启LSE时钟源

HAL_RCCEx_PeriphCLKConfig(...)

RCC_BDCR

设置RTC时钟源为LSE

HAL_PWR_EnableBkUpAccess(...)

PWR_CR

使能备份域的访问权限

HAL_RTCEx_BKUPWrite/Read()

BKP_DRx

/写备份域数据寄存器

以下是需要开启的时钟源: __HAL_RCC_RTC_ENABLE()

__HAL_RCC_PWR_CLK_ENABLE()

__HAL_RCC_BKP_CLK_ENABLE()

RTC基本驱动步骤(F1)

时间设置和读取

由于F1的RTC没有日历寄存器,使用时只存储总秒数,不利于直接设置和显示,所以我们还需要编写函数把时间变成我们日常的日历时间

驱动函数

功能描述

rtc_get_time(…)

总秒数转成日历时间

rtc_is_leap_year(…)

判断是否闰年

uint8_t rtc_get_week(…)

计算公历日历对应的星期几

static long rtc_date2sec(…)

日历时间转成对应总秒数

全局的结构体变量calendar存储时间信息

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

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

相关文章

【OC】单例模式

文章目录前言概念优缺点优点缺点两种使用模式懒汉模式实现代码运行结果饿汉模式实现代码运行结果在自定义类方法时的几种常见写法总结前言 在之前我们已经学习过单例模式的有关内容,但是只是最简单的单例,无法胜任多线程或者稍微多一点的情况便无法确定…

机器学习(七)决策树-分类

一 概念1 决策节点通过条件判断而进行分支选择的节点。将样本的属性值,也就是特征值与决策节点上的值进行比较,从而判断它的流向。2 叶子节点没有子节点的节点,表示最终的决策结果。3 决策树的深度所有节点的最大层次数决策树具有一定的层次结…

IT 服务管理的新格局:从工单系统到一体化 ITSM 平台

企业 IT 部门的角色转变在过去,IT 部门更多被视为“技术支持”,主要负责设备维护和故障处理。但随着数字化转型加速,IT 已经成为业务连续性和创新的重要推动力。从客户体验到数据安全,从业务敏捷到成本控制,IT 服务管理…

创建一个Spring Boot Starter风格的Basic认证SDK

文章目录前言设计思路SDK实现步骤1. 创建SDK Maven项目(sdk目录)2. 实现配置类3. 实现认证逻辑4. 实现拦截器5. 实现自动配置6. 创建spring.factories文件使用方集成步骤1. 引入SDK依赖2. 配置Application属性3. 创建测试接口4. 测试接口访问SDK扩展功能…

mybatis处理统计sql进度丢失问题

如何处理统计sql进度丢失 SELECT sum(decimal_column) AS sum_value FROM your_table如上sql执行时没有问题,在数据库可视工具可以正常显示,但是在mybatis执行时,却出现解决办法 使用转 decimal 控制精度 SELECT CAST(SUM(decimal_column) A…

全球首款!科聪控制器获德国 TÜV 莱茵功能安全认证

近日,浙江科聪控制技术有限公司(以下简称"科聪")的安全移动机器人控制器MSC5000荣获全球权威认证机构德国莱茵TV集团(TV Rheinland)颁发的功能安全认证证书。这款控制器是全球首款通过SIL3、PLe 认证的移动机…

pureadmin的动态路由和静态路由

在 PureAdmin(基于 Vue3 的后台管理框架)中,静态路由和动态路由是实现路由管理的两种方式,主要区别在于路由的定义时机、加载方式和灵活性,具体区别如下: 1. 静态路由 定义方式:路由规则在代码中…

第3章:CPU实战

1. Linux操作系统CPU平均负载 以前我们总认为CPU使用率和CPU平均负载是一样的,负载高了就是CPU使用率提高。但是到底是什么情况呢? 1.1. CPU的平均负载 单位时间内 系统处于 可运行状态 和不可中断状态 的平均进程数,就是平均活跃进程数&a…

【Vue3】06-利用setup编写vue(1)

其它篇章: 1.【Vue3】01-创建Vue3工程 2.【Vue3】02-Vue3工程目录分析 3.【Vue3】03-编写app组件——src 4.【Vue3】04-编写vue实现一个简单效果 5.【Vue3】05-Options API和Composition API的区别 6.【Vue3】06-利用setup编写vue(1) 7.【Vue…

UDS NRC速查

目录 NRC 一、通用NRC(0x10~0x5F) 二、数据相关NRC(0x70~0x8F) 三、会话与状态NRC 注意事项 UDS中的NRC(Negative Response Code)即否定响应码,用于在诊断通信中表示服务端无法成功执行客户端请求的原因。以下是一些常用的UDS NRC码及其含义: HEX Name Description 01 …

【AI论文】多模态大型语言模型的视觉表征对齐

摘要:通过视觉指令微调训练的多模态大型语言模型(MLLMs)在各类任务中均取得了优异表现,然而在以视觉为中心的任务(如物体计数或空间推理)中,其性能仍存在局限。我们将这一差距归因于当前主流的纯…

SKywalking Agent配置+Oracle监控插件安装指南

SKywalking Agent配置Oracle监控插件安装指南前言: SkyWalking Elasticsearch8 容器化部署指南 Skywalking版本:V10.2.0 Skywalking Agent版本:V9.4.0 Skywalking Agent下载地址:Downloads | Apache SkyWalking 插件下载地址&…

ES相关问题汇总

问题一:关于【QueryBuilder对象】和【Query String语法】查询时底层运行方式和结果的差异

5. STM32 时钟系统分配

文章目录下述将以stm32f407 为例1. 时钟系统及频率分析2. 时钟配置下述将以stm32f407 为例 1. 时钟系统及频率分析 上述STM32F4时钟系统图解析入下: STM32F407 系列微控制器(基于 Cortex-M4 内核,带 FPU)的工作频率配置如下&…

《从 0 建立测试开发认知:先搞懂 “是什么”,再学 “怎么做”》

🔥个人主页:草莓熊Lotso 🎬作者简介:C研发方向学习者 📖个人专栏: 《C知识分享》《Linux 入门到实践:零基础也能懂》《数据结构与算法》《测试开发实战指南》《算法题闯关指南》 ⭐️人生格言&a…

net::ERR_EMPTY_RESPONSE

net::ERR_EMPTY_RESPONSE表现解决表现 Java后端封装一个接口,透传前端参数,请求到其他模块服务 本地开发环境联调时是没有问题,测试环境上报错 1.前端报错,F12检查,network上的请求,返回response选项中为空…

在线多功能环境音生成器

https://oltool.cc/toolbox/huanjingyins.html 关于环境音生成器介绍: 1、本工具可以混合各种声音,比如下雨声,打雷声,海浪声,鸟叫以及虫鸣声等,生成新的环境声。 2、定时器:可以设置倒计时&…

本地电脑映射端口到外网访问的开启方法和注意事项,内网服务提供跨网使用简单操作实现

在计算机网络中,端口映射是一项重要的技术,它允许外网用户访问局域网内的特定设备或服务。当我们在本地电脑搭建部署项目应用后,就可以通过映射端口的方式,简单快速稳定的提供互联网访问服务。以下将详细介绍如何开启电脑映射端口…

Java 大视界 -- Java 大数据在智能医疗健康档案数据分析与个性化健康管理中的应用(410)

Java 大视界 -- Java 大数据在智能医疗健康档案数据分析与个性化健康管理中的应用(410)引言:正文:一、2023 年 6 月智能医疗健康档案的核心落地需求(政策 业务双驱动)1.1 政策倒逼的数据应用痛点&#xff…

微服务架构的基石:Nacos全方位解析与Java实战指南

引言在云原生与微服务浪潮席卷而来的今天,服务的治理与配置的管理变得前所未有的复杂。一个个单一的应用被拆分为数十甚至上百个微服务,如何让这些服务轻松地发现彼此?如何在不重启应用的情况下动态调整所有服务的参数?这些问题直…