瑞萨单片机论坛
直播中

华仔stm32

4年用户 3157经验值
擅长:嵌入式技术
私信 关注
[经验]

【瑞萨RA2L1入门学习】RTC时钟试验

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

image.png

2、在属性里面配置如下:
image.png

3、设置堆大小
image.png

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行进简单的设置就可以完成。

更多回帖

发帖
×
20
完善资料,
赚取积分