STM32单片机入门学习——第41节: [12-1] Unix时间戳

news2025/5/15 5:38:24

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.18

STM32开发板学习——第41节: [12-1] Unix时间戳

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、Unix时间戳
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册
在这里插入图片描述

解答和科普

一、Unix时间戳

在这里插入图片描述

实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问: ● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟 ● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
VBAT接3.3V电源,在BKP备份寄存器写入两个数据,然后再把它们读出来,显示一下,BKP备份寄存器和上一节学的Flash存储器类似,而BKP的数据,是需要VBAT引脚接上备用电池来维持的,只要VBAT有电池供电,即使STM32主电源断电,BKP的值也可以维持原状。现在STM32断电,但是VBAT有电,可以维持BKP的数据,再次上电后,在没有写数据的情况下,直接读出BKP,它的数据和断电之前是一样的,这说明BKP的数据在主电源断电后,得到了保持,并且按下复位键,可以按下复位键,BKP的数据也不会复位,那如果把VBAT的电池断电,再次拔掉主电源,重新上电,BKP的数据就清零了,因为BKP本质上,不能完全掉电不丢失,它的数据,需要VBAT引脚提供备用电源来维持,这就是BKP备份寄存器的特性。如果你的STM32接了备用电池,那BKP可以完成一些主电源掉电时,保存少量数据的任务,这就是第一个代码的现象。其实备份寄存器和VBAT引脚的存在,更多的是为了服务RTC的。
第二个代码,实时时钟。第一行是日期,目前给的一个测试时间,2023年1月2日,第二行是时间,目前是0时0分这些秒,第三行是时间戳的秒计数器,目前是16亿多。第四行时RTC预分频器的计数值。首先是复位,复位之后时间会继续运行,然后,实时时钟,在系统主电源断电后,他还要继续运行。关机后,里面时钟还必须要继续走,所以只要在VBAT接上了备用电源,在断开系统主电源,然后插上,可以看到时间数据不会丢失,并且,在主电源断开的时间里,RTC会继续走,不会因为主电源断电而暂停,这就是RTC实时时钟的程序现象。可以发现,RTC这个复位和主电源掉电后,数据不丢失,就是借用BKP来实现的,所以RTC和BKP关联程度是比较高的,这就是实时时钟的程序现象。
BUG,给主电源断电后,VBAT的电源还会给微弱地整个系统供电,这导致我主电源拔掉后,电源指示灯和OLED屏幕还会微弱地亮着,这是一个问题。还有的芯片,在进行RTC实验时,会出现RTC晶振不起振的情况,这会导致程序卡死在等待晶振起振的地方,这个问题我还没有找到完美的解决方法,但是在学习过程中,也是可以有一些替代方法可以使用的。
Uinx时间戳:定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒。
这款STM32,它的时间戳是32位的数据类型,这个时间戳,在STM32程序中定义的其实是无符号的32位,无符号32最大数值是2^32-1.
世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间.所有时区共用一个时间戳的秒计数器,也就是在伦敦秒计数器是0,在北京也是0,然后根据不同时区,再加上时间偏移,就能确定了。
在这里插入图片描述
当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致,计时标准不变,地球越转越慢,相差超过0.9秒时,我的计时系统就多走一秒,来等一下地球的自转,会出现7时59分60秒。闰秒机制的设计,也会造成一些程序BUG,1分钟会有61秒的情况。

在这里插入图片描述

在这里插入图片描述
秒计数器和日期时间,如何进行相互转换,这时候需要用到time.h模块。
C语言的time.h模块,提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换,使用还是非常方便的。

在这里插入图片描述

秒计数器类型名,叫作time_t,其实是一个typedef重命名的类型,实际上就是int64类型,是一个64位有符号的整形数据。
在这里插入图片描述
下一个时间类型是日期时间数据类型strruct tm
在这里插入图片描述
年代是1900年。
在STM32中,使用的是typedef struct 新名字,这样的形式定义的。这里没有使用typedef,而是在花括号前给结构体起来一个名字,叫tm,这样在使用的时候,数据类型名,就是两个词struct tm,然后跟着的是变量名,这样的方式也是可以的。和我们STM32库函数里的方式是一样的效果。
接着最后一个,是字符串数据类型,类型名是char *,就是char型数据的指针,用来表示指向一个表示时间的字符串。

在这里插入图片描述
time()是用来获取当前时间的,这个函数,在电脑里,可以直接读取电脑的时间,但是在STM32是用不了的,因为STM是一个离线的裸机系统,它也不知道是什么时间,
在这里插入图片描述
在这里插入图片描述
有了秒计数器后,接着把它转换为日期时间的格式,第二个,gmtime,将秒计数器的值,转换为格林尼治,也就是伦敦时间,参数是const time_t ,秒计数器指针类型,是输入参数,返回值struct tm 是日期时间结构体指针类型,在这个图里,它的作用就是这里,秒计数器转换为日期时间。
time_data = gmtime(time_cnt);这样,就是指针跨级赋值;等号右边是地址,等号左边却是一个变量,这是不行的,有两个,一个是在右边,函数的返回值,加上*,取内容,
time_data= gmtime(time_cnt);
这样的好左右就都是变量了,结构体变量之间互相赋值,没问题,或者右边不加
,定义的变量,我们定义为指针类型,这样等号左右都是指针,结构体指针之间互相赋值,也没问题,这两种方法都可以。
年时:是从1900年经过的年数,月是从月经过的月数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

问题

总结

本节课主要是学习了Unix时间戳,和如何用函数实现时间戳到现在时间的转换,相互的,转换与被转换。

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

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

相关文章

无人机自主导航与路径规划技术要点!

一、自主导航与路径规划技术要点 1. 传感器融合 GPS/北斗定位:提供全局定位,但在室内或遮挡环境下易失效。 惯性测量单元(IMU)**:通过加速度计和陀螺仪实时追踪姿态,弥补GPS信号丢失时的定位空缺。 …

AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!

在AI绘画StableDiffusion中,一直都有一个比较困难的问题,就是如何保证每次出图都是同一个人。今天就这个问题分享一些个人实践,大家和我一起来看看吧。 一. 有哪些实现方式 方式1:固定Seed种子值。 固定Seed种子值出来的图片人…

RK3588S开发板将SPI1接口改成GPIO

参考官方教程:ROC-RK3588S-PC 一.基本知识: 1.GPIO引脚计算: ROC-RK3588S-PC 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:GPIO…

PLOS ONE:VR 游戏扫描揭示了 ADHD 儿童独特的大脑活动

在孩子的成长过程中,总有那么一些“与众不同”的孩子。他们似乎总是坐不住,课堂上小动作不断,注意力难以集中,作业总是拖拖拉拉……这些行为常常被家长和老师简单地归结为“淘气”“不听话”。然而,他们可能并不只是“…

DemoGen:用于数据高效视觉运动策略学习的合成演示生成

25年2月来自清华、上海姚期智研究院和上海AI实验室的论文“DemoGen: Synthetic Demonstration Generation for Data-Efficient Visuomotor Policy Learning”。 视觉运动策略在机器人操控中展现出巨大潜力,但通常需要大量人工采集的数据才能有效执行。驱动高数据需…

@JsonView + 单一 DTO:如何实现多场景 JSON 字段动态渲染

JsonView 单一 DTO:如何实现多场景 JSON 字段动态渲染 JsonView 单一 DTO:如何实现多场景 JSON 字段动态渲染1、JsonView 注解产生的背景2、为了满足不同场景下返回对应的属性的做法有哪些?2.1 最快速的实现则是针对不同场景新建不同的 DTO…

15 nginx 中默认的 proxy_buffering 导致基于 http 的流式响应存在 buffer, 以 4kb 一批次返回

前言 这也是最近碰到的一个问题 直连 流式 http 服务, 发现 流式响应正常, 0.1 秒接收到一个响应 但是 经过 nginx 代理一层之后, 就发现了 类似于缓冲的效果, 1秒接收到 10个响应 最终 调试 发现是 nginx 的 proxy_buffering 配置引起的 然后 更新 proxy_buffering 为…

安卓手机万能遥控器APP推荐

软件介绍 安卓手机也能当“家电总控台”?这款小米旗下的万能遥控器APP,直接把遥控器做成“傻瓜式操作”——不用配对,不连蓝牙,点开就能操控电视、空调、机顶盒,甚至其他品牌的电器!雷总这波操作直接封神&…

PH热榜 | 2025-04-18

1. Wiza Monitor 标语:跟踪工作变动,接收Slack和电子邮件的提醒。 介绍:Wiza Monitor是一款用于追踪职位变动的工具,可以实时跟踪客户和潜在客户的工作变动,还可以通过电子邮件和Slack发送提醒,让你的客户…

Android平台 Hal AIDL 系列文章目录

目录 1. Android Hal AIDL 简介2. AIDL 语言简介3. Android 接口定义语言 (AIDL)4. 定义AIDL 接口5. AIDL 中如何传递 Parcelable 对象6. 如何使用AIDL 定义的远程接口进行跨进程通信7. 适用于 HAL 的 AIDL8. Android Hal AIDL 编译调试9. 高版本Android (AIDL HAL) 沿用HIDL方…

十、数据库day02--SQL语句01

文章目录 一、新建查询1.查询窗口的开启方法2. 单语句运行方法 二、数据库操作1.创建数据库2. 使用数据库3. 修改数据库4. 删除数据库和查看所有数据库5. 重点:数据库备份5.1 应用场景5.2 利用工具备份备份操作还原操作 5.3 扩展:使用命令备份 三、数据表…

实时直播弹幕系统设计

整个服务读多写少,读写比例大概几百比1. 如果实时性要求高的话,可以采用长连接模式(轮询的话,时效性不好,同时对于评论少的直播间可能空转) websocket 和 SSE架构 只要求服务端推送的话,可以…

[Java · 初窥门径] Java 语言初识

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java 学习手册 0x01:Java 编程语言简介 Java 是一种高级计算机编程语言,它是由 Sun Microsystems 公司(已被 Oracle 公司收购)于 1995 年 5 …

【SQL Server】数据探查工具1.0研发可行性方案

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 想抢先解锁数据自由的宝子,速速戳我!评论区蹲一波 “蹲蹲”,揪人唠唠你的超实用需求! 【SQL Server】数据探查工具1.0研发可行性方案…

谓词——C++

1.一元谓词 1.定义 2.案例 查找容器有没有大于五的数字 #include<stdio.h> using namespace std; #include<string> #include<vector> #include<set> #include <iostream> class myfind { public:bool operator()(int a){return a > 5;} …

『前端样式分享』联系我们卡片式布局 自适应屏幕 hover动效 在wikijs中使用 (代码拿来即用)

目录 预览效果分析要点响应式网格布局卡片样式&#xff1a;阴影和过渡效果 代码优化希望 长短不一的邮箱地址在左右居中的同时,做到左侧文字对齐(wikijs可用)总结 欢迎关注 『前端布局样式』 专栏&#xff0c;持续更新中 欢迎关注 『前端布局样式』 专栏&#xff0c;持续更新中…

MySQL 缓存机制全解析:从磁盘 I/O 到性能优化

MySQL 缓存机制全解析&#xff1a;从磁盘 I/O 到性能优化 MySQL 的缓存机制是提升数据库性能的关键部分&#xff0c;它通过多级缓存减少磁盘 I/O 和计算开销&#xff0c;从而提高查询和写入的效率。 1. 为什么需要缓存&#xff1f; 数据库的性能瓶颈通常集中在磁盘 I/O 上。…

1.1 设置电脑开机自动用户登录exe开机自动启动

本文介绍两个事情&#xff1a; 1.Windows如何开机自动登录系统&#xff08;不用输密码) 2. 应用程序(.exe)如何开机自动启动 详细解释如下&#xff1a; 一、Windows如何开机自动登录系统&#xff08;不用输密码) 设备上的工控机&#xff0c;如果开机后都需要操作人员输入密码&…

基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)

大家好&#xff0c;我是徐师兄&#xff0c;一个有着7年大厂经验的程序员&#xff0c;也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 &#x1f345;文末获取源码联系&#x1f345; 2025年最全的计算机软件毕业设计…

OpenAI重返巅峰:o3与o4-mini引领AI推理新时代

引言 2025年4月16日&#xff0c;OpenAI发布了全新的o系列推理模型&#xff1a;o3和o4-mini&#xff0c;这两款模型被官方称为“迎今为止最智能、最强大的大语言模型&#xff08;LLM&#xff09;”。它们不仅在AI推理能力上实现了质的飞跃&#xff0c;更首次具备了全面的工具使…