STM32CubeMX系列|RTC实时时钟

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. 软件设计
3.1 STM32CubeMX设置
  • RCC设置中开启外部高速晶振(HSE)以及外部低速晶振(LSE),时钟树中将RTC的频率设置为32.768KHz

在这里插入图片描述
在这里插入图片描述

  • PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平
  • USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位
  • 激活时钟源,激活日历,选择No RTC Output,设置初始日期和时间

在这里插入图片描述

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

在这里插入图片描述

  • 输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码
3.2 MDK-ARM编程
  • 在rtc.c文件中编写秒中断处理回调函数和闹钟中断处理函数
extern RTC_DateTypeDef GetDate;
extern RTC_TimeTypeDef GetTime;

void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc){
	HAL_RTC_GetTime(hrtc,&GetTime,RTC_FORMAT_BIN);
	HAL_RTC_GetDate(hrtc,&GetDate,RTC_FORMAT_BIN);
	printf("Date:%02d-%02d-%02d\r\n",2000+GetDate.Year,GetDate.Month,GetDate.Date);
	printf("Time:%02d:%02d:%02d\r\n",GetTime.Hours,GetTime.Minutes,GetTime.Seconds);
	printf("\r\n");	
}

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){
	printf("Alarm Active...!!!\n");
}
  • 在main.c文件中编写闹钟设置相关代码并开启相关中断
/* USER CODE BEGIN PV */
RTC_DateTypeDef GetDate;
RTC_TimeTypeDef GetTime;
RTC_AlarmTypeDef sAlarm;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

int main(void){
  HAL_Init();
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RTC_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  __HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC); //开启秒中断
  sAlarm.Alarm = RTC_ALARM_A;
  sAlarm.AlarmTime.Hours = 16;
  sAlarm.AlarmTime.Minutes = 20;
  sAlarm.AlarmTime.Seconds = 30;
  HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,RTC_FORMAT_BIN);  //设置闹钟并使能闹钟中断
  /* USER CODE END 2 */
  while (1){
    HAL_Delay(1000);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
  }
}
4. 下载验证

编译无误后下载到开发板,可以看到D1指示灯每1s闪烁一次,串口助手每1s会打印出相应的日期和时间,闹钟设置的时间到后会打印出闹钟中断函数里的相关语句

在这里插入图片描述

关注我的公众号,在公众号里发如下消息,即可获取相应的工程源代码:

玩转STM32CubeMX | RTC实时时钟

在这里插入图片描述

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: STM32CubeMX是一个用于STM32微控制器的图形化配置工具,可以帮助用户快速配置各种外设和时钟。在STM32CubeMX中配置RTC时钟需要以下步骤: 1. 打开STM32CubeMX软件,选择对应的STM32微控制器型号。 2. 在“时钟配置”选项卡中,勾选“RTC时钟”选项。 3. 在“RTC时钟”选项卡中,选择RTC时钟源和分频系数。常用的RTC时钟源有LSI和LSE,分频系数可以根据需要进行配置。 4. 点击“生成代码”按钮,生成相应的代码。 5. 在生成的代码中,可以找到RTC时钟初始化函数和RTC时钟中断处理函数,根据需要进行修改和调用。 以上就是STM32CubeMXRTC时钟配置的基本步骤。需要注意的是,RTC时钟的配置需要根据具体的应用场景进行调整,以保证系统的稳定性和可靠性。 ### 回答2: STM32CubeMX是STMicroelectronics公司推出的一款自动生成STM32系列微控制器程序框架的软件工具,支持多种嵌入式开发环境,如Keil MDK、IAR、GCCR等。其中,RTC时钟配置是STM32CubeMX中的一个重要功能,在嵌入式系统中常被使用。 首先,RTC(Real Time Clock)是一种能够在STM32微控制器中存储和计算时间信息的电路模块,通常用于时钟管理、计时、定时等应用。RTC模块工作时需要使用独立的振荡器,因此使用RTC需要单独配置其时钟源。下面是关于STM32CubeMXRTC时钟配置的详细步骤: 1.初始化RTC时钟配置 打开STM32CubeMX,进入“Clock Configuration”页面,选择“RTC”时钟配置选项,勾选“LSE”以使RTC时钟使用外部低速振荡器(LSE),勾选“RTC输出来源”以选择RTC时钟输出源(可选)。 2.配置LSE振荡器 在“Pinout & Configuration”页面中,选中“Crystal OSC”菜单,在振荡器引脚配置区域中,选择使用外部低速振荡器(LSE)并设置其频率(例如32.768kHz)。此处需要注意,LSE型号和其供应商要与使用的开发板相对应,同时需要进行测试以确保振荡器正常工作。 3.启用RTC时钟 在“Clock Configuration”页面中,勾选“RTC时钟输出开启”选项即可启用RTC时钟功能,同时选择“RTC输出来源”以选择其时钟源。 4.生成代码 当完成以上配置后,单击“GENERATE CODE”按钮生成代码,STM32CubeMX会自动生成用于配置RTC时钟的C代码,同时将其添加到启动文件中。 上述过程中,还可以对RTC时钟进行其他配置,如时钟中断、闹钟配置等。在STM32CubeMX中,RTC时钟配置非常方便快捷,使得我们能够在嵌入式系统中高效地管理时间,实现定时、计时等功能。同时,还要注意振荡器的选择和质量,以保证RTC时钟的准确性和可靠性。 ### 回答3: STM32CubeMX是一款集成开发环境,可以帮助嵌入式系统开发人员快速搭建STM32微控制器的开发环境,方便用户快速配置微控制器的外设、系统时钟等。 在STM32CubeMX中,RTC实时时钟)是一个重要的外设。RTC是一种独立的时间计数器,常用于需要精确时间计量的嵌入式应用。在STM32系列微控制器中,RTC可以使用外部低速晶振提供时钟信号,可以提供最大到210年的时间计数。 RTC的时钟配置主要包括以下几个步骤: 1. 设置外部低速晶振:在STM32CubeMX中,需要在RCC(Reset and Clock Control)中设置RTC的外部时钟源。用户需要先确定自己所用的外部低速晶振的频率,然后选择相应的外部时钟源。在选择完毕后,需要点击“Clock Configuration”按钮来确认设置。 2. 配置RTC时钟:在STM32CubeMX中,RTC时钟可以和主系统时钟分离,因此需要在RTC中进行配置。用户需要在RTC Configuration中选择“Clock Source”为“LSE”(即外部低速晶振),并设置预分频器,从而得到具体的RTC时钟频率。在确认完毕后,需要点击“Clock Configuration”按钮来保存设置。 3. 生成代码:在配置完毕后,用户需要点击“Generate Code”来生成相应的代码。STM32CubeMX会自动生成相应的初始化代码,用户只需要将其复制到自己的工程中即可。 4. 初始化RTC:在自己的工程中,用户需要调用HAL_RTC_Init()函数来初始化RTC。在初始化过程中,STM32CubeMX会设置RTC的时钟源和预分频器,从而保证RTC能够正常工作。 以上就是STM32CubeMXRTC时钟配置的步骤,用户可以根据自己的实际情况进行修改。在RTC时钟配置过程中,需要特别注意时钟源的选择和预分频器的设置,这一点对于RTC的正常工作非常重要。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安迪西嵌入式

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值