stm32-OLED屏+RTC实现简易实时时钟(下篇)

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

一、RTC简介

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

RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒
后,RTC的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,
以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)
写保护。

二、RTC主要特性

挑了主要的特性:

1、32位的可编程计数器,可用于较长时间段的测量

2个分离的时钟:用于APB1接口的PCLK1和RTC时钟

3、可以选择以下三种RTC的时钟源:
HSE时钟除以128
LSE振荡器时钟
LSI振荡器时钟

4、2个独立的复位类型:
APB1接口由系统复位;
RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位;

5、3个专门的可屏蔽中断:
闹钟中断,用来产生一个软件可编程的闹钟中断。
秒中断,用来产生一个可编程的周期性中断信号(最长可达1秒)。
溢出中断,指示内部可编程计数器溢出并回转为0的状态。

三、功能描述

RTC由两个主要部分组成(参见下图)。第一部分(APB1接口)用来和APB1总线相连。此单元还包
含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线接口。

另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频
模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间。

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

说白了APB1总线的作用是为RTC模块提供通信和数据传输的通道,使得RTC模块能够与其他外设进行数据交换和通信。且在系统复位后需要控制APB1总线上的RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟使能对后备寄存器和RTC的访问

RTC预分频器控制计数频率,RTC_CNT与RTC_ALR值进行对比(和定时器类似)即产生闹钟

四、RTC寄存器描述

1、RTC控制寄存器高位(RTC_CRH)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

中断使能。因为在系统复位之后所有的中断都被屏蔽(即此寄存器的所有位都被置为0),如果我们需要开启相应的中断则给相应的中断位置1(执行此操作的前提是RTC_CRL寄存器的标志位RTOFF=0)即对RTC寄存器的写操作完成。

2、RTC控制寄存器低位(RTC_CRL)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

此寄存器是RTC模块的一些标志位。第 0 位是秒钟标志位,我们在进入闹钟中断的时候,通过判断这位来决定是不是发生了秒钟中断,此位只能通过软件清除。第3位为寄存器同步标志位,结合RTC框图,只有当寄存器同步后,才可以修改RTC_CRH和RTC_CRL的寄存器的值,否则修改的值无效。第4位是配置标志,即要想RTC寄存器写值时必须将此位置1。第5位,就是等待写操作完成,否则写入的值也无效。

所以RTC寄存器的配置过程应该是这样:
1. 查询RTOFF位,直到RTOFF的值变为’1’(判断写操作是否完成)
2. 置CNF值为1,进入配置模式
3. 对一个或多个RTC寄存器进行写操作
4. 清除CNF标志位,退出配置模式
5. 查询RTOFF,直至RTOFF位变为’1’以确认写操作已经完成。

3、RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL)

RTC_PRLH

oled显示时钟程序,stm32,实时音视频,嵌入式硬件oled显示时钟程序,stm32,实时音视频,嵌入式硬件

RTC_PRLL

oled显示时钟程序,stm32,实时音视频,嵌入式硬件这两个寄存器用来配置 RTC 时钟的分频数的,比如我们使用外部 32.768K 的晶振作为时钟的输入频率,那么我们要设置这两个寄存器的值为 32767,以得到一秒钟的计数频率。

4、RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件用户可通过读取RTC_DIV寄存器,以获得预分频计数器的当前值,此寄存器是只读寄存器,其值在RTC_PRL或RTC_CNT寄存器中的值发生改变后,由硬件重新装载。这两个寄存器的作用就是用来获得比秒钟更为准确的时钟,比如可以得到 0.1 秒,或者 0.01 秒等。

5、RTC计数器寄存器 (RTC_CNTH / RTC_CNTL)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件RTC_CNT寄存器用来存放计数器的计数值。没过一秒此寄存器加1,可通过读取该寄存器的值来获得当前的时间。

因为没用到闹钟寄存器这里就不介绍了

五、其它寄存器

备份寄存器

oled显示时钟程序,stm32,实时音视频,嵌入式硬件数据备份寄存器,即使此寄存器断电依然可以保存数据,通过向此寄存器写入数据,当断电之后读取此寄存器的数据进行判断跳过RTC的初始化环节。

2、APB1 外设时钟使能寄存器(RCC_APB1ENR)和电源控制寄存器(PWR_CR)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

oled显示时钟程序,stm32,实时音视频,嵌入式硬件系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操
作。执行以下操作将使能对后备寄存器和RTC的访问:

设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟

设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。

3、备份域控制寄存器 (RCC_BDCR)

oled显示时钟程序,stm32,实时音视频,嵌入式硬件

将LSEON位置1使能外部低速振荡器,判断LSERDY外部LSE是否就绪,最后RTCSEL置为01选择LSE最为RTC的时钟,就完成了对RTC部分对时钟的配置。

在RTC初始化的时候应该将BDRST位置1,清除备份区域

六、主函数代码

int main(void)
 {
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 	LED_Init();			     //LED端口初始化
	OLED_Init();			//初始化OLED      
	RTC_Init();	  			//RTC初始化
  OLED_ShowString(0,0,"RTC Test",12);  
	
  
	OLED_Refresh_Gram();		//更新显示到OLED 
//	t=' ';  
	while(1) 
	{		
		switch(calendar.week)
		{
			case 0:
			OLED_ShowString(0,12,"Sunday",12); 
			break;
			case 1:
			OLED_ShowString(0,12,"Monday",12); 
			break;
			case 2:
			OLED_ShowString(0,12,"Tuesday",12); 
			break;
			case 3:
			OLED_ShowString(0,12,"Wednesday",12); 
			break;
			case 4:
			OLED_ShowString(0,12,"Thursday",12); 
			break;
			case 5:
			OLED_ShowString(0,12,"Friday",12); 
			break;
			case 6:
			OLED_ShowString(0,12,"Saturday",12); 
			break;
			default:
			break ;
		}
	
		OLED_ShowNum(0,24,calendar.hour,2,12);
		OLED_ShowString(12,24,":",12); 
		OLED_ShowNum(18,24,calendar.min,2,12);
		OLED_ShowString(30,24,":",12); 
		OLED_ShowNum(36,24,calendar.sec,2,12);
		
		OLED_ShowNum(0,36,calendar.w_year,4,12);
		OLED_ShowString(24,36,"/",12); 
		OLED_ShowNum(30,36,calendar.w_month,2,12);
		OLED_ShowString(42,36,"/",12); 
		OLED_ShowNum(48,36,calendar.w_date,2,12);
		
		
		OLED_Refresh_Gram();		//更新显示到OLED 
	}	  
	
}

RTC模块是参考原子哥的,其实大家只要把RTC功能框图和RTC相关寄存器搞熟悉之后RTC模块还是不难的。如果有其它问题可以评论或给我留言文章来源地址https://www.toymoban.com/news/detail-800375.html

到了这里,关于stm32-OLED屏+RTC实现简易实时时钟(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32】RTC(实时时钟)

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

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

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

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

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

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

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

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

                                     

    2024年01月20日
    浏览(45)
  • 【STM32学习】实时时钟 —— RTC

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

    2024年02月01日
    浏览(46)
  • STM32基础10--实时时钟(RTC)

     目录 前言 RTC框图 STM32实时时钟电路 功能需要 STM32CubeMx配置RTC 配置RCC 配置RTC 配置时间,闹钟,唤醒 开启中断 设置中断优先级 功能代码实现 STM32Cude生成RTC初始化 自定义触发闹钟次数变量  重写周期唤醒回调函数 重写闹钟中断函数         在做51单片机项目时,如果需

    2023年04月11日
    浏览(37)
  • STM32学习笔记(十二)丨RTC实时时钟

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

    2024年02月16日
    浏览(47)
  • STM32中的RTC实时时钟和配套闹钟设置

    主要初始化函数,以及设置闹钟函数,闹钟中断函数 RTC.c RTC.h main.c

    2024年04月23日
    浏览(43)
  • 【STM32】读写BKP备份寄存器&RTC实时时钟

    目录 BKP BKP简介 BKP基本结构 BKP测试代码 RTC RTC简介 RTC框图 RTC基本结构 硬件电路 RTC操作注意事项 接线图 初始化 使用BKP解决只初始化一次时间  初始化参考代码 RTC设置时间 RTC读取时间 完整代码 MyRTC.c MyRTC.h main.c BKP(Backup Registers)备份寄存器 BKP可用于存储用户应用程序数据

    2024年04月22日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包