RA-Eco-RA2L1-48PIN-V1.0开发板RTC时钟

ops/2025/3/4 21:47:18/

前言

本文将详细介绍如何在e2studio开发环境中为RA2L1(48引脚版本)配置RTC(Real-Time Clock,实时时钟)模块,设置时钟日历,并通过1秒周期中断触发串口打印当前时间。这对于需要实时时间显示的应用(如日志记录、智能设备等)非常实用。

本文假设你已安装e2studio并配置好RA2L1开发板的环境。如果尚未准备好,可以参考瑞萨官方文档安装e2studio和FSP(灵活软件包)。


开发环境

  • MCU :Renesas RA2L1(48引脚)
  • IDE :e2studio
  • FSP版本 :FSP 5.7.0(或最新版本)
  • 工具链 :Arm GNU Toolchain(13.3或兼容版本)
  • 硬件 :RA2L1开发板

配置步骤

1. 创建新项目

  1. 打开e2studio,选择 File > New > Renesas C/C++ Project > Renesas RA
  2. 在弹出的窗口中:
    • 选择目标MCU:RA2L1
    • 项目名称:例如 RTC_Demo
    • 选择“Executable”类型,点击“Next”。
  3. 选择FSP版本(推荐最新),点击“Finish”创建项目。

创建完成后,e2studio会自动生成基础代码和配置文件。


2. 配置RTC模块

  1. 打开FSP配置器
    • 在项目资源管理器中,双击 configuration.xml(通常在 ra_gen 文件夹下)。
    • 打开FSP配置界面。
  2. 添加RTC模块
    • 点击左侧“Stacks”面板中的“New Stack > Timers > RTC (r_rtc)”。
    • RTC模块将被添加到配置堆栈中。
  3. 配置RTC参数
    • 时钟源 :选择“Sub-clock”(子时钟,32.768kHz,通常用于RTC低功耗)。
    • 模式 :选择“Calendar Mode”(日历模式,支持年月日时分秒)。
    • 中断 :启用“Periodic Interrupt”,设置周期为“1 Second”。
    • 回调函数 :输入回调函数名,例如 rtc_callback
    • 引脚配置 :确保子时钟晶振引脚(XCIN/XCOUT)已正确分配(通常无需手动设置,FSP会自动映射)。
  4. 保存并生成代码
    • 点击右上角“Generate Project Content”,FSP会生成相关代码和配置文件。

image.png
image.png

3. 配置串口(UART)

  1. 添加UART模块
    • 在FSP配置器中,点击“New Stack > Connectivity > UART (r_sci_uart)”。
    • 添加一个UART实例(例如SCI0)。
  2. 配置UART参数
    • 波特率 :9600(或其他常用值)。
    • 数据位 :8位。
    • 停止位 :1位。
    • 奇偶校验 :无。
    • 引脚 :分配TXD和RXD引脚(参考开发板手册,例如P401为TXD,P402为RXD)。
  3. 保存并生成代码
    • 再次点击“Generate Project Content”。

image.png

4. 编写代码

FSP生成代码后,我们需要在用户代码中实现RTC初始化、时间设置、中断处理和串口打印逻辑。

4.1 主函数 (hal_entry.c)

src/hal_entry.c 中编写以下代码:

#include "hal_data.h"
#include <stdio.h>void hal_entry(void)
{fsp_err_t err;/* 打开RTC模块 */err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);if (FSP_SUCCESS != err) while(1); // 错误处理/* 设置初始时间:2025年2月27日 12:00:00 */rtc_time_t initial_time = {.tm_sec  = 0,   // 秒.tm_min  = 0,   // 分.tm_hour = 12,  // 时.tm_mday = 27,  // 日.tm_mon  = 1,   // 月(0-11,1表示2月).tm_year = 125, // 年(从1900年开始,125 = 2025-1900)};err = R_RTC_CalendarTimeSet(&g_rtc0_ctrl, &initial_time);if (FSP_SUCCESS != err) while(1);/* 打开UART模块 */err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);if (FSP_SUCCESS != err) while(1);/* 主循环(可留空,中断会处理打印) */while (1){R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); // 避免CPU满载}
}
  • 说明
    • R_RTC_Open 初始化RTC模块。
    • R_RTC_CalendarTimeSet 设置初始时间。
    • R_SCI_UART_Open 初始化UART模块。
4.2 RTC回调函数 (hal_entry.c)

在同一文件中添加回调函数:

void rtc_callback(rtc_callback_args_t *p_args)
{if (p_args->event == RTC_EVENT_PERIODIC){rtc_time_t current_time;char buffer[32];/* 获取当前时间 */R_RTC_CalendarTimeGet(&g_rtc0_ctrl, &current_time);/* 格式化时间字符串 */snprintf(buffer, sizeof(buffer), "%04d-%02d-%02d %02d:%02d:%02d\\\\r\\\\n",current_time.tm_year + 1900, // 年份从1900起current_time.tm_mon + 1,     // 月份从0起current_time.tm_mday,current_time.tm_hour,current_time.tm_min,current_time.tm_sec);/* 通过UART发送时间 */R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)buffer, strlen(buffer));}
}
  • 说明
    • RTC_EVENT_PERIODIC 表示1秒周期中断。
    • R_RTC_CalendarTimeGet 获取当前时间。
    • snprintf 格式化时间为“YYYY-MM-DD HH:MM:SS”格式。
    • R_SCI_UART_Write 通过串口发送数据。
4.3 添加标准库支持

由于使用了 snprintf,需要启用标准库:

  • 在FSP配置器中,点击“Properties > BSP”,启用“Use newlib”选项。
  • 保存并重新生成代码。

5. 构建与调试

  1. 构建项目
    • 点击 Project > Build Project,确保无编译错误。
    • 如果遇到链接脚本 fsp.ld 缺失问题,参考此文重新生成FSP配置文件。
  2. 下载并运行
    • 连接RA2L1开发板,点击调试按钮(绿色播放图标)。
    • 程序下载后自动运行。
  3. 查看输出
    • 打开串口终端(如Tera Term),设置波特率为9600。
    • 你将看到每秒打印一次时间,例如:
      2025-02-27 12:00:00
      2025-02-27 12:00:01
      2025-02-27 12:00:02
      ...
      

总结

通过以上步骤,我们成功在e2studio中为RA2L1配置了RTC模块,设置了日历时间,并利用1秒中断通过串口实时打印时间。这种方法适用于需要时间戳的嵌入式应用。希望这篇博客能帮助你在RA系列开发中更进一步!

如果你有任何问题或优化建议,欢迎在评论区留言!



http://www.ppmy.cn/ops/163135.html

相关文章

游戏引擎学习第128天

开始 然而&#xff0c;我们仍然有一些工作要做&#xff0c;渲染部分并没有完全完成。虽然现在已经能够运行游戏&#xff0c;而且帧率已经可以接受&#xff0c;但仍然有一些东西需要进一步完善。正在使用调试构建编译版本&#xff0c;虽然调试版本的性能不如优化版本&#xff0…

爬虫基础:一文掌握网页基础和爬虫原理

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、网页基础1.1 网页的基本概念1.2 请求与响应1.3 HTTP 协议1.4 HTTP 状态码1.5 动态网页与静态网页二、 网页的基本结构2.1 HTML(超文本标记语言)2.2 CSS(层叠样式表)2.3 JavaScript三. 爬虫的基本原理四、网页数…

k8s面试题总结(八)

1.K8s部署服务的时候&#xff0c;pod一直处于pending状态&#xff0c;无法部署&#xff0c;说明可能的原因 Node节点的资源不足&#xff0c;yaml文件资源限制中分配的内存&#xff0c;cpu资源太大&#xff0c;node宿主机资源没那么大&#xff0c;导致无法部署。部署pod的yaml文…

力扣 最长回文子串

双指针&#xff0c;多维动态规划。 题目 回文即顺着读跟倒着读都是一样的&#xff0c;然后又是一个找子串的问题&#xff0c;不难发现又是一道dp了。但是&#xff0c;这里维护的状态用到了双指针&#xff0c;找的分别是子串的首字母跟尾字母&#xff0c;因此也是个多维动态规划…

ArcGIS Pro实战技巧:灵活运用线条精准分割与裁切面要素

在地理信息系统&#xff08;GIS&#xff09;的应用中&#xff0c;我们经常需要对地图上的面要素进行精确的分割或裁切。 ArcGIS Pro作为一款强大的GIS软件&#xff0c;提供了多种工具来满足这一需求。 本文将详细介绍如何在ArcGIS Pro中使用线要素对面要素进行分割和裁切&…

docker关闭mysql端口映射的使用

需求 项目中的数据库为mysql&#xff0c;如果将端口映射到宿主机上&#xff0c;容易被工具扫描出&#xff0c;且随着国产化的进程推进&#xff0c;mysql将不被允许。为了提高安全性与满足项目需求&#xff0c;这里采用隐藏mysql端口方式&#xff0c;不映射宿主机端口&#xff…

jvm内存不够,怎么重新分配

目录 第一章、问题分析1.1&#xff09;报错提示1.2&#xff09;报错分析 第二章、解决方式2.1&#xff09;修改IDEA的JVM内存设置2.2&#xff09; 修改Spring Boot项目的JVM内存设置 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接…

HTML + CSS 题目

1.说说你对盒子模型的理解? 一、是什么 对一个文档进行布局的时候&#xff0c;浏览器渲染引擎会根据标准之一的css基础盒模型&#xff0c;将所有元素表示为一个个矩形的盒子。 一个盒子由四个部分组成: content&#xff0c;padding&#xff0c;border&#xff0c;margin 下…