【摘要】:在初始化时,需对RTC和数码管部分进行初始化,其中数码管部分初始化在本章的8.4节有详述,此处不再赘述。开启LSE的库函数如下:同时,选择RTC时钟源及使能时钟函数如下:初始化RTC,设置RTC的分频和配置参数。第2个日期初始化参数结构体RTC_DateTypeDef的定义如下:这4个参数分别用来设置日期的星期、月份、日期、年份。2.读取RTC信息并显示过程RTC模块初始化完成后,在需要使用时直接调用固件函数获取RTC模块当前日期和时间即可。
本实例读取系统时间并在数码管上显示当前的分钟和秒钟数。在初始化时,需对RTC和数码管部分进行初始化,其中数码管部分初始化在本章的8.4节有详述,此处不再赘述。例程中,初始化部分主要包括RTC初始化自定义函数RTC_Start(因固件库中有RTC_Init,故改名)、数码管初始化自定义函数SEG_Init和延时初始化自定义函数Delay_Init 3个自定义函数;在while循环中使用库函数RTC_GetTime读取RTC时间,再使用自定义函数SEG_Display将信息在数码管上显示。
1.RTC时钟初始化过程
RTC时钟初始化配置分为5个步骤,具体如下:
(1)使能电源时钟,并使能RTC及RTC后备寄存器写访问。
访问RTC和RTC备份区域就必须先使能电源时钟,然后使能RTC即后备区域访问。电源时钟使能通过RCC_APB1ENR寄存器来设置,RTC及RTC备份寄存器的写访问通过PWR_CR寄存器的DBP位设置。库函数设置方法如下:
(2)开启外部低速振荡器,选择RTC并使能。
这个步骤只需要在RTC初始化的时候执行一次即可,不需要每次上电都执行,这些操作都是通过RCC_BDCR寄存器来实现的。开启LSE的库函数如下:
同时,选择RTC时钟源及使能时钟函数如下:
(3)初始化RTC,设置RTC的分频和配置参数。
在库函数中,初始化RTC是通过函数RTC_Init实现的:
其中,RTC初始化参数结构体RTC_InitTypeDef定义如下:
结构体一共只有3个成员变量,功能如下:参数RTC_HourFormat用来设置RTC的时间格式,也就是我们前面寄存器讲解的设置CR寄存器的FMT位。如果设置为24小时格式,参数值可选择RTC_HourFormat_24;如果设置为12小时格式,则参数值可以选择RTC_HourFormat_12。参数RTC_AsynchPrediv用来设置RTC的异步预分频系数,即设置RTC_PRER寄存器的PREDIV_A相关位。同时,因为异步预分频系数是7位,所以最大值为0x7F,不能超过这个值。参数RTC_SynchPrediv用来设置RTC的同步预分频系数,即设置RTC_PRER寄存器的PREDIV_S相关位。同时,因为同步预分频系数也是15位,所以最大值为0x7FFF,不能超过这个值。
关于RTC_Init函数这里需要说明的是,在设置RTC相关参数之前,会先取消RTC写保护,这个操作通过向寄存器RTC_WPR写入0xCA和0x53两个数据实现。所以,RTC_Init函数体开头会有两行代码用来取消RTC写保护,代码如下:
在取消写保护之后,要对RTC_PRER、RTC_TR和RTC_DR等寄存器进行写操作,还必须先进入RTC初始化模式,库函数中进入初始化模式的函数如下:
进入初始化模式之后,RTC_Init函数才可以去设置RTC->CR及RTC->PRER寄存器的值。在设置完值之后,还要退出初始化模式,函数如下:
最后开启RTC写保护,向RTC_WPR寄存器写入值0xFF即可。(www.chuimin.cn)
(4)设置RTC的时间信息。
库函数中设置RTC时间的函数结构如下:
实际上,RTC_SetTime函数用来设置时间寄存器RTC_TR的相关位的值。该函数的第一个参数RTC_Format用来设置输入的时间格式为BIN格式还是BCD格式,可选值为RTC_Format_BIN和RTC_Format_BCD。因为RTC_DR的数据必须是BCD格式,所以如果设置为RTC_Format_BIN,那么在函数体内部会调用函数RTC_ByteToBcd2将参数转换为BCD格式。
第2个初始化参数结构体RTC_TimeTypeDef的定义如下:
这4个参数分别用来设置RTC时间参数的小时、分钟、秒钟及AM/PM符号。
(5)设置RTC的日期信息。
库函数中设置RTC的日期函数结构如下:
实际上,RTC_SetDate设置日期函数用来设置日期寄存器RTC_DR的相关位的值。函数的第1个参数RTC_Format与函数RTC_SetTime的第1个入口参数是一样的,用来设置输入日期格式。第2个日期初始化参数结构体RTC_DateTypeDef的定义如下:
这4个参数分别用来设置日期的星期、月份、日期、年份。
需要说明的是,设置时间和日期的步骤不是每次启动都需要执行的,通常只在第一次使用。因此,在程序设计中可以设定一个标志位来确定是否需要进行设置时间和日期。
2.读取RTC信息并显示过程
RTC模块初始化完成后,在需要使用时直接调用固件函数获取RTC模块当前日期和时间即可。其中,获取当前RTC时间的函数如下:
获取当前RTC日期的函数如下:
这两个函数非常简单,实质是先读取RTC_TR寄存器和RTC_DR寄存器的时间和日期的值,然后将值存放到相应的结构体中。
相关推荐