系統時間不夠精確?試試RTC(實時時鐘)

語言: CN / TW / HK

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