STM32CubeMX之RTC电子钟

发布者:心灵之旅最新更新时间:2024-04-30 来源: elecfans关键字:STM32CubeMX  RTC  电子钟 手机看文章 扫描二维码
随时随地手机看文章

1.简介

实时时钟是一个独立的定时器。 RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

2.特性

 ● 可编程的预分频系数:分频系数最高为220。
 ● 32位的可编程计数器,可用于较长时间段的测量。
 ● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟频率的四分之一以上)。
 ● 可以选择以下三种RTC的时钟源:
─ HSE时钟除以128;
─ LSE振荡器时钟;
─ LSI振荡器时钟
 ● 3个专门的可屏蔽中断:
─ 闹钟中断,用来产生一个软件可编程的闹钟中断。
─ 秒中断,用来产生一个可编程的周期性中断信号(最长可达1秒)。
─ 溢出中断,指示内部可编程计数器溢出并回转为0的状态。


3.软件设计

 3.1 选择RTC时钟源

在这里插入图片描述

3.2 RTC配置

在这里插入图片描述watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

3.3 配置RTC时钟源

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

4.生成代码

 4.1 RTC初始化

在有后备电池供电情况下,为了保证掉电后电子钟数据持续更新,我们需要开启后备驱动。

/*检查后备区域是否写入数据*/

  if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)==0x12)

  {

    return ;

  }

  else HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x12);//写入标志位,表示RTC时间配置好,防止重置时间

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

4.2 开时钟,开RTC中断

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_7#pic_center

4.3 RTC中断

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

void RTC_IRQHandler(void)

{

  /* USER CODE BEGIN RTC_IRQn 0 */

  RTC_TimeTypeDef sTime = {0};

  RTC_DateTypeDef DateToUpdate = {0};

  /* USER CODE END RTC_IRQn 0 */

  HAL_RTCEx_RTCIRQHandler(&hrtc);

  /* USER CODE BEGIN RTC_IRQn 1 */

if(HAL_RTC_GetTime(&hrtc,&sTime,RTC_FORMAT_BIN)==HAL_OK)

{

printf('%d:%d:%d  ',sTime.Hours,sTime.Minutes,sTime.Seconds);

}

if(HAL_RTC_GetDate(&hrtc,&DateToUpdate,RTC_FORMAT_BIN)==HAL_OK)

{

printf('%d/%d/%d  星期:%drn',DateToUpdate.Year,DateToUpdate.Month,DateToUpdate.Date,DateToUpdate.WeekDay);

}

  /* USER CODE END RTC_IRQn 1 */

}

4.4 时间显示和校准

  if(usart1_flag)

    {

      printf('%srn',usart1_buff_rx);

      if(usart1_buff_rx[0]== '*')

      {

        DateToUpdate.Year=(usart1_buff_rx[3]-'0')*10+(usart1_buff_rx[4]-'0')*1;//年

        DateToUpdate.Month=(usart1_buff_rx[5]-'0')*10+(usart1_buff_rx[6]-'0')*1;//月

        DateToUpdate.Date=(usart1_buff_rx[7]-'0')*10+(usart1_buff_rx[8]-'0')*1;//日


        sTime.Hours=(usart1_buff_rx[9]-'0')*10+(usart1_buff_rx[10]-'0')*1;

        sTime.Minutes=(usart1_buff_rx[11]-'0')*10+(usart1_buff_rx[12]-'0')*1;

        sTime.Seconds=(usart1_buff_rx[13]-'0')*10+(usart1_buff_rx[14]-'0')*1;

        printf('%d/%d/%d -- %d:%d:%drn',DateToUpdate.Year,DateToUpdate.Month,DateToUpdate.Date,sTime.Hours,sTime.Minutes,sTime.Seconds);

        HAL_RTC_SetDate(&hrtc, &DateToUpdate,RTC_FORMAT_BIN);

        HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN);       

      }

      usart1_flag=0;

      usart1_count=0;

    }

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_centerpoYBAGKThW2AXQraAAdd0SZ8v9s622.png

关键字:STM32CubeMX  RTC  电子钟 引用地址:STM32CubeMX之RTC电子钟

上一篇:STM32之LWIP网络协议栈移植步骤与方案
下一篇:stm32外部时钟模式1和模式2区别

推荐阅读最新更新时间:2024-11-06 06:02

STM32F4 RTC日历和Count转换
虽然F4硬件自带了日历功能,可以直接读年月日,但有些场合使用计数值存储还是更方便。 这里根据正点原子F1中RTC例程的年月日转换,写了适用于F4的RTC日历转计数值。 两个函数的声明: uint32_t RTC_DataToCnt(RTC_TimeTypeDef RTC_TimeStruct,RTC_DateTypeDef RTC_DateStruct); void RTC_CntToData(uint32_t RTC_Count,RTC_TimeTypeDef* RTC_TimeStruct,RTC_DateTypeDef* RTC_DateStruct); 函数实现内容: const u8 mon_tabl
[单片机]
STM32F4 <font color='red'>RTC</font>日历和Count转换
玩转STM32CubeMX | DS18B20温度传感器
1.DS18B20简介 DS18B20是由DALLAS半导体公司推出的一种单总线接口的温度传感器,与传统的热敏电阻等测温元件相比,它是一种新型的体积小、实用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20的内部结构如下图示 ROM中的64位序列号是出厂前就被光刻好的,可以看做是DS18B20的地址序列号。64位光刻ROM的排列是:8位产品类型标号+48位DS18B20序列号+8位循环冗余校验码。光刻ROM 的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20 DS18B20的内部存储器(9个字节)包括一个高速暂存器RAM和一个EEPROM,EEPROM里存放高温和低温触发
[单片机]
玩转<font color='red'>STM32CubeMX</font> | DS18B20温度传感器
STM32CubeMX系列教程5:串行通信(USART)
本章以串口为例讲解,HAL 库轮询,中断,DMA 三种编程模型。 1.前情回顾 在串行通信中,一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束。在进行传输之前,双方一定要使用同一个波特率设置。波特率就是每秒钟传输的数据位数。 常用的两种基本串行通信方式包括同步通信和异步通信。我们通常使用的是异步通信.异步通信规定传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成。 2.重定义printf函数。 打开STM32CubeMX新建工程,选择STMF746IGT6芯片,选择外部
[单片机]
<font color='red'>STM32CubeMX</font>系列教程5:串行通信(USART)
STM32开发笔记60: 在STM32CubeMX中配置LwIP
单片机型号:STM32F407VGT6 本文介绍在STM32CubeMX中配置LWIP的方法,STM32CubeMX的版本号为5.0,LwIP的版本号为2.03,FreeRTOS的版本号为9.0.0,CMSIS-RTOS的版本号为1.02。 1、RCC设置 RCC设置如下图所示,使能外部高速晶振,主时钟进行输出(这点比较重要,该时钟用于向DP83848提供时钟),DP83848是我现在使用的PHY,具体的用法查看常用元器件使用方法13:物理层接口芯片DP83848的使用方法这篇日志即可。 2、SYS设置 SYS设置如下图所示,使能SW调试方式,使用TIM1作为时钟基准源(此选项是为了方面FreeRTOS操作系统的
[单片机]
STM32开发笔记60: 在<font color='red'>STM32CubeMX</font>中配置LwIP
STM32CubeMx 软件版本的升级
STM32CubeMx 可以在 工具栏 help 中在软件中升级: 点击Details可以查看细节,5.1版本主要支持了 STM32MP1系列。 选中版本后,点击 INSTALL Now就可以安装了。 等待安装包程序下载: 接受协议: 安装完成后,点击OK。 退出工程以后,以管理员身份运行,之后程序就运行自动升级程序: 如果过程发现卡死情况,可以重新运行。升级成功后在Help- about中可以查看版本已经更新: 5.1.0 升级后,发现启动欢迎界面的bug修复好了,之前打开Cube会发现没反应,要等一会才弹出主窗口,一开始还很容易多点几次,现在这个时间段会显示欢迎界面,提醒用户程序正在启动。 另一
[单片机]
<font color='red'>STM32CubeMx</font> 软件版本的升级
STM32 RTC 读写不正确
调试RTC的时候发现读写不正确。 读写是调用的库函数,年月日和时分秒是分开操作的 读写时发现年月日写完之后读出来要等个好几秒中才能正确的读出来,否则读出来的就一直是设置之前的日期(这里读写都是先操作的日期,然后操作时间) 然后我把写的顺序调换了下,先写时间,再写日期。杯具了,读日期都出现错误了 然后我再把读和写的顺序都调换了下,写的时候是先写日期,再写时间;读的时候是先读时间,再读日期,这样才正确的读写RTC的日期和时间了。
[单片机]
STM32CubeMX新建工程+ 基本IO配置过程
Ⅰ、写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍、下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeMX新建工程的过程。最终通过STM32CubeMX工具配置完成一个驱动IO(点亮LED)的软件工程,也就是通过STM32CubeMX配置完成之后,打开工程直接下载就能点亮LED的工程。 本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装最新版本的软件,具体过程可以参考我的一篇文章: MDK-ARM下载与安装 关于本文的更多详情请往下看。 Ⅱ、STM32CubeMX新建工程描述 在上一篇文章中简单
[单片机]
<font color='red'>STM32CubeMX</font>新建工程+ 基本IO配置过程
89C2051实现的电子钟
一、电路原理   本电路采用89C2051单片机设计硬件电路如图1所示。AT89C2051具有2k字节闪速可编程可擦除只读存储器(FLASH EEPROM)和128bytes的随机存取数据存储器(RAM),可重复擦写10000次,数据保存时间10年,工作电压范围:2.7V~6V,工作频率:0~24MHz,15根可编程I/0引线,2个16位定时器/计数器,一个5向量两级中断结构,—个全双工串行口,一个精密模拟比较器,两级程序加密,输出口可直接驱动LED显示,低功耗的闲置和调电保护工作方式,以及片内振荡器和时钟电路。本电路的设计,充分利用了单片机的硬件资源,结构简单。   89C2051单片机端口设置:Pl口分别接数码管的段码口(
[模拟电子]
89C2051实现的<font color='red'>电子钟</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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