系統時間不夠精確?試試RTC(實時時鐘)
01 什麼是 RTC?
RTC(實時時鐘)是 real time clock的簡稱,是一種計算機時鐘,通常採用積體電路的形式,專門用於計時。自然地,它可以計算秒、分、小時、日、月甚至是年。RTC可以在個人計算機、嵌入式系統和伺服器中找到,並且存在於任何可能需要精確計時的電子裝置中。即使裝置電源關閉,仍能通過電池或獨立於系統的電源供電。
RTC 有哪些好處呢?
- 事實證明,RTC 比其他方法更精確——比如MCU的定時器。
- 它將主系統從時間緊迫的任務中解放出來。
- 它具有較低的功耗。
那麼,如何在我們的OneOS中使用RTC呢,下面我們來一起操作一下吧。
02 工程配置及生成
以下配置均以萬耦一代開發板(STML475)為例,配置硬體 RTC, 並生成工程。
Step 1 使用STM32CUBEMX配置硬體
1.開啟 oneos\projects\xxxxx(project資料夾)\board\CubeMX_Config下 的 CUBE 工程檔案(xxx.ioc);
2.在 CUBE 工程中進行 RTC 配置,如下圖所示,紅色框選中的地方依次選擇RTC、勾選Activate Clock Source,然後點選③的Clock Configuration檢查時鐘選擇,最後點選④的GENARATE CODE 生成程式碼;
確認是否修改時鐘配置,如有修改,則使用CubeMX_Config\Src資料夾中main.c的void SystemClock_Config(void)替換掉同目錄下bsp.c中的SystemClock_Config(void)。
Step 2 使用 Menuconfig 配置工程選項
1.在對應的 oneos\projects\xxxxx(project資料夾) 目錄下開啟OneOS-Cube工具,在命令列輸入 menuconfig 開啟視覺化配置介面;
2.通過[↑]、[↓]按鍵、空格、enter鍵或向右方向鍵選擇 Drivers->RTC 下的Using RTC drivers選項,如下所示:
(Top) → Drivers→ RTC
[*] Using RTC drivers
3.Esc鍵退出menuconfig,注意儲存所修改的設定。
Step 3 使用 Scons 構建工程
在上一步開啟的OneOS-Cube 工具命令列中輸入 scons --ide=mdk5重新構建keil工程。
03 工程編譯及實現
1.開啟對應的 oneos\projects\xxxxx(project資料夾) 目錄下的 project.uvprojx 工程檔案,此時即可在工程中新增相應的應用程式。
2.如下圖所示,在開啟的工程application 資料夾中右鍵選擇Manage Project Items,按圖示新增提供的rtc_test.c檔案(路徑:oneos\drivers\driver_test);
3.編譯並下載工程,執行程式;
4.開啟串列埠工具如xshell等,通訊成功後,即可通過輸入rtc_set_test設定RTC的時間,輸入rtc_get_test可獲取當前的時間;
5.通過修改rtc_test.c中所設定的時間,檢視效果。
6.如不再使用RTC裝置,可再次使用OneOS-Cube工具取消,在Drivers->RTC 下取消Using RTC drivers 的選擇,儲存設定後重新生成工程即可。
串列埠互動記錄如下:
sh />rtc_get_test
Sat Jan 1 00:30:20 2000
sh />
sh />rtc_set_test
Mon Jun 1 09:30:03 2020
sh />
sh />rtc_get_test
Mon Jun 1 09:30:05 2020
sh />
sh />rtc_get_test
Mon Jun 1 09:30:10 2020