Cube
开启外设
配置为LSE,使用外部时钟源,掉电仍计时
Kconfig
menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC"
select RT_USING_RTC
select RT_USING_LIBC
default n
if BSP_USING_ONCHIP_RTC
choice
prompt "Select clock source"
default BSP_RTC_USING_LSE
config BSP_RTC_USING_LSE
bool "RTC USING LSE"
config BSP_RTC_USING_LSI
bool "RTC USING LSI"
endchoice
endif
在board文件夹下的Kconfig文件添加代码段
即在Env工具中添加片上外设配置项
Env
开启RTC
选择LSE
scons --target=mdk5
MDK
自动生成驱动文件即配置成功
接口函数
设置日期
通过如下函数设置 RTC 设备当前日期值:
rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day)
参数 | 描述 |
---|---|
year | 待设置生效的年份 |
month | 待设置生效的月份 |
day | 待设置生效的日 |
返回 | —— |
RT_EOK | 设置成功 |
-RT_ERROR | 失败,没有找到 rtc 设备 |
其他错误码 | 失败 |
设置时间
通过如下函数设置 RTC 设备当前时间值:
rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second)
参数 | 描述 |
---|---|
hour | 待设置生效的时 |
minute | 待设置生效的分 |
second | 待设置生效的秒 |
返回 | —— |
RT_EOK | 设置成功 |
-RT_ERROR | 失败,没有找到 rtc 设备 |
其他错误码 | 失败 |
获取当前时间
使用到 C 标准库中的时间 API 获取时间:
time_t time(time_t *t)
参数 | 描述 |
---|---|
t | 时间数据指针 |
返回 | —— |
当前时间值 |
使用示例如下所示:
time_t now; /* 保存获取的当前时间值 */
/* 获取时间 */
now = time(RT_NULL);
/* 打印输出时间信息 */
rt_kprintf("%s\n", ctime(&now));
上机实验
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
rt_err_t ret = RT_EOK;
int main(void)
{
/* 设置日期 */
ret = set_date(2020, 2, 29);
if (ret != RT_EOK)
{
rt_kprintf("set RTC date failed\n");
return ret;
}
/* 设置时间 */
ret = set_time(23, 27, 00);
if (ret != RT_EOK)
{
rt_kprintf("set RTC time failed\n");
return ret;
}
}
static int get_time(int argc, char *argv[])
{
time_t now;
/* 获取时间 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(get_time, rtc sample);