STM32_HAL_RTC_中断实现闹钟

1STM32设置

在STM32Cude中设置RTC//具体设置看先前发的文章

再打开闹钟中断(如下图)

2代码思路

2.1启动闹钟(HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,FORMAT_BCD))

2.2设置回调函数(void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){)

2.3在回调函数中使用UART将当前的时间发出在设置闹钟闹钟为3秒后

3main.c源码

1

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "rtc.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
int time1;//计数
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){RTC_TimeTypeDef stime={0};//时间的结构体//存储时间char data_shijian [30];//存储数据time1=time1+0x3;//使计数增加3秒RTC_AlarmTypeDef sAlarm ;sAlarm.Alarm=RTC_ALARM_A;//闹钟AsAlarm.AlarmTime.Hours=0x19;//时sAlarm.AlarmTime.Minutes=0x43;//分sAlarm.AlarmTime.Seconds=0x3+time1;//秒HAL_RTC_SetAlarm_IT(hrtc,&sAlarm,FORMAT_BCD);//在次启动闹钟HAL_RTC_GetTime(hrtc,&stime,RTC_FORMAT_BIN);//获取时间sprintf(data_shijian,"时间为:%02d : %02d : %02d ",stime.Hours,stime.Minutes,stime.Seconds);HAL_UART_Transmit(&huart1,(uint8_t*)data_shijian,sizeof(data_shijian),20);}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_RTC_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */RTC_AlarmTypeDef sAlarm ;sAlarm.Alarm=RTC_ALARM_A;//闹钟AsAlarm.AlarmTime.Hours=0x19;//时sAlarm.AlarmTime.Minutes=0x43;//分sAlarm.AlarmTime.Seconds=0x3;//秒HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,FORMAT_BCD);//启动闹钟/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

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

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

相关文章

ICRA 2024 成果介绍:基于 RRT* 的连续体机器人高效轨迹规划方法

近来,连续体机器人研究受到越来越多的关注。其灵活度高,可以调整形状适应动态环境,特别适合于微创手术、工业⽣产以及危险环境探索等应用。 连续体机器人拥有无限自由度(DoF),为执行空间探索等任务提供了灵…

YOLOv8火焰与烟雾智能检测系统

项目概述: 本项目旨在开发一款高效、实时的火焰与烟雾检测系统,利用先进的深度学习技术——YOLOv8,为安全监控领域提供智能化解决方案。系统不仅能够准确识别视频流或静态图像中的火焰与烟雾,还配备了用户友好的图形界面&#xff…

Spring框架中常见注解

Spring: SpringMVC: RequestMapping用在类上表示所有该类下方法的父路径 RequestParam 做映射,前端请求的参数映射到控制器Controller的处理方法上的参数上。 【当参数需要设置默认值(前端没有发送这个参数)、参数名…

机器人种类分析

2000年前,机器人主要应用于工业生产,俗称工业机器人,由示教器操控,帮助工厂释放劳动力,此时的机器人并没有太多智能而言,完全按照人类的命令执行动作,更加关注电气层面的驱动器、伺服电机、减速…

mysql中sql语句 exists 判断子句的用法

如果子查询成立才执行父查询 exists判断子查询的使用例子: 张三不存在所以前面的父查询不执行 后面的子句结果存在,所以前面的父查询被执行 where条件所连接的嵌套子查询都是,条件子查询 ———————————————————————…

STL——deque容器【双端动态数组】

deque容器的基本概念: 功能:双端数组,可以对头端进行插入删除操作 deque与vector的区别: vector队友头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度会比vecto…

QT+多线程TCP服务器+进阶版

针对之前的服务器,如果子线程工作类里面需要使用socket发送消息,必须要使用信号与槽的方法, 先发送一个信号给父进程,父进程调用socket发送消息(原因是QT防止父子进程抢夺同一资源,因此直接规定父子进程不能…

C脚本实现WIncc模拟量趋势窗口弹出

文章目录 前言一、步骤及解析二、运行画面演示三、总结 前言 本文给出了一种基于C脚本实现点击输入输出域对象,弹出对应模拟量趋势窗口的方法。 一、步骤及解析 在Wincc变量管理中,添加两个变量; 示例如下: 将以上两个变量添加到…

在新页面中跳转到指定 div容器位置

要在打开新的页面时跳转到指定 div,我们需要结合 HTML、JavaScript 和后端技术来实现。以下是两种常见的方法: 使用 URL 参数传递目标 div 信息 HTML (新页面): 在新页面的链接中,添加参数来指示目标 div 的 id,例如:…

测试docker GPU性能损失

NVIDIA 3090 利用HSOpticalFlow代码测试docker GPU性能损失 docker介绍图如下: 形象生动展示了他们之间的关系 今天要测试docker容器运行HSOpticalFlow算法的性能损失,包括CPU和GPU 上一篇博客 http://t.csdnimg.cn/YW5kE 我已经介绍了使用docker和nvid…

[Linux_IMX6ULL驱动开发]-GPIO子系统和Pinctrl子系统

目录 Pinctrl子系统的概念 GPIO子系统的概念 定义自己的GPIO节点 GPIO子系统的函数 引脚号的确定 基于GPIO子系统的驱动程序 驱动程序 设备树修改 之前我们进行驱动开发的时候,对于硬件的操作是依赖于ioremap对寄存器的物理地址进行映射,以此来达…

【020】基于JavaWeb实现的批报管理系统

项目介绍 基于jspservlet实现的批报管理系统采用B/S架构,该项目设计了一个角色管理员,管理员实现了我的案件、查询统计、项目维护等三大功能模块 技术栈 开发工具:Idea2020.3 运行环境:jdk1.8tomcat9.0mysql5.7 服务端技术:j…

麦肯锡专访 Mistral AI CEO:三五年后的工作,要比现在更有意义

【编者按】总部位于巴黎的人工智能初创公司 Mistral AI 成立仅一年,就被誉为现有大模型巨头的有力挑战者。 今年 2 月,Mistral AI 正式发布了旗舰级大模型 Mistral Large,直接对标 OpenAI 的 GPT-4;几周前,Mistral AI…

Element快速上手!

Element是饿了么公司前端团队开发的一套基于Vue的组件库,用于快速构建网页~ 官网链接: Element - The worlds most popular Vue UI frameworkElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.elem…

UML之用例图

1.用例图 用例图指参与者,用例,边界以及它们之间的关系构成的用于描述系统功能的视图。说明是谁要使用系统,以及可以使用该系统可以做些什么。展示了一个外部用户能够观察到的系统功能模型图 2.用例图的元素 (1)参与…

Redis 实战之监视器

监视器 成为监视器向监视器发送命令信息总结 成为监视器 发送MONITOR 命令可以让一个普通客户端变为一个监视器, 该命令的实现原理可以用以下伪代码来实现: def MONITOR():# 打开客户端的监视器标志client.flags | REDIS_MONITOR# 将客户端添加到服务器…

C++初阶之stack,queue,priority_queue的使用和模拟以及仿函数的创建和使用

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.stack,queue,priority_queue简介以及代码模拟 1.1 stack …

uniapp 版本检查更新

总体来说uniapp的跨平台还是很不错的,虽然里面各种坑要去踩,但是踩坑也是开发人员的必修课和成长路。 这不,今天就来研究了一下版本检查更新就踩到坑了。。。先来看看检查更新及下载、安装的实现。 先来看看页面: 从左到右依次为…

推荐3个实用的github开源项目

目录: 1、AI生成高清短视频 2、媒体平台爬虫 3、文本转语音项目

【Linux网络编程】I/O多路转接之select

select 1.初识select2.了解select基本概念和接口介绍3.select服务器4.select特点及优缺点总结 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃…