【新提醒】【瑞萨RA2L1入门学习】+ OLED驱动 - 单片机/MCU论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!
在这篇的基础之上添加RTC时钟驱动。
1、打开项目,添加RTC
点击Stacks->New Stack->Driver->Timers -> RTC Driver on r_rtc

2、在属性里面配置如下:
3、设置堆大小
4、设置最初时间:
rtc_time_t set_time =
{
.tm_sec = 11, /* 秒,范围从 0 到 59 */
.tm_min = 11, /* 分,范围从 0 到 59 */
.tm_hour = 11, /* 小时,范围从 0 到 23*/
.tm_mday = 9, /* 一月中的第几天,范围从 1 到 31*/
.tm_mon = 3, /* 月份,范围从 0 到 11*/
.tm_year = 125, /* 自 1900 起的年数,2021为121*/
// .tm_wday = 5, /* 一周中的第几天,范围从 0 到 6*/
// .tm_yday=0, /* 一年中的第几天,范围从 0 到 365*/
// .tm_isdst=0; /* 夏令时*/
};
5、设置RTC回调函数:
void rtc_callback(rtc_callback_args_t *p_args)
{
/* TODO: add your own code here */
if(p_args->event == RTC_EVENT_PERIODIC_IRQ)
rtc_flag=1;
}
6、在主循环中添加初始化的变量,并初始RTC,设置每秒回调一次获取时间。
err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* R_RTC_CalendarTimeSet must be called at least once to start the RTC */
R_RTC_CalendarTimeSet(&g_rtc0_ctrl, &set_time);
/* Set the periodic interrupt rate to 1 second */
R_RTC_PeriodicIrqRateSet(&g_rtc0_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND);
uint8_t rtc_second= 11; //秒
uint8_t rtc_minute =11; //分
uint8_t rtc_hour =11; //时
uint8_t rtc_day =11; //日
uint8_t rtc_month =11; //月
uint16_t rtc_year =125; //年
uint8_t rtc_week =0; //周
rtc_time_t get_time;
7、如果有时钟标志置位,测读取时间到结构,并且显示到OLED屏上。
if(rtc_flag)
{
R_RTC_CalendarTimeGet(&g_rtc0_ctrl, &get_time);//获取RTC计数时间
rtc_flag=0;
rtc_second=get_time.tm_sec;//秒
rtc_minute=get_time.tm_min;//分
rtc_hour=get_time.tm_hour;//时
rtc_day=get_time.tm_mday;//日
rtc_month=get_time.tm_mon;//月
rtc_year=get_time.tm_year; //年
rtc_week=get_time.tm_wday;//周
}
OLED_ShowNum(8,5,rtc_year+1900,4,16);//年
OLED_ShowNum(56,5,rtc_month,2,16);//月
OLED_ShowNum(88,5,rtc_day,2,16);//日
OLED_ShowNum(32,3,rtc_hour,2,16);//时
OLED_ShowNum(56,3,rtc_minute,2,16);//分
OLED_ShowNum(80,3,rtc_second,2,16);//秒
到此RTC的驱动就结速了,通过FSP行进简单的设置就可以完成。
更多回帖