STM32HAL库中RTC闹钟设置时分秒,年月日

在STM32的HAL库中,RTC(实时时钟)模块提供了多种功能来管理时间和日期,包括设置闹钟。对于RTC闹钟功能,确实主要集中在时、分、秒的配置上,但年、月、日也可以通过RTC日期寄存器进行设置,并且可以与闹钟功能结合使用。

注意:

对于 STM32F103ZET6 来说,其RTC确实可以配置时间(小时、分钟、秒)和日期(年、月、日),但是它的RTC硬件并不直接支持带有特定日期的闹钟功能。这意味着你不能直接通过RTC硬件设置一个仅在某一天触发的闹钟。

RTC 日期和时间设置

首先,需要明确的是,RTC不仅能够设置当前的时间(小时、分钟、秒),还可以设置当前的日期(年、月、日)。这可以通过 HAL_RTC_SetTime()HAL_RTC_SetDate() 函数来完成。

设置时间
RTC_TimeTypeDef sTime = {0};
sTime.Hours = 14;
sTime.Minutes = 30;
sTime.Seconds = 0;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理
}
设置日期
RTC_DateTypeDef sDate = {0};
sDate.WeekDay = RTC_WEEKDAY_TUESDAY;
sDate.Month = RTC_MONTH_JULY;
sDate.Date = 15;
sDate.Year = 23; // 从2000年开始计算,这里是2023年
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理
}

RTC 闹钟设置

RTC 闹钟可以配置为仅基于时间(时、分、秒)触发,也可以配置为基于日期(年、月、日)和时间一起触发。为了实现后者,你需要利用 RTC_AlarmTypeDef 结构体中的相关字段。

配置闹钟
RTC_AlarmTypeDef sAlarm = {0};// 设置闹钟时间为每天的14:30:00
sAlarm.AlarmTime.Hours = 14;
sAlarm.AlarmTime.Minutes = 30;
sAlarm.AlarmTime.Seconds = 0;// 设置闹钟日期(可选)
// 如果你希望闹钟只在特定日期触发,可以配置以下字段:
// 注意:不是所有STM32系列都支持这些字段,具体取决于硬件。
// sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; // 使用日期而不是星期几
// sAlarm.AlarmDateWeekDay = 15; // 月份中的某一天
// sAlarm.AlarmMask = RTC_ALARMMASK_NONE; // 不屏蔽任何字段// 选择闹钟A或B,并配置其他选项
sAlarm.Alarm = RTC_ALARM_A;
sAlarm.AlarmMask = RTC_ALARMMASK_NONE; // 或者根据需要配置掩码
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = 15; // 例如7月15日if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理
}

关键点

  • 闹钟日期配置:虽然并非所有的STM32系列都支持直接配置闹钟的具体日期,但对于支持该特性的MCU,你可以通过 RTC_AlarmTypeDef 中的相关字段来指定具体的日期。如果硬件不支持,则只能依赖于应用程序逻辑来判断是否到了特定日期再触发相应的动作。

  • 闹钟掩码:使用 AlarmMask 字段可以选择哪些部分参与比较(如小时、分钟、秒等)。如果你想让闹钟在每天相同的时间触发,而不考虑日期,则可以设置掩码来忽略日期部分。

  • 中断和服务例程:当闹钟条件满足时,会触发一个中断。你需要编写相应的中断服务程序来处理这个事件,比如执行某些任务或者唤醒系统。

示例代码

以下是一个完整的示例代码片段,用于设置RTC时间和日期,并配置一个每天触发的闹钟:

#include "stm32f4xx_hal.h"RTC_HandleTypeDef hrtc;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_RTC_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_RTC_Init();// 设置时间RTC_TimeTypeDef sTime = {0};sTime.Hours = 14;sTime.Minutes = 30;sTime.Seconds = 0;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理}// 设置日期RTC_DateTypeDef sDate = {0};sDate.WeekDay = RTC_WEEKDAY_TUESDAY;sDate.Month = RTC_MONTH_JULY;sDate.Date = 15;sDate.Year = 23;if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理}// 设置闹钟RTC_AlarmTypeDef sAlarm = {0};sAlarm.AlarmTime.Hours = 14;sAlarm.AlarmTime.Minutes = 30;sAlarm.AlarmTime.Seconds = 0;sAlarm.Alarm = RTC_ALARM_A;sAlarm.AlarmMask = RTC_ALARMMASK_NONE;sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;sAlarm.AlarmDateWeekDay = 15; // 例如7月15日if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK) {// 错误处理}while (1) {// 主循环}
}void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) {// 处理闹钟事件
}

请注意,上述代码假设你已经在CubeMX或其他工具中正确初始化了RTC外设。如果你的MCU型号不支持特定日期的闹钟配置,那么你需要通过软件逻辑来实现这一功能,比如每天检查当前日期并在特定日期触发特定行为。

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

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

相关文章

MySQL 8.0:explain analyze 分析 SQL 执行过程

介绍 MySQL 8.0.16 引入一个实验特性:explain formattree ,树状的输出执行过程,以及预估成本和预估返 回行数。在 MySQL 8.0.18 又引入了 EXPLAIN ANALYZE,在 formattree 基础上,使用时,会执行 SQL &#…

观察者模式(sigslot in C++)

大家,我是东风,今天抽点时间整理一下我很久前关注的一个不错的库,可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计,sigslot 官网: http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

【已解决】黑马点评项目Redis版本替换过程中误删数据库后前端显示出现的问题

为了实现基于Redis的Stream结构作为消息队列,实现异步秒杀下单的功能,换Redis版本 Redis版本太旧了,所以从3.2.1换成了5.0.14 此时犯了一个大忌,因为新的Redis打开后,没有缓存,不知道出了什么问题&#xf…

基于Spring Boot的九州美食城商户一体化系统

一、系统背景与目标 随着美食城行业的快速发展,传统的管理方式已经难以满足日益增长的管理需求和用户体验要求。因此,九州美食城商户一体化系统应运而生,旨在通过信息化、智能化的管理方式,实现美食城的商户管理、菜品管理、订单…

springboot vue 会员营销系统

springboot vue 会员营销系统介绍 演示地址: 开源版本:http://8.146.211.120:8083/ 完整版本:http://8.146.211.120:8086/ 移动端 http://8.146.211.120:8087/ 简介 欢迎使用springboot vue会员营销系统。本项目包含会员储值卡、套餐卡、计…

HarmonyOS NEXT 技术实践-基于意图框架服务实现智能分发

在智能设备的交互中,如何准确理解并及时响应用户需求,成为提升用户体验的关键。HarmonyOS Next 的意图框架服务(Intents Kit)为这一目标提供了强大的技术支持。本文将通过一个项目实现的示例,展示如何使用意图框架服务…

sfnt-pingpong -测试网络性能和延迟的工具

sfnt-pingpong 是一个用于测试网络性能和延迟的工具,通常用于测量不同网络环境下的数据包传输性能、吞吐量、延迟等指标。 它通常是基于某种网络协议(如 TCP)执行“ping-pong”式的测试,即客户端和服务器之间相互发送数据包&…

前端下载文件的几种方式使用Blob下载文件

前端下载文件的几种方式 使用Blob下载文件 在前端下载文件是个很通用的需求,一般后端会提供下载的方式有两种: 1.直接返回文件的网络地址(一般用在静态文件上,比如图片以及各种音视频资源等) 2.返回文件流(…

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。 2. Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…

知乎 PB 级别 TiDB 数据库集群管控实践

以下文章来源于知乎技术专栏 ,作者代晓磊 导读 在现代企业中,数据库的运维管理至关重要,特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库,TiDB 在高可用、高扩展性和强一致性方…

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 (1)SpringBootConfiguration: (2)EnableAutoConfiguration: (3&#xf…

C++中的字符串实现

短字符串优化(SSO) 实现1 实现2 写时复制 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<cstring> using std::cout; using std::endl;// 引用计数存放的位置 // 1. 存放在栈上 --- 不行 // 2. 存…

Linux 基本使用和程序部署

1. Linux 环境搭建 1.1 环境搭建方式 主要有 4 种&#xff1a; 直接安装在物理机上。但是Linux桌面使用起来非常不友好&#xff0c;所以不建议。[不推荐]。使用虚拟机软件&#xff0c;将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug&#xff…

环网冗余CAN转光纤 CAN光端机在风电项目应用

在风力发电项目中&#xff0c;所有的风机内部的状态都需要能够在中控室备被监控到&#xff0c;不论是风机的工作状态还是风机内部的消防状态&#xff0c;以便中控室的工作人员都够根据观测到的信息及时的做出反应&#xff0c;避免造成重大损失。 通常风机的工作信息通过将网口…

ubuntu 如何重装你的apt【apt-get报错: symbol lookup error/undefined symbol】

副标题:解决error:apt-get: symbol lookup error: /lib/x86_64-linux-gnu/libapt-private.so.0.0: undefined symbol: _ZNK13pkgTagSection7FindULLENS_3KeyERKy, version APTPKG_6.0 文章目录 问题描述报错分析解决方案:重装你的apt1、查看你的ubuntu版本2、下载适配你的ap…

网络管理 详细讲解

讲一下之前获取CPU的&#xff0c;其余的原理和这个一样 python代码 app.route(/cpu/) def cpu_used():cpuoidObjectType(ObjectIdentity(myOIDs[cpu_loads]))ret getTableRows((cpuoid,))cpuload0for i in ret:cpuload i[0]print(cpuload)return {cpu:cpuload} var dom do…

用Python PySide6 复刻了两软件UI 做下练习

图样 1 代码 1&#xff1a; # -*- coding: utf-8 -*-import sys from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, QDate) from PySide6.QtGui import QIcon, QPixmap, QColor from PySide6.QtWidgets import (QApplication, QDialog, QLineEdit, QPushBut…

【day14】异常处理与Object类深入解析

【day13】回顾 在深入探讨异常处理与Object类之前&#xff0c;让我们回顾一下【day13】中的关键内容&#xff1a; 权限修饰符&#xff1a; public&#xff1a;最广的访问范围&#xff0c;任何地方都可以访问。protected&#xff1a;在同包和子类中可以访问。默认&#xff08;无…

题解 洛谷 Luogu P1135 奇怪的电梯 广度优先搜索 BFS C/C++

题目传送门&#xff1a; P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1135思路&#xff1a; 一道比较裸的 BFS&#xff0c;就是把走迷宫每次搜周围相邻四格&#xff0c;改成了楼层每次搜上下方向的某层而已 感觉这个题难度只有普及- …

苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…