一、硬件部分
RTC (Real-Time Clock)是内部实时时钟,基本不涉及外部管脚,可以提供精确的实时时间,用于产生年、月、日、时、分、秒等信息。实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。
由于信息输出的需要,还是采用串口输出的方式,打印信息,因此用到了usart7作为调试信息的输出,涉及的管脚为P613和P614.
二、软件部分
1、新建项目
基于开发板进行新建项目,选择模板工程,生成后直接打开项目
2、FSP配置
新项目在使用RA Smart Configurator时,需要指定安装路径。然后打开RA Smart Configurator,在new stack中增加RTC
检查一下g_usart7的管脚P613和P614,然后点击右上角的Generate Project Content,生成配置。比较遗憾的是,每次RA Smart Configurator生成后,都需要手动复制board_cfg.h头文件。
3、RT Thread Settungs中设置
打开RT-Thread Setting,配置RTC相关的信息,图形界面中右键配置RTC,然后在组件选项中使能RTC
在硬件选项中同样使能RTC
Ctrl-S保存后更新配置信息
4、代码说明
在RT-Thread网站中,可以找到RTC相关的示例
适当修改后,新建rtc.c文件,放在src目录下
#include <rtthread.h>
#include <rtdevice.h>
#include <time.h>
static int set_datetime(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
//time_t now;
if(argc != 6) {
rt_kprintf("Usage:set_datetime 2022 06 18 21 57 00 \r\n");
}
/* 设置日期 */
ret = set_date(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
if (ret != RT_EOK)
{
rt_kprintf("set RTC date failed\n");
return ret;
}
/* 设置时间 */
ret = set_time(atoi(argv[4]), atoi(argv[5]), atoi(argv[6]));
if (ret != RT_EOK)
{
rt_kprintf("set RTC time failed\n");
return ret;
}
/* 延时3秒 */
//rt_thread_mdelay(3000);
/* 获取时间 */
//now = time(RT_NULL);
//rt_kprintf("%s\n", ctime(&now));
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(set_datetime, rtc sample);
用于设定初始时间,使用方式为命令行输入set_datetime 2022 06 18 21 57 00
为了及时更新时间,在hal_entry.c中修改hal_entry函数
void hal_entry(void)
{
time_t now;
rt_kprintf("\nHello RT-Thread!\n");
while (1)
{
rt_pin_write(LED3_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED3_PIN, PIN_LOW);
rt_thread_mdelay(500);
/* 获取时间 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
}
}
编译后下载至开发板,开启串口软件sscom
5、演示效果
复位开发板后在sscom中显示信息
设置初始时间后,每间隔1秒打印当前时间
三、心得体会
对于RTT支持的设备来说,实现功能确实非常方便,甚至可以不写代码实现,非常方便和快捷,但是对于不直接支持的设备,还是比较麻烦的。RTC显然属于支持的设备,因此非常方便。
期待RTT加入更多的硬件支持和更多的设备支持!