STM32CubeMX系列 | RTC实时时钟

发布者:悠闲自在最新更新时间:2023-03-21 来源: zhihu关键字:STM32CubeMX系列  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-%02drn",2000+GetDate.Year,GetDate.Month,GetDate.Date);

    printf("Time:%02d:%02d:%02drn",GetTime.Hours,GetTime.Minutes,GetTime.Seconds);

    printf("rn"); 

}


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  实时时钟 引用地址:STM32CubeMX系列 | RTC实时时钟

上一篇:STM32CubeMX系列 | 输入捕获
下一篇:STM32CubeMX系列 | 待机唤醒

推荐阅读最新更新时间:2024-11-13 16:25

STM32F单片机的RTC校准功能是什么?
在STM32里面有备份寄存器(BKP),它的功能之一就是用来存储RTC校验值的校验寄存器,即具有RTC校准功能。在PC13引脚上输出RTC 校准时钟,RTC闹钟或者秒脉冲。在程序中有#define RTCClockOutput_Enable /*RTC Clock/64 is output on tamper pin(PC.13)*/ BKP可以用来存储84个字节的用户应用程序数据,他们处在备份域里,当Vdd电源被切断时,他们仍然由Vbat维持供电。 判断RTC后备寄存器1的值是否为事先写入的某个值,如果不是,则说明RTC是第一次上电,需要配置RTC。针对BKP也有相应的库函数。 u16 BKP_ReadBackupRegi
[单片机]
定时器、看门狗和RTC
什么是定时器(timer) 1.定时器是SoC中常见外设 1、定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值×计数时间周期,就能得到一个时间段,这个时间段就是我们定的时间(这就是定时器了)。 2、定时器/计数器作为SoC的外设,主要用来实现定时执行代码的功能。定时器相对于SoC来说,就好像闹钟相对于人来说意义一样。 2.定时器有什么用 1、定时器可以让SoC在执行主程序的同时,可以(通过定时器)具有计时功能,到了一定时间(计时结束)后,定时器会产生中断提醒CPU,CPU会去处理中断并执行定时器中断的ISR。从而去执行预先设定好的事
[单片机]
STM32CubeMX系列 | 内部温度传感器
1. 内部温度传感器简介 STM32F1有一个内部的温度传感器,可以用来测量CPU及周围的温度。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值,温度传感器模拟输入推荐采样时间是17.1us,内部温度传感器支持的温度范围为:-40~125℃,精度为±1.5℃左右 通过读取ADC通道16的值,通过如下计算公式即可算出当前温度: T = { ( V25 - Vsense ) / Avg_Slope } + 25 上式中: V25 = Vsense 在25℃时的数值(典型值为:1.43) Avg_Slope = 温度与 Vsense 曲线的平均斜率(典型值为:4.3 mV/℃) 以上典型值请
[单片机]
AVR单片机可运行的实时时钟源程序
简介:AVR单片机可运行的实时时钟源程序 ;*********************** ;AVR单片机实时时钟汇编程序实例 ;功 能:24小时制实时时钟,带1/100秒 ;介 绍:程序在实验板上能够正常运行,是一个带1/100秒的24小时制实时时钟。 ;单片机:ATMEGA16 ;晶 振:4MHz ;语 言:汇编程序 ;来 源:晖创电子网www.schuitron.com收集整理 ;************************* .include m16def.inc ;引用器件I/O配置文件 ;定义程序中使用的变量名(在寄存器空间) .def count = r18 ;循环计数单元 .de
[单片机]
STM32CubeMX | 40 - 实时时钟RTC的使用(日历和闹钟)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的 RTC 外设。 1. 准备工作 硬件准备 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码。 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 这里我都使用外部时钟: 配置串口 开发板板载了
[单片机]
<font color='red'>STM32CubeMX</font> | 40 - <font color='red'>实时时钟</font><font color='red'>RTC</font>的使用(日历和闹钟)
STM32F10x_RTC日历
Ⅰ、概述 接着上一篇文章来讲述关于RTC的计数功能,我们以实例RTC日历(读写年、月、日、星期、时、分、秒)来讲述该章节。 STM32F1系列芯片的RTC功能和其他系列(F0、F2、F4等)相比来说,功能要弱一点,原因在于F1系列的RTC日历功能需要我们通过软件进行处理(换算RTC计数值)才能真正实现RTC日历的功能,而其他系列芯片不用这么麻烦,可直接读取日历值。 该文和上一篇文章的区别:1、RTC时钟源选择LSE(外部低速时钟); 2、分频值是32768; 3、读写了RTC_CNT(计数值),用于RTC日历。 本文章提供的实例工程,其实验效果是: 主函数间隔0.5秒LED变化一次; 间隔1秒中断:读取日历并打印出来。
[单片机]
STM32F10x_<font color='red'>RTC</font>日历
STM32CubeMX系列教程27:ETH
STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP, Graphics, 等等). 直观的STM32微控制器的选择和时钟树配置 微控制器图形化配置外围设备和中间件的功能模式和初始化参数 C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil的™和GCC编译器。 对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。 1.新建工程 打开STM32cube
[单片机]
<font color='red'>STM32CubeMX</font><font color='red'>系列</font>教程27:ETH
STM32常见问题:低温下部分产品RTC不工作的问题探析
前言 客户反馈在批量生产阶段,发现部分产品的MCU的RTC在低温(0℃)下工作不正常,但是在常温下又是正常的,且其他正常的MCU的RTC在常温与低温下都是正常的。 问题跟进 通过与客户邮件沟通,了解到客户使用的MCU型号是STM32F030C6T6TR。在产品的主从结构中主要用作电源管理和时钟管理。通过客户的描述,似乎相同型号不同片子都存在较大的差异。 由于时间紧急,在了解到初步信息后拜访客户,针对客户认为有问题的MCU芯片做针对性试验。通过STM32CubMx生成测试工程,分别使用LSI(40K),LSE(32.768K),RTC工作时每秒通过LED1(PB5)取反一次(通过LED1灯是否闪烁来指示RTC是否工作正常),
[单片机]
STM32常见问题:低温下部分产品<font color='red'>RTC</font>不工作的问题探析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved