STM32F103单片机RTC实时时钟的使用
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:
- 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
- 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
下面直接通过代码来演示如何操作RTC。
static void RTC_NVIC_Config( void )
{NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init( &NVIC_InitStructure );
}//实时时钟配置
//初始化RTC时钟,同时检测时钟是否工作正常
//BKP->DR1用于保存是否第一次配置的设置
//返回0:正常
//其他:错误代码
u8 RTC_Init( void )
{u8 temp = 0;RCC_APB1PeriphClockCmd( RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE );PWR_BackupAccessCmd( ENABLE ); //使能后备寄存器访问if( BKP_ReadBackupRegister( BKP_DR1 ) != 0x5055 ) //检查是不是第一次配置时钟{BKP_DeInit(); //复位备份区域RCC_LSEConfig( RCC_LSE_ON ); //设置外部低速晶振(LSE),使用外设低速晶振//检查指定的RCC标志位设置与否,等待低速晶振就绪while( RCC_GetFlagStatus( RCC_FLAG_LSERDY ) == RESET && temp < 250 ){temp++;delay_ms( 10 );}if( temp >= 250 )return 1; //初始化时钟失败,晶振有问题RCC_RTCCLKConfig( RCC_RTCCLKSource_LSE ); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟RCC_RTCCLKCmd( ENABLE ); //使能RTC时钟RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成RTC_WaitForSynchro(); //等待RTC寄存器同步RTC_ITConfig( RTC_IT_SEC, ENABLE ); //使能RTC秒中断RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成RTC_EnterConfigMode(); // 允许配置RTC_SetPrescaler( 32767 ); //设置RTC预分频的值RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_ExitConfigMode(); //退出配置模式BKP_WriteBackupRegister( BKP_DR1, 0x5055 ); //向指定的后备寄存器中写入用户程序数据}else //系统继续计时{RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成RTC_ITConfig( RTC_IT_SEC | RTC_IT_ALR, ENABLE ); //使能RTC秒中断、闹钟中断RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成}RTC_NVIC_Config(); //RCT中断分组设置 return 0; //OK
}//RTC时钟中断
//每秒钟触发一次
void RTC_IRQHandler( void )
{if( RTC_GetITStatus( RTC_IT_SEC ) != RESET ) //秒钟中断{ printf( "RTC INT!\r\n" ); }//RTC_ClearITPendingBit(RTC_IT_SEC | RTC_IT_OW);RTC_ClearITPendingBit( RTC_IT_SEC | RTC_IT_ALR );RTC_WaitForLastTask();
}
在设置RTC时首先要判断一下RTC是否已经初始化过了,因为一般使用RTC时都会有电池供电,RTC的时候只需要设置一次就行。当系统关机后,只要电池有电,RTC就能正常工作,所以不需要每次开机都初始化一次时间,当没有初始化时初始化一次,初始化之后,以后开机就不需要再初始化了。为了标记当前设备是否已经初始化了,手动的给备份寄存器中写入特定的值。每次单片机启动后就会读取一次备份寄存器的值,当备份寄存器中的值不是写入的特定值,就说明当前设备还没有被初始化过,需要初始化一次。如果备份寄存器中的值是写入的特殊值,就说明当前设备已经被初始化过了,不需要再初始化了。
在初始化的时候,开启RTC的秒中断,这样RTC每一秒就会中断一次,在中断函数中通过串口打印数据。当程序运行后在串口工具中就可以看到每隔1秒,就会打印一个字符串。
STM32F103单片机RTC实时时钟的使用相关推荐
- (实验15)单片机,STM32F4学习笔记,代码讲解【RTC实时时钟实验】【正点原子】【原创】
文章目录 其它文章链接,独家吐血整理 实验现象 主程序 RTC初始化程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] ...
- stm32零星笔记(一)——sysTick滴答计时器、RTC实时时钟
目录 什么是sysTick.RTC 关于时钟树 功能 延时 阻塞延时 非阻塞延时的一种近似实现 秒中断 日历与时间 RTC(Real Time Clock,实时时钟) 日期掉电保持 什么是sysTic ...
- stm32f4 RTC实时时钟解析
RTC是什么–简介 RTC,英文全称:Real-time clock,中文名称:实时时钟,是指可以像时钟一様输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片.实时时钟芯片是日常生活中应用最 ...
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...
- 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc
基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...
- RTC实时时钟(学习笔记)
RTC实时时钟特征与原理 RTC(Real Time Clock):实时时钟. RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可 ...
- 十九、RTC实时时钟
一..RTC实时时钟工作框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连.此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作.APB1 接口 ...
- STM32——RTC实时时钟原理+BKP寄存器原理
一.RTC实时时钟特征与原理 1.RTC(Real Time Clock):实时时钟 2.RTC是个独立的BCD定时器/计数器.RTC提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性 ...
- STM32之RTC实时时钟
RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...
最新文章
- keras 的 example 文件 imdb_fasttext.py 解析
- Vimium - 让Chrome高效工作的神器
- AtCoder AGC034F RNG and XOR (概率期望、FWT)
- php生成gz文件,如何使用PHP创建.gz文件?
- CodeForces 1058C C. Vasya and Golden Ticket
- 如何阻止YouTube在iOS,Android和Web上自动播放视频
- java单车吧_暑假一个月,撸个共享单车后台
- javascript中setInterval,setTimeout的区别跟用法
- 安装操作系统的过程图解
- 测试的第二重境界:站在Bug之上
- 2022-2028全球与中国质量管理体系软件市场现状及未来发展趋势
- 高级系统架构师 考试经验分享
- iOS小技能:iOS15适配导航条主题: 背景颜色、标题颜色
- 学习和使用Oracle的基本Sql语句
- Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.2.RELEASE:repackage (de
- Java——Collections
- 易安卓读取HTML,易安卓(E4A)怎么保存设置?
- HTML5 地理位置定位(HTML5 Geolocation)
- Android 使用MediaProjection+ImageReader捕捉屏幕画面
- HDU-5976 Detachment