STM32 RTC 时钟简介

发布者:不见南师久最新更新时间:2021-04-29 来源: eefocus关键字:STM32  RTC  时钟简介 手机看文章 扫描二维码
随时随地手机看文章

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


RTC正常工作的一般配置步骤如下:


1)使能电源时钟和备份区域时钟。


要访问RTC和备份区域就必须先使能电源时钟和备份区域时钟。


RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);


2)取消备份区写保护。


要向备份区域写入数据,就要先取消备份区域写保护(写保护在每次硬复位之后被使能),否则是无法向备份区域写入数据的。我们需要用到向备份区域写入一个字节,来标记时钟已经配置过了,这样避免每次复位之后重新配置时钟。取消备份区域写保护的库函数实现方法是:


PWR_BackupAccessCmd(ENABLE);//使能RTC和后备寄存器访问


3)复位备份区域,开启外部低速振荡器。


在取消备份区域写保护之后,我们可以先对这个区域复位,以清除前面的设置,当然这个操作不要每次都执行,因为备份区域的复位将导致之前存在的数据丢失,所以要不要复位,要看情况而定。然后我们使能外部低速振荡器,注意这里一般要先判断RCC_BDCR的LSERDY位来确定低速振荡器已经就绪了才开始下面的操作。


备份区域复位的函数是:


BKP_DeInit();//复位备份区域


开启外部低速振荡器的函数是:


RCC_LSEConfig(RCC_LSE_ON);//开启外部低速振荡器


4)选择RTC时钟,并使能。


这里我们将通过RCC_BDCR的RTCSEL来选择选择外部LSI作为RTC的时钟。然后通过RTCEN位使能RTC时钟。


库函数中,选择RTC时钟的函数是:


RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//选择LSE作为RTC时钟


对于RTC时钟的选择,还有RCC_RTCCLKSource_LSI和RCC_RTCCLKSource_HSE_Div128两个,顾名思义,前者为LSI,后者为HSE的128分频,这在时钟系统章节有讲解过。


使能RTC时钟的函数是:


RCC_RTCCLKCmd(ENABLE);//使能RTC时钟


5)设置RTC的分频,以及配置RTC时钟。


在开启了RTC时钟之后,我们要做的就是设置RTC时钟的分频数,通过RTC_PRLH和RTC_PRLL来设置,然后等待RTC寄存器操作完成,并同步之后,设置秒钟中断。然后设置RTC的允许配置位(RTC_CRH的CNF位),设置时间(其实就是设置RTC_CNTH和RTC_CNTL两个寄存器)。下面我们一一这些步骤用到的库函数:


在进行RTC配置之前首先要打开允许配置位(CNF),库函数是:


RTC_EnterConfigMode();///允许配置


在配置完成之后,千万别忘记更新配置同时退出配置模式,函数是:


RTC_ExitConfigMode();//退出配置模式,更新配置


设置RTC时钟分频数,库函数是:


voidRTC_SetPrescaler(uint32_tPrescalerValue);


然后是设置秒中断允许,RTC使能中断的函数是:


voidRTC_ITConfig(uint16_tRTC_IT,FunctionalStateNewState);


这个函数的第一个参数是设置秒中断类型,这些通过宏定义定义的。对于使能秒中断方法是:


RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能RTC秒中断


下一步便是设置时间了,设置时间实际上就是设置RTC的计数值,时间与计数值之间是需要换算的。库函数中设置RTC计数值的方法是:


voidRTC_SetCounter(uint32_tCounterValue)最后在配置完成之后


通过这个函数直接设置RTC计数值。


6)更新配置,设置RTC中断分组。


在设置完时钟之后,我们将配置更新同时退出配置模式,这里还是通过RTC_CRH的CNF来实现。库函数的方法是:


RTC_ExitConfigMode();//退出配置模式,更新配置


在退出配置模式更新配置之后我们在备份区域BKP_DR1中写入0X5050代表我们已经初始化过时钟了,下次开机(或复位)的时候,先读取BKP_DR1的值,然后判断是否是0X5050来决定是不是要配置。接着我们配置RTC的秒钟中断,并进行分组。


这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的。比如我们要往BKP_DR1写入0x5050,方法是:


BKP_WriteBackupRegister(BKP_DR1,0X5050);


同时,有写便有读,读取备份区域指定寄存器的用户数据的函数是:


uint16_tBKP_ReadBackupRegister(uint16_tBKP_DR);


这个函数就很好理解了,这里不做过多讲解


7)编写中断服务函数。


最后,我们要编写中断服务函数,在秒钟中断产生的时候,读取当前的时间值,并显示到TFTLCD模块上。


通过以上几个步骤,我们就完成了对RTC的配置,并通过秒钟中断来更新时间。


关键字:STM32  RTC  时钟简介 引用地址:STM32 RTC 时钟简介

上一篇:基于STM32的自动量程电压表的设计方案
下一篇:STM32中断优先级和开关总中断开关

推荐阅读最新更新时间:2024-11-13 09:41

STM32 USART中断小程序
尽管网上的例程一堆堆,但还是花了好几天时间才跑通了一个USART通过中断方式实现的小程序。相当无比地郁闷啊。记录一下遇到的问题: 1. 配置RCC的时机 在主程序中通过查询方式收发数据时,结果并不稳定。对比了ST提供的例程中的设置,将RCC配置提到了所有配置的最前面后,功能实现。结论:应先配置RCC,再初始化其他外设。 2. RAM下调试遇到的问题 在上述查询方式的基础上,增加对NVIC的配置,USART的中断设置,以及ISR中的处理过程,放到RAM下调试,无法进入ISR。有以下两个测试结果:1)在主程序while中调用USART_GetITStatus,判断USART中断事件是否发生及中断是否使能,结果为SET。2)
[单片机]
STM32学习之:NVIC的初步理解
1 对NVIC的理解 CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断,若是相同,则按硬件排列顺序发生。若是有一个亚优先级正在执行中断,同一级别的其它亚优先级发生时,则先挂起,等此中断执行完再执行! 从库函数中找到优先级分组模式: #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /* 0 bits for pre-emption priority 4 bits for subpriority */
[单片机]
STM32】窗口看门狗概述、寄存器、库函数(WWDG一般步骤)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第18章 窗口看门狗 窗口看门狗概述 窗口看门狗的定义 窗口看门狗之所以称为窗口,就是因为其喂狗时间是一个有上下限的范围内(窗口),可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F)。也就是说:喂狗的时间不能过早,也不能过晚。 而对比与独立看门狗,独立看门狗限制喂狗时间在0-x内,x由相关RLR寄存器决定。 窗口看门狗的必要性: 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了; 如果使用窗口
[单片机]
【<font color='red'>STM32</font>】窗口看门狗概述、寄存器、库函数(WWDG一般步骤)
STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程
硬件:机智云STM32平台V2.1 软件:cube MX+keil MDK-ARM V5 机智云的STM32开发平台小巧玲珑,用起来也顺手,所以就将正点原子的战舰开发板扔一旁吃灰了。目前刚开始学习,用到的硬件资源也不多,后续做相关实验时说不准又捡起来了。 1.简单介绍一下cube MX的使用 下载安装的过程就不在赘述,直接开始使用。 双击打开cube MX,点击新建工程 由于本底板的MCU型号是:STM32F103C8T6,所以按照下图来选择就对了。这个根据当时自己使用的MCU型号来对应选择就好了。 接着就是资源配置界面了, 1、先配置RCC的时钟源为外部高速时钟 2、配置时钟系统,其实很简单,
[单片机]
STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程
不建议使用STM32F1的RTC实现日历功能
有读者问:如何在STM32F1上实现日历功能? 一、关于RTC RTC:Real TimeClock,实时时钟,记录当前时间的计算机时钟。 RTC 不仅应用于个人计算机、服务器和嵌入式系统,几乎所有需要准确计时的电子设备也都会使用。 支持 RTC 的微控制器可用于精密计时器、闹钟、手表、小型电子记事薄以及其它多种设备。 在实际项目中,运用时间戳的地方很多,比如:存储数据、日志消息、系统故障等。 二、STM32的RTC 在所有STM32处理器中,都集成了一个RTC模块,是一个独立的 BCD 定时器 / 计数器。 但是,在STM32F1系列中,RTC模块的功能相对比较简单(也许是最前推出的原因)。其中,一个重要的功能,日历功能
[单片机]
不建议使用STM32F1的<font color='red'>RTC</font>实现日历功能
STM32串口+DMA使用1
STM32有5个串口资源(USART1,USART2,USART3及UART4,UART5)。其中3个USART(通用同步/异步收/发器universalsynchronous asynchronous receiver and transmitter);2个UART(通用异步收/发器universalasynchronous receiver and transmitter);至于USART与UART的区别,如果只是拿来做串口用,没什么区别,在车载项目里,我们拿来做串口用,USART与UART在编程上并没有区别。 其中USART1,USART2,USART3,UART4支持DMA方式,UART5不支持DMA。(详
[单片机]
使用FlyMCU对STM32串口下载程序出错的解决方法
1,问题:使用FlyMCU对STM32进行串口下载程序时出现0KB出错,如下图所示: 2,分析:出现上述所示错误是因为勾选 了 编程到FLASH是写选项字节 3,解决方法: (1)安装 STM32 ST-LINK Utility 软件(百度 搜索 “STM32 ST-LINK Utility” 即可获得下载) (2)安装软件 (3)使用管理员身份运行该软件 (4)操作: 步骤如下:Target -- Connect -- Option Bytes... 进入Option Bytes后 直接点击Apply (5)使用STM32 ST-LINK Utility下载自己提供的 xxx.hex 文件 步骤如下:File -
[单片机]
使用FlyMCU对<font color='red'>STM32</font>串口下载程序出错的解决方法
STM32之PVD电压检测
如果VDD或者VDDA电压高于或低于PVD设定阈值都产生中断,表现为每中断一次,LED1就亮变灭或者灭变亮。 /******************************************************************************** * @file PWR/PVD/main.c * @author MCD Application Team * @version V3.4.0 * @date 10/15/2010 * @brief Main program body. *********************************************
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved