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

实时时钟(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.hqwc.cn/news/443509.html

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

相关文章

43 漏洞发现-WEB应用之漏洞探针类型利用修复

目录 已知CMS开发框架末知CMS演示案例:开发框架类源码渗透测试报告-资讯-thinkphp开发框架类源码渗透测试-咨讯-spring已知CMS非框架类渗透测试报告-工具脚本-wordpress已知CMS非框架类渗透测试报告-代码审计-qqyewu_php未知CMS非框架类渗透测试报告-人工-你我都爱的wg哦~ 已知…

MySQL 核心模块揭秘 | 05 期 | 读事务和只读事务的变形记

事务都以读事务身份启动,读事务和只读事务会在需要时发生变化,它们会怎么变化?这是本文要回答的问题。 作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码…

【MATLAB源码-第130期】基于matlab的BPSK-ZF迫零均衡,对比均衡前后的误码率曲线以及理论曲线。

操作环境: MATLAB 2022a 1、算法描述 信道均衡是通信系统中的一项关键技术,其主要目的是减少或消除由于信道特性导致的信号失真。在数字通信中,尤其是在无线通信系统中,由于多径传播等原因,接收到的信号会受到严重的…

0131-2-关于事件捕获和冒泡

关于事件捕获和冒泡 DOM事件流分为三个阶段:捕获阶段、目标阶段、冒泡阶段 点击目标元素后,不会马上触发目标元素,而是先执行事件捕获,从顶部逐步到目标元素;处于目标阶段的时候触发目标元素;最后冒泡阶段…

java代码中调用自定义函数

定义函数 CREATE DEFINERrootlocalhost FUNCTION test_fun1(num1 FLOAT,num2 FLOAT) RETURNS float BEGINDECLARE SUM FLOAT DEFAULT 0;SET SUMnum1num2;RETURN SUM; END <select id"cunchu" resultType"java.util.Map">SELECT test_fun1(1,2) as r…

v-if及v-for、computed计算属性的使用

v-if 概念及使用 v-if是Vue.js中的一个指令&#xff0c;用于根据表达式的真假值条件性地渲染一块内容。如果表达式的值返回真&#xff0c;则Vue会渲染这块内容&#xff1b;如果返回假&#xff0c;则不渲染。 基本用法: <p v-if"isVisible">看到我了吗&#…

armbian ubuntu 小盒子安装nodejs npm vue3 环境

1.直接通过apt-get install nodejs 的版本太低了 我的是v12 我试了下 npm create vuelatest这种方式不行 所以就卸载了自动安装的nodejs apt remove nodejs 去淘宝的ftp上下载对应的版本 CNPM Binaries Mirror 我的小盒子是linux arm64版本 wget 之后解压 然后创建符号…

【C++】笔试训练(八)

目录 一、选择题二、编程题1、两种排序方法2、求最小公倍数 一、选择题 1、关于重载函数&#xff0c;哪个说明是正确的&#xff08;&#xff09; A 函数名相同&#xff0c;参数类型或个数不同 B 函数名相同&#xff0c;返回值类型不同 C 函数名相同&#xff0c;函数内部实现不…

LeetCode —— 17. 电话号码的字母组合

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

配置vite自动按需引入 vant 组件

为什么学 按需加载可以减少包体积,优化加载性能 学习内容 全局注册组件 import 需要的组件import 组件样式使用 app.use 注册组件 Tree Shaking 介绍使用 什么是 tree shaking&#xff1f; Tree shaking是一种优化技术&#xff0c;用于减少JavaScript或其他编程语言中未被使用…

EAS之WALT算法介绍

EAS调度器缘起 Linux内核的一直都使用完全公平调度器CFS(Completely Fair Scheduler)作为默认调度器&#xff0c;但是在使用中发现CFS如下几个问题。 1. CFS主要是为了服务器性能优先场景而设计的&#xff0c;主要目标是最大限度地提高系统的吞吐量&#xff0c;CFS调度的目标…

IDEA快捷键大全

提示&#xff1a; ① 主要记录我在使用 IDEA 开发的过程中用到的快捷键&#xff0c;可以提高开发速度。 ② 不一定要全部记住&#xff0c;主要是当一个参考文档&#xff0c;大家有一点印象&#xff0c;随时可以查看。 参考博客 > IntelliJ IDEA 快捷键说明大全&#xff08;官…