系统时间不够精确?试试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