学习STM32第十六天

RTC实时时钟

一、简介

RTC是一个独立的BCD格式定时器,提供一个时钟日历,两个可编程报警中断,一个具有中断功能周期性可编程唤醒标志,RTC和时钟配置系统处于后备区域。

通过两个32位寄存器以BCD格式实现秒、分钟、小时(12、24小时制),日(星期)、月和年等信息。只要有电(VBAT提供),RTC就永不停止。RTC时钟源RTCCLK可从LSE、LSI和Divided HSE三者中选择,通常情况下使用LSE。 32768 = 2 15 32768 = 2^{15} 32768=215,经过15位分频器的自然溢出即可得到1Hz的频率,15位的计数器从0开始计数,计到最大值32767自然溢出,这个溢出信号就是1Hz信号。
RTC框图
RTCCLK先进行平滑校准,然后进行非同步预分频,最后进行同步预分频得到1Hz。相关频率计算公式如下: f C K − A P R E = f R T C C L K P R E D I V − A + 1 f_{CK - APRE}=\frac {f_{RTCCLK}}{PREDIV-A + 1} fCKAPRE=PREDIVA+1fRTCCLK f C K − A P R E f_{CK - APRE} fCKAPRE是用于为二进制 R T C − S S R RTC-SSR RTCSSR子秒下计数器计时,减到0, R T C − S S R RTC-SSR RTCSSR会重新加载 P R E D I V − S PREDIV-S PREDIVS的内容。 f C K − S P R E = f C K − A P R E P R E D I V − S + 1 f_{CK - SPRE}=\frac {f_{CK-APRE}}{PREDIV-S + 1} fCKSPRE=PREDIVS+1fCKAPRE f C K − S P R E f_{CK - SPRE} fCKSPRE可用于更新日历或者作为16位唤醒自动重载定时器的时基单元。RTC基本结构如下
RTC基本结构
RTC初始化与配置

  • 使能PWR和BKP时钟
  • 设置PWR_CR的DBP位,使能对BKP和RTC的访问
  • 对RTC寄存器的写操作都必须在前一次写操作结束后进行

RTC外设与BKP(备份寄存器)和PWR(电源)有关,这里一起讲解。

二、Unix时间戳

Unix事件戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不用考虑闰秒。时间戳存储在一个秒计数器中,是32位/64位的整型变量,不同时区通过添加偏移来得到当地时间。由于地球自转一周时间不固定,GMT对时间的定义更标准,为消除计时一天和地球自转一周的误差,通过执行闰秒
来保证计时一天的时间与地球自转一周的时间协调一致。

  • UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统。
  • GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。

时间戳转换,C语言的time.h模块提供了时间获取和时间戳转换的相关函数。可以方便地进行秒计数器、日期时间和字符串之间的转换。
RTC时间戳转换
上面几个函数之间关系如下
RTC时间戳转换关系图
相应的实例代码如下

#include <stdio.h>
#include <time.h>
/*验证时间戳功能*/
time_t time_cnt;            //默认情况下是64位有符号秒计数器类型
struct tm time_date;        //tm结构体包含事件表示的元素,其中年份是从1900开始计算
char *time_str;             //指向一个表示时间的字符串/*time_t time(time_t *)函数获取系统时钟,不能用于离线裸机系统*/
time_t Get_timestamp()
{return time(NULL);
}
/*struct tm* gmtime(const time_t*)函数将秒计数器转换为日期时间GMT格式*/
struct tm* Get_timeGMT(time_t* timestamp)
{return gmtime(timestamp);
}
/*struct tm* localtime(const time_t*)函数将秒计数器转换为当地日期时间,自动判断时区*/
struct tm* Get_localtime(time_t* timestamp)
{return localtime(timestamp);
}
/*time_t mktime(struct tm*)函数将当地日期时间转换为秒计数器*/
time_t localtime_stamp(struct tm* localtime)
{return mktime(localtime);
}
/*char* ctime(const time_t*)函数将秒计数器转换为字符串*/
char* timetostr(time_t* timestamp)
{return ctime(timestamp);
}
int main()
{time_cnt = Get_timestamp();printf("Time_cnt = %d\n", time_cnt);time_date = *Get_timeGMT(&time_cnt);printf("\n");printf("Time: %d-%d-%d  %d:%d:%d\n", time_date.tm_year + 1900, time_date.tm_mon + 1, time_date.tm_mday, time_date.tm_hour, time_date.tm_min, time_date.tm_sec);printf("\n");time_date = *Get_localtime(&time_cnt);printf("localTime: %d-%d-%d  %d:%d:%d\n", time_date.tm_year, time_date.tm_mon, time_date.tm_mday, time_date.tm_hour, time_date.tm_min, time_date.tm_sec);printf("\n");printf("localTime_stamp: %d\n", localtime_stamp(&time_date));printf("\n");printf("%s\n", timetostr(&time_cnt));return 0;
}

三、BKP

BKP(Backup Register)备份寄存器,可用于存储用户应用程序数据。VDD断开后,由VBAT维持供电,只要有电数据就不会丢失。通过备份域复位执行复位,由篡改/入侵检测(tamper detection)事件触发,一个篡改检测事件复位所有备份寄存器(防止外部窃取数据)。STM32F4xxBKP拥有20个32位寄存器,存储80字节用户应用数据。这里给出BKP基本结构
BKP基本结构

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

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

相关文章

OKCC搭建配置什么样的服务器合适

OKCC呼叫中心系统是一种采用软硬件结合的架构方式、及分布式的IP技术&#xff0c;从多角度为企业提供整合的一体化解决方案。因此&#xff0c;搭建OKCC呼叫中心系统所使用的服务器应该满足以下几点要求&#xff1a; 稳定性&#xff1a;服务器需要具有较高的稳定性和可靠性&…

STM32之不使用MicroLIB

一、microlib介绍 microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。 microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。 二、不使用microlib的原因 由于microlib不支持C++开发,因此在使用C…

element plus el-date-picker type=“datetime“ 限制年月日 时分秒选择

如何限制el-date-picker组件的时分秒选中&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文档 文档在这里&#xff1a;DateTimePicker 日期时间选择器 | Element Plus 它提供的disabled-date给我们来限制日期选择 nice&#xff01;&…

2024年3月洗衣机大家电线上电商(京东天猫淘宝)销量排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;平台3月份的洗衣机大家电销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年3月份&#xff0c;线上电商平台洗衣机的销量累计约224万件&#xff0c;环比增长了29%&#xff0c;环比增长了约29%&#xff…

网络变压器在网络分析仪上能通过测试,装上设备后网速达不到呢?

Hqst华轩盛(石门盈盛)电子导读&#xff1a;今天和大家一起探讨网络变压器在网络分析仪上能通过测试&#xff0c;装上设备后网通设备网速达不到的可能原因及其处理方式 一、出现这种情况可能有以下原因&#xff1a; 1.1. 设备兼容性问题&#xff1a;设备其它元器件与 网络…

MATLAB绘制复杂分段函数图像

MATLAB绘制复杂分段函数图像 clc;close all;clear all;warning off;%清除变量 rand(seed, 200); randn(seed, 200) % 定义 x 范围和分辨率 x linspace(-2, 2, 1000); % 初始化 y 数组 y zeros(size(x)); % 分段定义函数 y(x < 0) x(x < 0).^2; y(x > 0 …

使用Termux在Android设备上编译运行SpecCPU2006

Spec CPU 2006 的使用说明&#xff08;曲线救国版&#xff09; 因本部分实验用到的Spec CPU2006依赖于多个编译工具包&#xff0c;因此对源码的编译要在配置好环境的Linux设备上运行&#xff0c;根据实验发现&#xff0c;现有的环境&#xff08;包括adb和termux&#xff09;都不…

FreeRTOS之动态创建任务与删除任务

1.本文是利用FreeRTOS来动态创建任务和删除任务。主要是使用FreeRTOS的两个API函数&#xff1a;xTaskCreate()和vTaskDelete()。 任务1和任务2是让LED0、LED1闪烁。任务3是当按键按下时删除任务1。 使用动态创建任务时&#xff0c;需要动态的堆中申请任务所需的内存空间&…

Flask实战

from flask import Flask appFlask(__name__)点击Flask同时点击键盘ctrl即可查看Flask的默认初始化函数 def __init__(self,import_name: str,static_url_path: str | None None,static_folder: str | os.PathLike[str] | None "static",static_host: str | None …

安装docker的PHP环境NLMP环境在国产deepin操作系统上

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

JavaScript(五)-正则表达式

文章目录 正则表达式正则表达式的介绍语法元字符修饰符 正则表达式 正则表达式的介绍 什么是正则表达式 正则表达式&#xff08;Regular expression&#xff09;是用于匹配字符串中字符组合的模式&#xff0c;在JavaScript中&#xff0c;正则表达式也是对象通常用来查找、替…

UE5数字孪生系列笔记(四)

场景的切换 创建一个按钮的用户界面UMG 创建一个Actor&#xff0c;然后将此按钮UMG添加到组件Actor中 调节几个全屏的背景 运行结果 目标点切换功能制作 设置角色到这个按钮的位置效果 按钮被点击就进行跳转 多个地点的切换与旋转 将之前的目标点切换逻辑替换成旋转的逻…

气象观测站点数据下载与处理

一、下载途径 全国400多个气象站气候数据&#xff08;1942-2022&#xff09; 王晓磊&#xff1a;中国空气质量/气象历史数据 | 北京市空气质量历史数据 气象数据免费下载网站整理 中国气象站观测的气象数据怎么下载 二、R语言处理 2.1 提取站点文件 library(dplyr) library(…

集成智能楼宇的微网系统多时间尺度MPC调度方法(附带Matlab代码)

含多智能楼宇的微网示意图如图所示&#xff0c;包括多个智能楼宇、微网可控分布式电源 、储能系统以及通信链路。其中&#xff0c;每个智能楼宇系统包括制冷设备、常规用电设备以及屋顶光伏系统。各单元功能介绍如下 针对含多智能楼宇的微网系统&#xff0c;提出一种基于模型预…

gpt能生成ppt吗

gpt能生成ppt吗 GPT是一个高度通用的工具&#xff0c;适用于多种场景和领域&#xff0c;制作ppt只是它强大功能的冰山一角&#xff0c;具体包括&#xff1a; 信息查询与解释&#xff1a; 提供科学、技术、历史、文化等领域的详细解释和背景信息。 解答疑问&#xff0c;帮助…

制作带有中文字体的 jdk 17 镜像

1. 准备中文字体 将所有需要添加的中文字体放进一个文件夹内&#xff0c;例如 fonts 2. 创建 Dockerfile 文件 Dockefile 文件与 fonts 文件夹放在同一目录下 # 使用 slim 版本的 jdk 17 镜像作为基础镜像 FROM openjdk:17-slim# 安装字体工具 RUN apt-get update &&a…

Xilinx 7系列FPGA 高性能(HP)接口与2.5V/3.3V 外设IO接口设计考虑

引言&#xff1a;Xilinx 7系列FPGA IO Bank分为HP Bank和HR Bank&#xff0c;HP IO接口电压范围为1.2V~1.8V&#xff0c;可以实现高性能&#xff0c;HR IO接口电压范围为1.2V~3.3V。当HR Bank与2.5V或者3.3V外设互联时&#xff0c;需要考虑接口电平的兼容性。根据性能需求、功能…

模拟相机拍照——对文档进行数据增强

一. 背景 假如我们有一个标准文件&#xff0c;我们对其进行文字识别、版面分析或者其他下游任务就比较容易。然而&#xff0c;当图片是手机拍照获取的&#xff0c;图片中往往有阴影、摩尔纹、弯曲。 那么&#xff0c;如何通过标准的文档&#xff0c;获得类似相机拍照的图片呢&…

家庭营销广告Criteo公司首次获得MRC零售媒体测量认证

家庭营销广告Criteo公司首次获得零售媒体测量MRC认证 商业媒体公司Criteo2024年3月28日宣布&#xff0c;它首次获得媒体评级委员会&#xff08;MRC&#xff09;的认证&#xff0c;在其企业零售媒体平台commerce Max和commerce Yield上&#xff0c;在桌面、移动网络和移动应用内…

4-Java方法详解

目录 Java方法详解 1、什么是方法 2、方法的定义及调用 3、方法重载 4、命令行传参 5、可变参数 6、递归 例题&#xff1a;代码实现一个计算机 Java方法详解 1、什么是方法 2、方法的定义及调用 形参&#xff1a;用来定义作用的 实参&#xff1a;实际调用传递给他的参数…