STM32H7-RTC介绍与测试,Wakeup Timer测试,alarm测试

2024-02-01 04:30

本文主要是介绍STM32H7-RTC介绍与测试,Wakeup Timer测试,alarm测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

功能框图

在这里插入图片描述

功能描述

入侵检测

在这里插入图片描述
什么是入侵检测,我在网上搜索到了一个应用,假如你的设备有外壳,在外壳缝隙连接一个开关电路,另一端连接到上图中的RTC_TAMPx中。当设备被外界打开的时候,检测到入侵,清除备份寄存器和备份RAM。这里从上图可以看到,过欠压和过温的时候,也可以触发入侵。

​ 入侵事件发生的时候,默认触发时间戳记录,时间戳在下一节

时间戳

在这里插入图片描述

时间戳这个功能主要用于,当我们检测到外界的某个信号时候,保存当前的实时时间。上图可以看到,时间戳寄存器有两个来源,一个是外界引脚,一个是影子寄存器(当前时间的一个备份寄存器)。时间戳可以触发TSF中断

日历

在这里插入图片描述
日历是RTC的核心功能,日历时钟来源有外部参考时钟,LSE,分频HSE,LSI,最终输入到RTC。RTC有一个实时计数器,我们如果直接读取该计数器的数据可能会出现数据不一致的问题,如下面的例子,读完的数据比实际时间快约一整天
在这里插入图片描述
所以,STM32内部放了影子寄存器,当时间变化的时候实时计数器里的数据被复制到影子寄存器。我们读取影子寄存器的时候有硬件锁定机制,保证数据一致性。

周期唤醒定时器

在这里插入图片描述
简单的一个定时器,做长定时的话可用。最长定时可达到36H,可触发中断WUTF

闹钟

STM32H750有两个闹钟,通过比对预设值和影子寄存器中的值是否一致来触发闹钟。可以设置比对日历中的任何一个字段,比如3秒钟的时候闹钟“响”,26分钟的时候响,今天早上8点半响,2099年响。。。。。

闹钟可输出到引脚,可以触发中断/事件

闹钟AB都有输出功能,AB没有区别,图上只画了A

多一嘴:RTC输出源除了闹钟,还可以是两个级联的分频器(1HZ)
在这里插入图片描述

测试

cubemx

只测试了闹钟和定时器

开启闹钟A,唤醒定时器

设置当前时间为0时0分0秒,日期也全0

唤醒定时器设置为1Hz,计数器默认向下计数自动重装,初值设置为4

开启闹钟中断和唤醒定时器中断
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码编写

RTC_TimeTypeDef time;RTC_DateTypeDef data;uint32_t wakeup_data;//这里必须选清除wakeup中断标志位,否则可能触发不了中断__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);while (1){HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);HAL_RTC_GetDate(&hrtc,&data,RTC_FORMAT_BIN);wakeup_data = HAL_RTCEx_GetWakeUpTimer(&hrtc);printf("%d h	%d min	 %d s\r\n", time.Hours,time.Minutes,time.Seconds);HAL_GPIO_TogglePin(LEDB_GPIO_Port,LEDB_Pin);HAL_Delay(1000);}
//重写中断处理函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{printf("%s\r\n",__FUNCTION__);
}
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef * hrtc)
{printf("%s\r\n",__FUNCTION__);
}

现象

在这里插入图片描述

补充

什么是亚秒?
RTC clock要想分频到1HZ,要经过第一个异步分频器和第二个同步分频器,之后时钟周期才是1秒钟。第二个分配器计数值从0计满为1秒,其中的数值就是亚秒。一般来说第一个分频器分频值为128,第二个为256,两者相乘为32768。所以1亚秒等于1/256秒。

这篇关于STM32H7-RTC介绍与测试,Wakeup Timer测试,alarm测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666083

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的