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时间和日期读写操作函数。' x. `' k- q7 v \2 h. ]
从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。 - /* USER CODE BEGIN PV */, w8 I5 y( \- i* H: m/ W
- /* Private variables --------*/
" d0 W6 f. i m6 h1 B. { - RTC_DateTypeDef sdatestructure;
: g- K* h" Q6 H, j - RTC_TimeTypeDef stimestructure;
) z4 d# k. [3 b Q - /* USER CODE END PV */
复制代码 % ^# L5 R! m$ ?" g5 }
1 E1 H+ E% |3 r# A* ^' J7 L 在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。
- }2 D1 x3 _; B7 { 在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。 - /* USER CODE BEGIN WHILE */
$ t! C) _% Z7 |% d5 a - while (1)/ I4 ~8 h* f2 x2 B- M
- {, P' o1 [4 x. N* t/ N/ }6 G
- /* USER CODE END WHILE */5 }+ x1 Z1 `8 v6 C6 m* e
- /* USER CODE BEGIN 3 */
' h( ^5 k: n: L4 x1 a3 B - /* Get the RTC current Time ,must get time first*/
; O- ]/ E4 W9 ? - HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
8 O: M# g# K4 @( A - /* Get the RTC current Date */6 F3 E0 x: Y: E: ^4 J
- HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN); k2 r! b+ L: |. e& D
- /* Display date Format : yy/mm/dd */# c/ P8 u. E9 o% [- S4 {
- printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
4 O2 K0 |9 M! i: } - /* Display time Format : hh:mm:ss */
, q3 S" v O6 n% s8 |! C - printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);
* Y8 y! q' H1 C1 P - printf("\r\n");
. l) T% g+ T8 f% f: p - HAL_Delay(1000);0 b# r- j1 P1 z9 Z- N) h
- }
; \/ i2 D6 C; v - /* USER CODE END 3 */
复制代码' K* j0 m, F9 r8 K
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。
/ p/ P3 Z% N3 ~0 l
) v6 R' C% M7 l) D3 {/ R# X# }/ z
实验效果 编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。
- p) y% |3 z3 Z2 T2 ^$ w2 w8 y |