0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CubeMX之RTC电子钟

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-30 09:27 次阅读

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  星期:%d\r\n",DateToUpdate.Year,DateToUpdate.Month,DateToUpdate.Date,DateToUpdate.WeekDay);
	}
  /* USER CODE END RTC_IRQn 1 */
}

4.4 时间显示和校准

  if(usart1_flag)
    {
      printf("%s\r\n",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:%d\r\n",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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354173
  • 定时器
    +关注

    关注

    23

    文章

    3229

    浏览量

    114295
  • 电子钟
    +关注

    关注

    7

    文章

    189

    浏览量

    36883
  • RTC
    RTC
    +关注

    关注

    2

    文章

    521

    浏览量

    66201
  • HAL
    HAL
    +关注

    关注

    2

    文章

    69

    浏览量

    12574
收藏 人收藏

    评论

    相关推荐

    【技术精选】嵌入式STM32原创征文活动精选文章

    网络协议栈移植步骤与方案STM32CubeMX定时器PWM输出STM32CubeMxSD卡驱动STM32CubeMX
    发表于 07-27 18:26

    stm32cubemx教程

    stm32cubemx教程,需要学习的看看,免积分
    发表于 11-02 10:16 0次下载

    STM32CubeMx使用详解所用工程

    STM32CubeMx使用详解所用工程
    发表于 10-30 15:44 24次下载

    关于STM32CubeMX重大升级

    STM32CubeMX重大升级
    的头像 发表于 03-04 14:05 3669次阅读

    STM32CubeMX介绍、 下载与安装

    STM32CubeMX介绍、下载与安装
    的头像 发表于 03-24 10:57 6405次阅读
    <b class='flag-5'>STM32CubeMX</b>介绍、 下载与安装

    浅谈stm32cubemx安装教程

    STM32CubeMX介绍、下载与安装
    的头像 发表于 03-25 10:57 1.8w次阅读
    浅谈<b class='flag-5'>stm32cubemx</b>安装教程

    STM32CubeMX | 40 - 实时时钟RTC的使用(日历和闹钟)

    STM32CubeMX | 40 - 实时时钟RTC的使用(日历和闹钟)
    发表于 11-23 18:06 19次下载
    <b class='flag-5'>STM32CubeMX</b> | 40 - 实时时钟<b class='flag-5'>RTC</b>的使用(日历和闹钟)

    STM32CubeMX第三篇串口实验

    STM32CubeMX第三篇串口实验
    发表于 12-05 11:21 6次下载
    <b class='flag-5'>STM32CubeMX</b>第三篇<b class='flag-5'>之</b>串口实验

    STM32CubeMX | 基于STM32使用HAL库驱动RTC时钟及闹钟功能

    于周期性低功耗的需求,例如让RTC闹钟提醒事件的中断唤醒处于低功耗模式的单片机,让单片机采集完数据之后再次进入低功耗,这样周期执行以达到省电的目的。)(一)工程配置我使用STM32F103RB这一款MCU,首先使用STM32CUBEMX
    发表于 12-06 09:21 52次下载
    <b class='flag-5'>STM32CubeMX</b> | 基于<b class='flag-5'>STM32</b>使用HAL库驱动<b class='flag-5'>RTC</b>时钟及闹钟功能

    STM32CubeMx学习——创建LED灯工程(基于STM32L071KBU)

    STM32CubeMx学习——创建LED灯工程(基于STM32L071KBU)本文介绍利用STM32CubeMx来创建工程代码,并且将代码下载到开发板加以验证。本次实验芯片为
    发表于 12-06 20:06 17次下载
    <b class='flag-5'>STM32CubeMx</b>学习<b class='flag-5'>之</b>——创建LED灯工程(基于<b class='flag-5'>STM32</b>L071KBU)

    STM32CubeMX安装与使用——实现流水灯

    STM32CubeMX安装与使用——实现流水灯
    发表于 12-07 10:06 25次下载
    <b class='flag-5'>STM32CubeMX</b>安装与使用——实现流水灯

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)
    发表于 12-07 11:51 28次下载
    <b class='flag-5'>STM32</b>学习<b class='flag-5'>之</b><b class='flag-5'>STM32cubeMX</b>软件安装与使用(附<b class='flag-5'>STM32cubeMX</b>5.2.1下载地址)

    STM32CubeMX 窗口及工具介绍

    STM32CubeMX 系列教程之 STM32CubeMX 窗口及 STM32PackCreator 工具介绍,内附详细图文介绍。
    发表于 12-14 18:51 26次下载
    <b class='flag-5'>STM32CubeMX</b> 窗口及工具介绍

    STM32CubeMX系列|RTC实时时钟

    RTC实时时钟1. RTC实时时钟简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 12-24 19:15 16次下载
    <b class='flag-5'>STM32CubeMX</b>系列|<b class='flag-5'>RTC</b>实时时钟

    STM8CubeMXSTM32CubeMX功能一样吗?

    STM8CubeMXSTM32CubeMX功能一样吗?
    的头像 发表于 10-31 16:59 1707次阅读
    STM8<b class='flag-5'>CubeMX</b>和<b class='flag-5'>STM32CubeMX</b>功能一样吗?