加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 准备工作
    • e2 studio配置RTC模块
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

瑞萨RA8系列教程 | RA8基于e2s实现RTC实时时钟功能

12/02 12:10
676
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

微信公众号 | strongerHuang

RTC:Real Time Clock,实时时钟

以前做项目要用时钟,都是外挂一个时钟芯片,随着需求的增长和技术的发展,很多MCU内部都集成了RTC(实时时钟)这个模块。

本文结合e2 studio开发环境、RA8D1单片机给大家描述RTC这个模块的使用方法。

准备工作

1、下载并安装e2 studio工具

下载地址,推荐瑞萨官方的GitHub:https://github.com/renesas/fsp/releases

我们这里基于Windows环境,安装exe文件,基本根据提示信息一路next即可。这里不再详述,推荐参看文章:瑞萨RA8系列教程 | 瑞萨 RA8 开发环境搭建2、准备RA8D1开发板我们这里以瑞萨RA8D1单片机为例(当然,其实RA系列单片机也类似):

e2 studio配置RTC模块

本文基于e2 studio开发环境、RA8D1单片机,实现日期和时间的功能。

1、创建工程

我们会用到串口打印输出,这里基于之前分享的UART串口工程进行拓展,前面的过程请参看文章:瑞萨RA8系列教程 | 基于e2s实现RA8串口输出配置

这里说几个重要的地方,首先是UART串口时钟,需要选择SCICLK时钟:


再次,配置UART对应的信息:

还有设置,菜单:项目 -> C/C++ Project Settings:

2、配置RTC模块

为了方便大家理解,我们先以最基础的方式配置RTC,然后,间隔1秒读一次RTC并通过UART串口打印输出。

配置RTC:Pins选项下,选择RTC,配置模式

新建RTC模块:我们添加RTC模块并配置相关属性(配置常用参数,其实默认即可)。

3、添加源代码

我们这里简单添加一个RTC模块(源代码文件),如图:

bsp_rtct.c源代码:

#include "bsp_rtc.h"
void RTC_Init(void){   //设置初始化日期和时间   rtc_time_t set_time =   { .tm_sec = RTC_SEC_SET,  //秒     .tm_min = RTC_MIN_SET,  //分     .tm_hour = RTC_HOUR_SET,  //小时     .tm_mday = RTC_MDAY_SET,  //日(一个月中)     .tm_wday = RTC_WDAY_SET,   //星期     .tm_mon = RTC_MON_SET - 1 ,   //月份     .tm_year = RTC_YEAR_SET-1900, //年份   };   /*打开RTC*/   R_RTC_Open (g_rtc.p_ctrl, g_rtc.p_cfg);   /*设置时钟源*/   R_RTC_ClockSourceSet (g_rtc.p_ctrl);   /* 设置日期时间 */   R_RTC_CalendarTimeSet (g_rtc.p_ctrl, &set_time);}

bsp_rtc.h头代码:

#ifndef BSP_RTC_H#define BSP_RTC_H
#include "hal_data.h"
/**********日期宏定义**********/#define RTC_YEAR_SET 2024       //年#define RTC_MON_SET 10           //月#define RTC_MDAY_SET 31          //日/*换算星期*/#define RTC_WDAY_SET (RTC_YEAR_SET-2000                   + ((RTC_YEAR_SET-2000)/4)                   - 35 + (26*(RTC_MON_SET+1))/10                   + RTC_MDAY_SET -1 )%7
/**********时间宏定义**********/#define RTC_HOUR_SET 23          //时#define RTC_MIN_SET 59           //分#define RTC_SEC_SET 50           //秒
void RTC_Init(void);
#endif

这里我们只简单的配置(初始化)了日期和时间,然后在应用程序中,间隔1秒读取并打印输出。

void hal_entry(void){    static rtc_time_t get_time;
    Debug_UART3_Init(); // SCI3 UART 调试串口初始化    RTC_Init();         //初始化RTC
    while(1)    {        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_LOW);        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); // 延时500ms
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_HIGH);        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); // 延时500ms
        /*获取当前时间*/       R_RTC_CalendarTimeGet (g_rtc.p_ctrl, &get_time);
       /*打印当前时间*/       printf("RTC:%d-%d-%d-%d:%d:%drn", get_time.tm_year + 1900, get_time.tm_mon + 1, get_time.tm_mday,                get_time.tm_hour, get_time.tm_min, get_time.tm_sec);
    }}

4、演示效果

这里通过间隔1秒主动读取RTC,并打印输出显示,最后效果:

通过以上配置其实你会发现很简单,还有一种通过RTC(1秒)中断打印输出,这样就不需要主动读取了。

方法其实很简单,配置中断:

然后在代码中增加 rtc_callback 这个中断回调函数。

void rtc_callback(rtc_callback_args_t *p_args){      static rtc_time_t get_time;
      switch (p_args->event)      {         /*若是周期中断,则打印日期时间*/         case RTC_EVENT_PERIODIC_IRQ:
            /*获取当前时间*/            R_RTC_CalendarTimeGet (g_rtc.p_ctrl, &get_time);
            /*打印当前时间*/            printf("RTC:%d-%d-%d-%d:%d:%drn", get_time.tm_year + 1900, get_time.tm_mon + 1, get_time.tm_mday,                get_time.tm_hour, get_time.tm_min, get_time.tm_sec);            break;         default:            break;      }}

实现效果一样,这样就可以不需要应用程序主动读取了。

好了,本文就分享到这里,希望对你们有所帮助。

瑞萨电子

瑞萨电子

(RENESAS)于2003年4月1日—由日立制作所半导体部门和三菱电机半导体部门合并成立。RENESAS结合了日立与三菱在半导体领域方面的先进技术和丰富经验,是无线网络、汽车、消费与工业市场设计制造嵌入式半导体的全球领先供应商。创立日期2003年4月1日公司法人董事长&CEO伊藤达业务范围单片机逻辑模拟等的系统LSI、分立半导体元件、SRAM等的存储器开发、设计、制造、销售、服务的提供。集团成员44家公司(日本20家,日本以外24家)年度销售额2006财年(截止至2007年3月):9526亿日元(约83亿美元)从业人员:26000人(全世界20个国家、43家公司)瑞萨科技是世界十大半导体芯片供应商之一,在很多诸如移动通信、汽车电子和PC/AV 等领域获得了全球最高市场份额。瑞萨集成电路设计(北京)有限公司苏州分公司(RDB-SU)是瑞萨科技全资子公司,2004年1月成立以来,现已拥有150多名优秀工程师,承担着家电和汽车电子领域MCU的一系列设计工作,并在2006年4月开始开发面向中国市场的MCU。

(RENESAS)于2003年4月1日—由日立制作所半导体部门和三菱电机半导体部门合并成立。RENESAS结合了日立与三菱在半导体领域方面的先进技术和丰富经验,是无线网络、汽车、消费与工业市场设计制造嵌入式半导体的全球领先供应商。创立日期2003年4月1日公司法人董事长&CEO伊藤达业务范围单片机逻辑模拟等的系统LSI、分立半导体元件、SRAM等的存储器开发、设计、制造、销售、服务的提供。集团成员44家公司(日本20家,日本以外24家)年度销售额2006财年(截止至2007年3月):9526亿日元(约83亿美元)从业人员:26000人(全世界20个国家、43家公司)瑞萨科技是世界十大半导体芯片供应商之一,在很多诸如移动通信、汽车电子和PC/AV 等领域获得了全球最高市场份额。瑞萨集成电路设计(北京)有限公司苏州分公司(RDB-SU)是瑞萨科技全资子公司,2004年1月成立以来,现已拥有150多名优秀工程师,承担着家电和汽车电子领域MCU的一系列设计工作,并在2006年4月开始开发面向中国市场的MCU。收起

查看更多

相关推荐

电子产业图谱

作者黄工,从事嵌入式软件开发工作8年有余,高级嵌入式软件工程师,业余维护公众号『strongerHuang』,分享嵌入式软硬件、单片机、物联网等内容。