目录

RTC简介

RTC时钟框图

RTC工作原理图

RTC相关寄存器(详细配置过程参考STM32参考手册)

部分代码分析

附录


  • RTC简介

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

RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:
  ● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
  ● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问

  • RTC时钟框图

时钟可配置为 

  1. HSE的128分频
  2. LSE
  3. LSI
  • RTC工作原理图

RTC由两个主要部分组成(参见上图)。

第一部分(APB1接口)用来和APB1总线相连。此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作(参见16.4节)。APB1接口由APB1总线时钟驱动,用来与APB1总线接口。
另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。

  • RTC相关寄存器(详细配置过程参考STM32参考手册)

  1. RTC控制寄存器             (RTC_CRH,   RTC_CRL)
  2. RTC预分频装载寄存器  (RTC_PRLH, RTC_PRLL)
  3. RTC预分频余数寄存器  (RTC_DIVH,  RTC_DIVL)
  4. RTC计数器寄存器         (RTC_CNTH, RTC_CNTL)
  5. RTC闹钟寄存器             (RTC_ALRH ,RTC_ALRL)

RTC_CRH

    RTC_CRL

   RTC_PRLH/RTC_PRLL

   RTC_DIVH / RTC_DIVL

   RTC_CNTH / RTC_CNTL

   RTC_ALRH/RTC_ALRL

  • 部分代码分析

rtc初始化

void rtc_init()
{u8 t;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE); //使能PWR电源和BKP后备区//使能后备寄存器访问PWR_BackupAccessCmd(ENABLE);if(BKP_ReadBackupRegister(BKP_DR1) != 0x0002)  /*@@*/{BKP_DeInit();/********少代码**********/ /*已加*/RCC_LSEConfig(RCC_LSE_ON);   //设置外部低速晶振(LSE),使用外设低速晶振    /******* 注意 :  内部代码关闭了RTC时钟使能!*******/while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&t<250)    //检查指定的RCC标志位设置与否,等待低速晶振就绪{t++;delay_ms(10);}if(t>=250)return;//配置RTC时钟源RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);RCC_RTCCLKCmd(ENABLE);RTC_WaitForLastTask();RTC_WaitForSynchro(); //等待RTC寄存器同步完成RTC_EnterConfigMode(); //允许配置RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR,ENABLE);  //开启闹钟和秒中断RTC_WaitForLastTask();RTC_SetPrescaler(32767);RTC_WaitForLastTask();       rtc_set_time(2018,12,1,19,2,30);RTC_ExitConfigMode(); //关闭配置}else {/*******若已经配置过相应时间,1.则直接等待同步,ps: 只有同步时在可以读取寄存器的值 2. 开启相应中断 ************/RTC_WaitForSynchro();RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR,ENABLE);RTC_WaitForLastTask();}rtc_nvic_config();/********少代码*更新时间*******/  /*已加*/rtc_updata_time();//更新时间BKP_WriteBackupRegister(BKP_DR1,0x0002);   /*@@*/ //*用于防止重复操作    0x0002 : 随机值*//
}

rtc时间设置函数

void rtc_set_time(u16 year,u8 month,u8 day,u8 hour,u8 minute,u8 second)
{u32 value = 0;u16 i;if(year<1970 || year>2099)  return ;for(i=1970 ; i<year ; i++){if( rtc_judge_year(i) )value += 31622400; //闰年时间(s)elsevalue += 31536000; //平年时间}for(i=0 ; i<(month-1) ; i++){value += (u32)month_days[i] * 86400;  //每个月对应的时间if( rtc_judge_year(year) && i==1)value += 86400;}value += (u32)(day-1)*86400;value += (u32)hour*3600;value += (u32)minute*60;value += second;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE); //使能时钟   /*保证时钟使能 实际初始化已使能  程序无作用*/PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问  /* ps ; 和RTC_EnterConfigMode()不同  RTC配置使能*/RTC_SetCounter(value);  /*设置计数器的值*/RTC_WaitForLastTask();}

rtc星期获取

/* 基姆拉尔森公式根据日期计算星期*/
u8 rtc_get_week(u16 year,u8 month,u8 day)
{ if(month <3)  { month+=   12; --year; } return   (day+1+2*month+3*(month+1)/5+year+(year/4)-year/100+year/400)   %   7;
}
  • 附录

RTC实时时钟实验代码(基于正点原子战舰 :  https://github.com/kks1234/STM32/tree/master/15.RTC%E6%97%B6%E9%92%9F

RTC实时时钟(LCD显示)相关推荐

  1. 【正点原子FPGA连载】 第二十四章 RTC实时时钟LCD显示实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  2. 【正点原子FPGA连载】第三十二章RTC实时时钟LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  3. Arduino开发实例-DS3231实时时钟+LCD显示

    DS3231实时时钟+LCD显示 1.DS3231介绍 DS3231是低成本.高精度I2C实时时钟(RTC),具有集成的温补晶振(TCXO)和晶体.该器件包含电池输入端,断开主电源时仍可保持精确的计时 ...

  4. 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  5. 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...

  6. 【正点原子STM32连载】 第二十七章 RTC实时时钟实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  7. STM32学习笔记(十九)RTC实时时钟实验

    STM32F103ZET6之RTC实时时钟实验 文章目录 STM32F103ZET6之RTC实时时钟实验 前言 一.简介 二.相关寄存器及配置过程 三.程序源码 1.rtc.h 2.rtc.c 3.m ...

  8. STM32之RTC实时时钟

    RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...

  9. 【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第16章  实时时钟(RTC) RTC实时时钟 RTC实时时钟简介 实时时钟是一个独立的定时器.RTC模块拥有一组连续计数的 ...

最新文章

  1. 2020年中国智慧城市发展研究报告(附下载)
  2. 在Excel中世纪秒和时间字符串的转化
  3. 并发编程-24 高并发处理手段之扩容思路 + 缓存思路
  4. UPYUN CDN 高可用架构实践
  5. You can't specify target table 'tablename' for update in FROM clause的解决方法
  6. 生产者消费者_Kafka之生产者/消费者
  7. 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
  8. Android中的USB中的UsbAccessory和UsbDevice的区别
  9. 【英宝通Unity4.0公开课学习 】(六)76讲到90讲
  10. 12.1-12.5 LNMP架构介绍 , MySQL安装 , PHP安装, Nginx介绍
  11. ASP.NET-动软代码生成器的使用
  12. 介入治疗在胰腺癌的作用
  13. 电脑图标出现蓝色问号解决方法
  14. UVA 12307 Smallest Enclosing Rectangle
  15. 【笔记】SSH服务:基本概述、相关命令“ssh、scp、sftp”、验证方式、场景实践、安全优化
  16. REW声学测试(四):REW的测试原理
  17. 猫叫狗叫java_狗叫猫叫动物叫声手机版|狗叫猫叫动物叫声安卓版下载 v1.1 - 跑跑车安卓网...
  18. C++实训练习册(C++之基础语法入门练习题)
  19. Spring Data JPA分页查询
  20. 人眼到底等于多少像素

热门文章

  1. 下一次工业革命:机器人如何帮助人类实现智能化变革
  2. GitChat 携手「异步社区」送大礼
  3. Opencl编程的标准开发流程
  4. 钟汉良日记:什么副业最好?可以持续带来复利效应的技能,写作!
  5. TokenGazer深度研究 | Cosmos:Staking带来投资策略多样化,代币权重集中问题凸显...
  6. 冻结窗口怎么冻结两行_冻结还是模糊? 捕捉摄影运动的两种方法
  7. 盘点几本软件测试入门必读的经典书籍,让你少走一半弯路
  8. textarea 自适应宽度和高度
  9. 人工智能写恋爱情话,省时不费脑,也用心(带教程)
  10. 篡改referer_HTTP协议头部REFERER用法及伪造