Cube

开启外设

配置为LSE,使用外部时钟源,掉电仍计时
Kconfig
menuconfig BSP_USING_ONCHIP_RTCbool "Enable RTC"select RT_USING_RTCselect RT_USING_LIBCdefault nif BSP_USING_ONCHIP_RTCchoiceprompt "Select clock source"default BSP_RTC_USING_LSEconfig BSP_RTC_USING_LSEbool "RTC USING LSE"config BSP_RTC_USING_LSIbool "RTC USING LSI"endchoiceendif
在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);

