STM32的RTC时钟配置

这篇具有很好参考价值的文章主要介绍了STM32的RTC时钟配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32的时钟可以使用内部RTC产生时钟日历,也可以使用外部芯片产生更为精确的时钟,如DS3231时钟芯片。本文介绍使用内部RTC产生时钟。

RTC的时钟源有以下三种:                                                                                                              ─ HSE时钟除以128;                                                                                                                      ─ LSE振荡器时钟;(常用的是外部低速,稳定精准,重要的是VDD掉电后可有后备供电区域给它供电)                                                                                                                                              ─ LSI振荡器时钟。

一般情况下,为了VDD掉电后可使用后备供电区域给它供电,可以使用LSE振荡器时钟

RTC时钟配置的一般步骤:

1:使能PWR时钟:RCC_APB1PeriphClockCmd();
2:使能后备寄存器访问: PWR_BackupAccessCmd();
3:配置RTC时钟源,使能RTC时钟:
        RCC_RTCCLKConfig();
        RCC_RTCCLKCmd();
        如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
4:初始化RTC(同步/异步分频系数和时钟格式):RTC_Init ();

5:设置时间:RTC_SetTime ();
6:设置日期:RTC_SetDate();

7:开启相关中断(可选)

8:编写中断函数(可选,如果第7开启中断的话)


相应的库函数代码:

  RTC_InitTypeDef RTC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
  PWR_BackupAccessCmd(ENABLE);    //使能后备寄存器访问   
  if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5152)        //是否第一次配置?
    {   
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);        //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
        RCC_RTCCLKCmd(ENABLE);    //使能RTC时钟 

        RCC_LSEConfig(RCC_LSE_ON);//LSE 开启

    RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
    RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTC同步分频系数(0~7FFF)
    RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTC设置为,24小时格式
    RTC_Init(&RTC_InitStructure);
 
        RTC_Set_Time(12,0,0,RTC_H12_AM);    //设置时间
        RTC_Set_Date(17,11,1,3);        //设置日期
        RTC_WriteBackupRegister(RTC_BKP_DR0,0x5152);    //标记已经初始化过了
    } 

如果有中断 唤醒,7,8的中断配置步骤如下;

1:如上,配置好RTC初始化相关参数。
2:关闭WakeUp:RTC_WakeUpCmd(DISABLE);
3:配置WakeUp时钟分频系数/来源: RTC_WakeUpClockConfig();
4:设置WakeUp自动装载寄存器:RTC_SetWakeUpCounter();
5:使能WakeUp : RTC_WakeUpCmd( ENABLE);
6:开启配置闹钟中断:
        RTC_ITConfig();
        EXTI_Init();
        NVIC_Init();
7:编写中断服务函数: RTC_WKUP_IRQHandler();

相应库函数代码如下:

 EXTI_InitTypeDef   EXTI_InitStructure; 
  NVIC_InitTypeDef   NVIC_InitStructure;
      
  RTC_WakeUpCmd(DISABLE);//关闭WAKE UP  
  RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);//唤醒时钟选择  
  RTC_SetWakeUpCounter(0);//设置WAKE UP自动重装载寄存器  
         
  RTC_ITConfig(RTC_IT_WUT,ENABLE);//开启WAKE UP 定时器中断  
  RTC_WakeUpCmd( ENABLE);//开启WAKE UP 定时器   
      
  EXTI_InitStructure.EXTI_Line = EXTI_Line22;//LINE22  
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件  
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发   
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE22  
    EXTI_Init(&EXTI_InitStructure);//配置  
   
  NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;   
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = RTCWKUP_PRIORITY;//抢占优先级1  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = RTCWKUP_SUBPRIORITY;//子优先级2  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道  
    NVIC_Init(&NVIC_InitStructure);//配置 

void RTC_WKUP_IRQHandler(void)
{
    if(RTC_GetITStatus(RTC_IT_WUT)){
        RTC_ClearITPendingBit(RTC_IT_WUT);
        RTC_GetTime(RTC_Format_BCD, (RTC_TimeTypeDef*)&systemtime.time);
        RTC_GetDate(RTC_Format_BCD, (RTC_DateTypeDef*)&systemtime.date);
    }
    
    EXTI_ClearITPendingBit(EXTI_Line22);
}文章来源地址https://www.toymoban.com/news/detail-685425.html

到了这里,关于STM32的RTC时钟配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32学习】实时时钟 —— RTC

    STM32RTC实时时钟实验讲解,从入门到放弃 【STM32】RTC休眠唤醒(停机模式)、独立看门狗开启状态下 关于STM32使用RTC唤醒停止模式的设置 RTC(Real Time Clock):实时时钟,是指可以像时钟一样输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片。总之,RTC只是个能靠电

    2024年02月01日
    浏览(36)
  • STM32学习笔记(十二)丨RTC实时时钟

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江协科技 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断   

    2024年02月16日
    浏览(37)
  • STM32实时时钟(RTC)的配置和使用方法详解

    实时时钟(RTC)是STM32系列微控制器上的一个重要模块,用于提供准确的时间和日期信息。在本文中,我们将详细介绍STM32实时时钟的配置和使用方法。 ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进 ❤欢迎关注我的知乎:对error视而不见 代码获取、问题探讨及

    2024年02月21日
    浏览(44)
  • STM32-RTC实时时钟

    目录 RTC实时时钟 功能框图 UNIX时间戳 初始化结构体 RTC时间结构体 RTC日期结构体 RTC闹钟结构体 进入和退出配置函数 实验环节1:显示日历 常规配置 RTC配置 测试环节 实验现象 实验环节2:闹钟 常规配置 RTC配置 测试环节 实验现象 STM32的RTC外设,实质上是一个 掉电后还继续运

    2024年02月06日
    浏览(37)
  • 【STM32】RTC(实时时钟)

    本质:计数器 RTC中断是外部中断(EXTI) 当VDD掉电的时候,Vbat可以通过电源---实时计时 STM32的RTC外设(Real Time Clock),实质是一个   掉电   后还继续运行的定时器。从定时器的角度来说,相对于通用定时器TIM外设,它十分简单, 只有很纯粹的计时和触发中断的功能 ;但从

    2024年02月03日
    浏览(40)
  • STM32——RTC实时时钟

    Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间 底层使用秒计数器可以节省硬件设计电路,

    2024年01月23日
    浏览(32)
  • STM32--RTC实时时钟

    Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒 。 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量。 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间。 GMT : GMT(Greenwich Mean Time), 格林威治平时(也称格林

    2024年02月10日
    浏览(37)
  • STM32-RTC实时时钟详解

    RTC的本质很简单,就是一个时钟经过精确分频最后得到的一个1Hz的时钟,也可以说是计数器,其他大部分功能都是基于这个计数器设计的数字逻辑。 本文讲的RTC是基于STM32F030来讲的,相比与F1系列的RTC来说,M0的将很多原本需要软件实现的功能硬件化了,使用起来更加便利。

    2024年02月04日
    浏览(34)
  • STM32-实时时钟RTC-2

                                     

    2024年01月20日
    浏览(37)
  • stm32之22.RTC时钟

    主函数代码 锁定时间不然复位键重置时间 

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包