1.RTC簡介
實時時鍾 (RTC) 是一個獨立的 BCD 定時器/計數器。 RTC 提供具有可編程鬧鍾中斷功能的日歷時鍾 /日歷。RTC 還包含具有中斷功能的周期性可編程喚醒標志。
兩個 32 位寄存器包含二進碼十進數格式 (BCD) 的秒、分鍾、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的亞秒值。系統可以自動將月份的天數補償為 28、29(閏年)、30 和 31 天。
只要芯片的備用電源一直供電,RTC上的時間會一直走。
2.新建工程
本章程序在串口printf工程的基礎上修改,復制串口printf的工程,修改文件夾名。點擊STM32F746I.ioc打開STM32cubeMX的工程文件重新配置。RTC選擇內部喚醒開啟RTC。為晶振管腳。
開啟外部低速晶振,PC14,PC15配置
RTC時鍾選擇為外部低速晶振(LSE),頻率為32.768。
在RTC配置中,設置時間和日期,其他為默認設置。(此處設置時間為2016/04/16 16:25:49)
生成報告以及代碼,編譯程序。
3.添加應用程序
在rtc.c文件中可以看到ADC初始化函數。在stm32f7xx_hal_rtc.h頭文件中可以看到rtc時間和日期讀寫操作函數。
從操作函數中可以看到,時間和日期是以結構體的形式讀寫的。所以在main.c文件前面申明兩個結構體變量存儲讀取的時間和日期數據。
3 |
RTC_DateTypeDef sdatestructure; |
4 |
RTC_TimeTypeDef stimestructure; |
在stm32f7xx_hal_rtc.h頭文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef這兩個結構體的成員變量。
24 |
uint32_t DayLightSaving; |
28 |
uint32_t StoreOperation; |
在while循環中添加應用程序,讀取當前的時間和日期,並通過串口發送到電腦上顯示。
08 |
HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN); |
10 |
HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN); |
13 |
printf( "%02d/%02d/%02d\r\n" ,2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure. Date ); |
15 |
printf( "%02d:%02d:%02d\r\n" ,stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds); |
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()讀取時間和日期,並保存到結構體變量中,然后通過串口輸出讀取的時間和日期。注意:要先讀取時間再讀取日期,如果先讀取日期在讀取時間會導致讀取的時間不准確,一直都是原來設置的時間。
編譯程序並下載到開發板。打開串口調試助手。設置波特率為115200。串口助手上會顯示RTC的時間日期。
|