STM32实时时钟(RTC)的配置和使用方法详解

news2024/11/17 0:46:21

实时时钟(RTC)是STM32系列微控制器上的一个重要模块,用于提供准确的时间和日期信息。在本文中,我们将详细介绍STM32实时时钟的配置和使用方法。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

1. RTC 的硬件连接:
   在开始使用STM32的RTC模块之前,需要连接外部低速晶体振荡器(32.768kHz)到相应的RTC引脚。具体的引脚连接可查看芯片的数据手册。接下来,您需要使用电源管理模块对RTC进行供电。

2. RTC 的初始化配置:
   首先,在启用RTC之前,需要使能并配置RTC外设时钟,将其连接到低速外部晶体振荡器。以下是一个RTC初始化函数示例:

```c
#include "stm32xxxx.h"

void RTC_Init() {
  RTC_HandleTypeDef rtc;

  // 配置RTC外设时钟
  __HAL_RCC_RTC_ENABLE();
  
  // 设置RTC分频器为32767,以获得1s的时钟周期
  HAL_RTCEx_SetAsynchPrescaler(&rtc, 0x7FFF);
  
  // 初始化RTC外设
  rtc.Instance = RTC;
  rtc.Init.HourFormat = RTC_HOURFORMAT_24;  // 小时表示为24小时制
  rtc.Init.AsynchPrediv = 0x7FFF;  // 12799+1,异步分频器的低16位值
  rtc.Init.SynchPrediv = 0xFF;  // 255+1,同步分频器的低8位值

  HAL_RTC_Init(&rtc);
}
```

3. RTC 的时间和日期设置:
   一旦RTC初始化完成,我们可以使用HAL_RTC_SetTime()和HAL_RTC_SetDate()函数设置RTC的当前时间和日期。以下是一个设置时间和日期的示例:

```c
RTC_TimeTypeDef rtcTime;
RTC_DateTypeDef rtcDate;
  
// 设置时间
rtcTime.Hours = 10;
rtcTime.Minutes = 30;
rtcTime.Seconds = 0;
rtcTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
rtcTime.StoreOperation = RTC_STOREOPERATION_RESET;
  
HAL_RTC_SetTime(&hrtc, &rtcTime, RTC_FORMAT_BIN);
  
// 设置日期
rtcDate.WeekDay = RTC_WEEKDAY_MONDAY;
rtcDate.Month = RTC_MONTH_JANUARY;
rtcDate.Date = 1;
rtcDate.Year = 21;
  
HAL_RTC_SetDate(&hrtc, &rtcDate, RTC_FORMAT_BIN);
```

4. RTC 的时间和日期读取:
   使用HAL_RTC_GetTime()和HAL_RTC_GetDate()函数,我们可以读取RTC的当前时间和日期。以下是一个读取时间和日期的示例:

```c
RTC_TimeTypeDef rtcTime;
RTC_DateTypeDef rtcDate;
  
HAL_RTC_GetTime(&hrtc, &rtcTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &rtcDate, RTC_FORMAT_BIN);
  
// 在rtcTime和rtcDate结构中包含了当前的时间和日期
```

5. RTC 中断的配置和使用:
   RTC可以配置中断以获取特定事件的通知,例如新的秒脉冲或闹钟触发。以下是一个RTC闹钟中断的配置示例:

```c
RTC_AlarmTypeDef rtcAlarm;
  
// 配置闹钟时间
rtcAlarm.AlarmTime.Hours = 12;
rtcAlarm.AlarmTime.Minutes = 0;
rtcAlarm.AlarmTime.Seconds = 0;
rtcAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
rtcAlarm.AlarmMask = RTC_ALARMMASK_NONE;
rtcAlarm.Alarm = RTC_ALARM_A;
rtcAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_NONE;
rtcAlarm.AlarmSubSecondValue = 0x0;
  
// 使能并配置闹钟中断
HAL_RTC_SetAlarm_IT(&hrtc, &rtcAlarm, RTC_FORMAT_BIN);
```

必要时,还需实现RTC中断处理函数,并将其与RTC的中断向量关联。

```c
void RTC_Alarm_IRQHandler() {
  HAL_RTC_AlarmIRQHandler(&hrtc);
  
  // 处理RTC闹钟中断
}
```

6. RTC 的唤醒和日历功能:
   RTC模块还提供了唤醒功能,允许将处理器从低功耗模式唤醒,并提供日历功能,通过固定日期和时间配置的闹钟来唤醒处理器。
您可以使用HAL_RTCEx_SetWakeUpTimer()函数配置唤醒,使用RTC闹钟配置设定的时间和日期。

这里仅涵盖了STM32实时时钟的基本配置和使用方法。您还可以使用其他RTC功能,如定期调校(RTC损耗校准),具体可参考STM32库和RTC驱动的相关文档。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

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

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

相关文章

如何恢复已删除的照片?

在这篇综合文章中发现恢复丢失照片的有效且免费的方法。无论您使用的是智能手机、iPhone、Windows 计算机、Mac、SD 卡还是数码相机,我们都提供有关如何恢复已删除照片的分步说明。此外,学习一些有价值的技巧,以防止将来意外删除照片。 意外…

scienceplots绘图浅尝

前言 科研写作中,黑压压的文字里面如果能有一些优美的图片无疑会给论文增色不少,绘图的工具有很多,常用的有Excel、Python、Matlab等,Matlab在绘图方面相较于Python有一种更加原生的科研风,而且可视化编辑图例、坐标轴…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不…

三分钟教你入门规则引擎Drools

Drools是一款基于Java语言的开源的规则引擎,可以将复杂且多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件或者特定的存储介质中(eg:数据库表),使得业务规则的变更不需要修正项目代码,重启服务器就可以在线上环境立即生效…

正则表达式 与文本三剑客(sed grep awk)

一,正则表达式 (一)正则表达式相关定义 1,正则表达式含义 REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意…

【学网攻】 第(17)节 -- 命名ACL访问控制列表

系列文章目录 目录 前言 一、ACL(访问控制列表)是什么? 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第…

Packet tracer-实现VLAN内部通信

案例一: 要求PC1和PC2,PC3和PC4之间能够实现互访 两个VLAN,一个VLAN对应一个子网 以S2为例: 步骤 1:在 S2 上创建并命令 VLAN,把VLAN划分给活动的端口。 步骤 2:在 S3 上创建并命令 VLAN&…

LeetCode Hot100 回顾(二)

子串 560.和为K的子数组 使用前缀和预处理一下题目给的数组, 然后用二重循环遍历一遍就可以了。 239.滑动窗口最大值 看题面比较容易想到的是用优先级队列来解决, 但是STL中的priority_queue不支持随机删除, 如果要用优先级队列来解决这道题的话比较复杂。这道题的一种正确…

QT + opengl 环境搭建(glfw, glad),创建一个简单窗口

一.下载glfw,glad并编译 1.glfw个人理解就是对底层opengl的一些基本接口的封装,提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。glfw的下载地址:Download | GLFW,下载完成后…

SpringBoot 结合 liteflow 规则引擎使用

1、前言 在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。 在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以…

15EG使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台,使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址,下面那个选项为是否…

Web开发7:Git版本控制

在开发中,版本控制是一个不可或缺的工具。它能够帮助开发者跟踪和管理代码的变化,协同工作,并且有效地处理代码的冲突。其中,Git是最流行和广泛使用的版本控制系统之一。在本篇文章中,我们将深入探讨Git版本控制的基础…

2024年,AI 掀起数据与分析市场的新风暴

2024 年伊始,Kyligence 联合创始人兼 CEO 韩卿在其公司内部的飞书订阅号发表了多篇 Rethink Data & Analytics 的内部信,分享了对数据与分析行业的一些战略思考,尤其是 AI 带来的各种变化和革命,是如何深刻地影响这个行业乃至…

基于SSM的高校班级同学录网站设计与实现(有报告)。Javaee项目,ssm项目。

演示视频: 基于SSM的高校班级同学录网站设计与实现(有报告)。Javaee项目,ssm项目。 项目介绍: Javaee项目,采用M(model)V(view)C(controller&…

leetcode 28.找出字符串中第一个匹配项的下标(python版)

需求 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。 如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack…

网工内推 | 网络安全工程师专场,大平台,六险一金

01 汽车之家 招聘岗位:高级网络安全工程师 职责描述: 1、负责公司网站、系统与产品的漏洞扫描、渗透测试与安全评估工作; 2、负责公司安全系统与安全设备的运维,负责公司网络安全监控管理; 3、负责公司安全事件的应急…

FileZilla 的安装与使用

目录 一. FileZilla 是什么二. FileZilla 的安装1. 下载 FileZilla2. 安装 三. FileZilla 的使用 一. FileZilla 是什么 FileZilla 是一个免费的开源 FTP(文件传输协议)客户端软件,用于在计算机之间传输文件。它提供了一个直观的用户界面&am…

sql注入,布尔盲注和时间盲注,无回显

布尔盲注 通过order by分组可以看到,如果正确会i显示you are in,错误则无任何提示,由此可以判断出,目前只显示对错,此外前端不会显示任何数据 也就是说,目前结果只有两种,在这种只有两种变量的…

Unity 自动轮播、滑动轮播

如图所示,可设置轮播间隔,可左右滑动进行轮播 1.在UGUI创建个Image,添加自动水平组件 2.添加并配置脚本 3.代码如下,都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …

鸿蒙不再兼容安卓,那么鸿蒙开发者是否会大增?

华为的纯血版鸿蒙已出现。紧接着各大厂商都纷纷加入原生应用开发当中,其中包括支付宝、京东、美团等一线大厂,200 多应用厂商正在加速开发鸿蒙原生应用。鸿蒙生态设备数量仅历时 5 个月即从 7 亿增长至 8 亿。 而鸿蒙的开发不止应用层,它是以…