STM32CubeMX学习笔记11 ---RTC实时时钟

1、RTC实时时钟简介

STM32的实时时钟RTC是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后背区域,即在系统复位或从待机模式唤醒后RTC的设置和事件维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外操作。所以在要设置时间之前,要先取消备份区域写保护。RTC的简化框图如下所示:

RTC由两个主要部分组成:第一部分(APB1接口)用来和APB1总线相连,此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作;另一部分(RTC核心)由一组可编程计数器组成,分为两个主要模块,第一个模块是RTC的预分频模块,可编程产生1秒的RTC时间基准TR_CLK。第二个模块是一个32位的可编程计数器(RTC_CNT),可被初始化为当前的系统时间,一个32位的时钟计数器按秒钟计算可以记录4294967296秒,约136年左右,一般应用已经足够 RTC还有一个闹钟寄存器RTC_ALR,用于产生闹钟。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CNT = RTC_ALR将产出一个闹钟中断,从而实现闹钟功能

2、硬件设计

本实验通过RTC的秒中断来持续输出时间通过串口1打印出来,并通过设置闹钟中断实现一个闹钟提醒,D1指示灯提示系统正常运行

  • D1指示灯
  • USART1串口
  • RTC

3、 STM32CubeMX设置

  • PE5设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平
  • USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位
  • RCC设置中开启外部高速晶振(HSE)以及外部低速晶振(LSE),时钟树中将RTC的频率设置为32.768KHz

  • 激活时钟源,激活日历,RTC Out选择Disable开启闹钟中断,设置初始日期和时间,数据格式选择BCD。(BCD码即每4位二进制转十进制,如BCD码“0x13”,转十进制为“13” )

  • 使能RTC全局中断和闹钟中断

  • 时钟树种将RTC的时钟源选择外部低速晶振,如果没有外部晶振,2这里选择内部时钟源。

  • 输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码

4、程序编程

  • 在main.c文件中编写秒中断处理回调函数和闹钟中断处理函数,并在main函数中启动中断。
/* USER CODE BEGIN 0 */RTC_DateTypeDef GetDate;RTC_TimeTypeDef GetTime;RTC_AlarmTypeDef sAlarm;//RTC 秒中断回调函数
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc){HAL_RTC_GetTime(hrtc,&GetTime,RTC_FORMAT_BIN);HAL_RTC_GetDate(hrtc,&GetDate,RTC_FORMAT_BIN);printf1("Date:%02d-%02d-%02d\r\n",2000+GetDate.Year,GetDate.Month,GetDate.Date);printf1("Time:%02d:%02d:%02d\r\n",GetTime.Hours,GetTime.Minutes,GetTime.Seconds);printf1("\r\n"); 
}//RTC闹钟中断回调函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){printf1("Alarm Active...!!!\n");RTC_TimeTypeDef settime;settime.Hours=0x23;settime.Minutes=0x59;settime.Seconds=0x55;HAL_RTC_SetTime(hrtc,&settime,RTC_FORMAT_BCD);//重新设置时间为23:59:55,数据类型为BCD码RTC_DateTypeDef setday;setday.Year=25;setday.Month=9;setday.Date=30;HAL_RTC_SetDate(hrtc,&setday,RTC_FORMAT_BIN);//设置年月日为:25年9月30日,数据类型为二进制
}/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{
///*****省略*****////* USER CODE BEGIN 2 */printf1("RTC时钟测试\r\n");__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC); //开启秒中断//设置闹钟为AM 9:30:20sAlarm.Alarm = RTC_ALARM_A;sAlarm.AlarmTime.Hours = 9;sAlarm.AlarmTime.Minutes = 30;sAlarm.AlarmTime.Seconds = 10;HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,RTC_FORMAT_BIN);  //设置闹钟并使能闹钟中断/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */*/while (1){HAL_Delay(500);HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

5、下载验证

可以看到每秒输出时间信息,当达到9:30:10时触发闹钟中断,输出闹钟信息,并将时间设置为25年9月30日24:59:55秒。

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

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

相关文章

android开发教程百度网盘,成功入职网易月薪35K

前情 首先介绍一下自己的情况吧,由于当年高中年少轻狂,不努力,差二本线16分。我自己也没有意识到学历的区别,最终听了家里的安排上了一个专科,电气专业。 现在想想都很后悔,当年为什么没有自己的主见&…

Golang各版本的GC详解

go v1.3的标记清除法 清除的第一步:stw将可达对象标记删除未被标记对象 go v1.5三色标记法 从根节点出发,将下一个节点遍历为灰色,放入灰色集合中遍历灰色节点集合,把灰色能到达的节点标记为灰色,把自身标记为黑色&a…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。C99中,结构中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员。 欢迎关注个人主页:逸狼 创造不易&#xf…

C if...else 语句

一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。 语法 C 语言中 if…else 语句的语法: if(boolean_expression) {/* 如果布尔表达式为真将执行的语句 */ } else {/* 如果布尔表达式为假将执行的语句 */ }如果布尔表…

记录第一次使用QT

今晚和舍友准备搞一个QT网盘的项目,我之前也没有用过QT。在舍友的指导下,我安装了QT creator,然后完成了第一次的QT的编译运行,记录一下这激动的感觉(2024-03-07)。 使用qmake进行的编译。qDebug进行输出调试hello qt…

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…

经典算法----折半查找

二、经典算法之折半查找 很多同学对于二分法就是&#xff1a;一看就会&#xff0c;一写就废&#xff01;&#xff01;&#xff01;&#xff01; 易错点1&#xff1a;以下循环方式写哪一个&#xff1f; 方案一&#xff1a;while(left<right) 方案二&#xff1a;while(left…

【MATLAB】兔子机器人总系统_动力学模型解读(及simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…

网站建设:承诺网站打开速度,这个要求合理吗?

很多甲方都要求网站的打开速度&#xff0c;这个要求合理吗&#xff1f;其实说合理也合理&#xff0c;说不合理也不合理。 承诺打开速度的合理性的一面 要求网站打开速度是一个合理的要求。网站的打开速度对于用户体验和网站的成功至关重要。以下是一些原因说明为什么网站打开速…

设计模式(一)设计模式分类和六大设计原则

0.设计模式的分类 GoF提出的设计模式总共有23种&#xff0c;根据目的准则分类分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式&#xff0c;共七种&#xff1a;适配器模式、装饰模式…

计算字符串的长度

在R语言中&#xff0c;你可以使用nchar()函数来计算字符串的长度。这个函数返回的是字符串中的字符数&#xff0c;而不是字节数。 例如&#xff0c;如果你有一个字符串str <- "Hello, World!"&#xff0c;你可以使用nchar(str)来获取它的长度。 代码如下&#x…

windows 两个服务器远程文件夹同步,支持文件新增文件同步、修改文件同步、删除文件同步 python脚本(通过对比文件hash值确认文件是否备修改)

在Python中实现Windows两个服务器之间的文件夹同步&#xff0c;可以通过计算并对比文件的哈希值来判断文件是否被修改过。这里我们使用paramiko进行远程操作&#xff0c;并结合hashlib库计算MD5哈希值&#xff1a; import os import paramiko import hashlib# 定义源与目标服务…

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建 卷II 一. 拓扑图 二.有线网络配置 三.无线网络配置 四.出口网络配置 二、有线配置 S1.txt S1#show running-config Building configuration... Current configuration : 5008 bytes! version RGOS 10…

[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置

ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…

微服务系列(一)springcloudAlibaba之Nacos注册和配置中心及openFeign远程调用

一&#xff0c;认识微服务 我们先看看开发大型项目采用单体架构存在哪些问题&#xff0c;而微服务架构又是如何解决这些问题的。 1.1 单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;整个项目中所有功能模块都在一个工程中开发&#xff1b;项目部署…

大数据安全问题有哪些类型

在物联网时代&#xff0c;数据已成为公司的重要资产。公司使用大数据等现代技术来收集和处理数据。凭借这些能力&#xff0c;大数据已经 改变了许多行业&#xff0c;例如医疗保健、零售和农业。大数据应用有助于公司改善业务运营并预测行业趋势。然而&#xff0c;这项技术可能 …

for与while的区别

for循环中&#xff0c;知道循环次数或者循环范围 while循环中&#xff0c;不知道循环的范围和次数&#xff0c;只知道循环的结束条件 。。。 /*山峰的高度是&#xff08;8844.43米8844430毫米&#xff09;&#xff0c;假如我有一张纸&#xff0c;要折多少次可以达到山峰的高…

【递归搜索回溯专栏】专题一递归:快速幂

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

为HTTP而生的requests库,纵横江湖难逢敌手

目录 requests是什么安装requests使用requestsGET方法POST方法 requests的相关函数 既然Python是一门全球流行的语言&#xff0c;那么对于网络通信的HTTP的支持肯定也是非常的优秀的。Python中原生的urllib模块也有对HTTP的支持&#xff0c;虽然也可以用来发送 HTTP 请求&#…

Android开发新手入门教程,华为大神花费5个月打造的这份714页学习笔记系列

前言 成为一个专业人士是所有程序员的目标&#xff0c;近几年的工作经历&#xff0c;近距离观察了很多大公司的大佬。有幸与其中的一部分一起工作。在此分享大牛程序员的行为风格以及我自己的所思所想&#xff0c;希望对大家有所帮助。 特此声明&#xff1a;此为我个人主观观点…