RTC简介 实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。 新建工程 本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。 RTC时钟选择为外部低速晶振(LSE),频率为32.768。 在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。 生成报告以及代码,编译程序。 添加应用程序 在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。2 c. Z4 @/ G7 ^+ Q: W" w, N g8 A$ Z
从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。 - /* USER CODE BEGIN PV */
5 G6 K* ]; o C6 \3 e w4 Y - /* Private variables --------*/
3 r4 ]( D- r4 M x/ x - RTC_DateTypeDef sdatestructure;* z; T8 S3 _& T: S$ q
- RTC_TimeTypeDef stimestructure;
, @6 `3 }* v/ T: F# _6 B - /* USER CODE END PV */
复制代码
7 j5 {3 _: ]& L5 W3 f. m
, s! } e7 W: M/ S. L" T$ F 在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。
/ V+ {# b7 K4 t0 | 在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。 - /* USER CODE BEGIN WHILE */1 p2 ^2 S; F& p5 y X
- while (1)
: {7 h4 `0 ~. P - {
1 n" G1 S W7 w8 E! c - /* USER CODE END WHILE */
9 C9 g6 u8 b# h - /* USER CODE BEGIN 3 */& v) `+ \5 U) o7 {4 v
- /* Get the RTC current Time ,must get time first*/
; b" V+ E: K; r# H( Y( i. ~) ~ W - HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
) ?$ L7 s2 c9 l5 T5 N2 X - /* Get the RTC current Date */
; d9 j4 p+ D# c$ p! y M - HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
9 G2 f( ^7 ^! r# B' J9 O# { - /* Display date Format : yy/mm/dd */9 m) Y8 T t( c/ `2 e1 c( [
- printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);( c( N7 @3 q0 F8 A( {) }
- /* Display time Format : hh:mm:ss */
2 o, ^" ~( F7 D+ a - printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);
. J1 K' c, k' [" U" r/ M - printf("\r\n");
% c) y* i# j" L - HAL_Delay(1000);
+ F' u0 {9 c; \# E5 [/ i& ]$ O4 U - }5 ^; `/ a1 V; o8 g) C( c( u" p# d
- /* USER CODE END 3 */
复制代码
& @5 @5 |9 e9 t
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。
7 h3 b1 v1 w6 |! G2 r( b
/ k5 z+ o d0 r! g" Y) j0 D
实验效果 编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。 " B; D$ b7 [5 V. j" }1 Q) j
|