STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

这篇具有很好参考价值的文章主要介绍了STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

相关说明:

开发板:CT117E-M4(STM32G431RB 蓝桥杯嵌入式比赛板)
开发环境: CubeMX+Keil5


CubeMX配置:

一、CubeMX配置(RTC相关)

1.使能RTC:

三个步骤(对应图中2、3、4):
a.使能RTC时钟源
b.使能日历(使能日历才能用闹钟)。
c.使能闹钟

STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

2.进制配置:

有两个选项,Hourformat24对应24进制,Hourformat12对应12进制。
STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

3.初始时间配置:

DataFormat选项分别为BIN(时间为10进制)BCD(时间为16进制)
Hours为初始时间的小时
Minutes为初始时间的分钟
Seconds为初始时间的秒数
STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)
时间进制不同体现在代码里面的区别如下,选择了16进制后续也可以使用10进制数来配置时间或闹钟,因为配置时可以重新选择时间进制
STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

4.日期配置:

配置秒中断可以不用关心日期的配置,初始值即可。
STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

5.闹钟配置:

分为两步:
1.初始时直接将闹钟时间配置为初始时间(23:55:55)的下一秒(23:55:56)。
2.使能闹钟触发忽略日期忽略小时忽略分钟,但不忽略秒。这样每次中断发生只是根据秒数决定。STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)

二、代码

三个函数
1.GET_Time()
2.SET_Alarm()
3.HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)

1.获取时间

获取时间时需注意,只调用HAL_RTC_GetTime()的话会出现闹钟不会继续走的问题(希望懂的大佬可以解释下原理,十分感激),因此需要在调用HAL_RTC_GetTime()后再调用HAL_RTC_GetDate(),即使用不到它。

RTC_TimeTypeDef Now_Time;//定义时间结构体
RTC_DateTypeDef Now_Date;//定义日期结构体

void GET_Time()//获取当前时间
{
	HAL_RTC_GetTime(&hrtc,&Now_Time,RTC_FORMAT_BIN);
	HAL_RTC_GetDate(&hrtc,&Now_Date,RTC_FORMAT_BIN);
}

2.设置闹钟

首先将生成代码里面的闹钟结构体定义copy一下,定义为全局变量,再将生成的那句删除(用MX重新配置其他东西的时候,注意再次删除生成的代码!!!),定义为全局变量目的是用到上面配置好的闹钟(忽略日期,忽略小时……)。
STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)
然后在函数里面,将当前时间的秒数+1后的值赋值给闹钟结构体的秒数!(函数中的第一行代码);然后判断是否为60,为60则重新赋值0!;然后调用函数HAL_RTC_SetAlarm_IT()重新配置闹钟即可!

void SET_Alarm()
{
	sAlarm.AlarmTime.Seconds = Now_Time.Seconds+1;
	if(sAlarm.AlarmTime.Seconds==60)sAlarm.AlarmTime.Seconds=0;
    HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);
}

3.闹钟中断函数

在到达原先配置好的中断时间后(23:55:56),会进入闹钟中断函数,在中断函数里做两件事:
1.获取当前时间GET_Time()。
2.设置下一秒钟的中断SET_Alarm()。
这样每次发生中断时都将重新配置闹钟,并在下一秒时再次发生中断,如此反复,即可达到秒中断的效果,再根据自己的需求在中断函数中添加代码(LCD更新时间,串口打印时间)。

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
	GET_Time();
	printf("%02d:%02d:%02d\n",Now_Time.Hours,Now_Time.Minutes,Now_Time.Seconds);//这句代码只是测试
	SET_Alarm();
}

拓展(蓝桥杯第九届省赛真题):
根据EEPROM中存储的时间来配置闹钟分为三步
1.读取在EEPROM中存储的时间,保存在时间结构体中
2.调用Set_Time函数设置当前时间
3.配置下一秒的闹钟

三、实验结果

STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)


总结

以上就是全部内容,如有错误请批评指正。文章来源地址https://www.toymoban.com/news/detail-402338.html

到了这里,关于STM32RTC秒中断--基于HAL库(一文看懂如何配置并使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】基于HAL库的中断详细学习

    1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数据类型 3.2. 外部中断的接口函数 在计算机系统中,处理器常常需要与外部设备进行数据传输。常见的数据传输方式有以下四种:

    2024年02月02日
    浏览(79)
  • 基于STM32的定时器--定时中断(HAL库)

    本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时

    2024年02月14日
    浏览(54)
  • STM32:基于HAL 库的外部中断按键以及消抖

    第一次写博客,有错误与问题欢迎指正。 这部分直接上代码,假设PB5为输入端且上拉,PB11为输出。 在CubeMx中配置完引脚(下降沿触发)并在NVIC中开启外部中断后,我们注意到,上一个程序有5个要素(我写了注释的5个): 中断回调函数HAL_GPIO_EXTI_Callback是一个虚函数,我们

    2024年04月10日
    浏览(47)
  • stm32使用HAL库配置串口中断收发数据(保姆级教程)

    最近在学习使用hal库,之前都是用标准库来写32代码,所以发个帖子记录一下学习过程,同时也希望能帮助到一些也在学习HAL库的同学。 接下来进入正题 串口中断是指当单片机收到一个串口数据时,单片机会产生一个中断信号,通知处理器中断服务程序去处理这个接收到的数

    2024年02月07日
    浏览(40)
  • 【正点原子STM32】RTC实时时钟(RTC方案、BCD码、时间戳、RTC相关寄存器和HAL库驱动、RTC基本配置步骤、RTC基本驱动步骤、时间设置和读取、RTC闹钟配置和RTC周期性自动唤醒配置)

    一、RTC简介 二、STM32 RTC框图介绍 2.1、STM32 F1 RTC结构框图 2.2、STM32 F4 / F7 / H7 RTC结构框图 三、RTC相关寄存器介绍 3.1、RTC基本配置步骤 3.2、RTC相关寄存器(F1) 3.3、RTC相关寄存器(F4 / F7 / H7) 四、RTC相关HAL库驱动介绍 4.1、RTC相关HAL库驱动(F1) 4.2、RTC相关HAL库驱动(F4 / F7 /

    2024年03月27日
    浏览(67)
  • STM32 HAL库常用GPIO函数以及外部中断配置与响应流程

    Hello,大家好,这是我第一篇博客,写的不好请大家包涵指教,话不多说直接看内容: HAL库常用GPIO函数: void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) 这个函数主要用来初始化我们需要用到的引脚,设置其工作频率、工作模式、上下拉等参数。如果使用CubeMX配置工程

    2024年02月03日
    浏览(44)
  • 2.基于正点原子STM32F103的定时器中断实验(HAL库实现)(cubeMX)

      基本上每一款MCU都会配备定时器这个外设,STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 同样,STM32F1系列的定时器功能也很强大,包括: TIM1和TIM8两个高级定时器; TIM2~TIM5是个通用寄存器; TIM7,TIM8,两个基本定时器。 由于本次实验适用于新手入门

    2023年04月26日
    浏览(159)
  • STM32F4_HAL库_串口阻塞/中断/DMA三种方式发送数据的配置

    串口阻塞发送的意思就是,发送一段数据,在没有发送完所有数据之前,一直停留在此发送函数(可设定阻塞时间),这个过程中会阻塞别的程序运行; HAL库的配置分为两个层次,一个是HAL库内部调用的、与MCU硬件相关的初始化xxx_MspInit,一个是我们外部调用的初始化xxx_In

    2023年04月25日
    浏览(49)
  • 【无标题】STM32 RTC闹钟中断和唤醒待机模式

    RTC代表的是实时时钟的意思。因为它提供的时钟基准比较准确所以用处还是很多的。本文章主要讲解基于STM32F103上的RTC闹钟中断功能以及用闹钟中断唤醒STM32的待机模式。 需要注意RTC的几个要点:1.RTC的值被设定后它就会一直按照设定的基准时间自己递增,如果你的硬件设备

    2024年04月14日
    浏览(48)
  • STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    该篇文章中用到的步进电机闭环驱动器为Emm42_V4.0步进电机闭环驱动器。该闭环驱动器自带FOC矢量闭环控制算法,能实现力矩、速度、位置三环控制。 如下图所示,该42步进闭环电机驱动器的A+、A-、B+、B-连接步进电机,通过右侧的使能、脉冲、方向端对步进电机进行驱动控制

    2024年02月01日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包