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秒。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝地亚狂想曲

送我一瓶农夫山泉?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值