前言
本文将详细介绍如何在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. 创建新项目
- 打开e2studio,选择
File > New > Renesas C/C++ Project > Renesas RA
。 - 在弹出的窗口中:
- 选择目标MCU:
RA2L1
。 - 项目名称:例如
RTC_Demo
。 - 选择"Executable"类型,点击"Next"。
- 选择目标MCU:
- 选择FSP版本(推荐最新),点击"Finish"创建项目。
创建完成后,e2studio会自动生成基础代码和配置文件。
2. 配置RTC模块
- 打开FSP配置器 :
- 在项目资源管理器中,双击
configuration.xml
(通常在ra_gen
文件夹下)。 - 打开FSP配置界面。
- 在项目资源管理器中,双击
- 添加RTC模块 :
- 点击左侧"Stacks"面板中的"New Stack > Timers > RTC (r_rtc)"。
- RTC模块将被添加到配置堆栈中。
- 配置RTC参数 :
- 时钟源 :选择"Sub-clock"(子时钟,32.768kHz,通常用于RTC低功耗)。
- 模式 :选择"Calendar Mode"(日历模式,支持年月日时分秒)。
- 中断 :启用"Periodic Interrupt",设置周期为"1 Second"。
- 回调函数 :输入回调函数名,例如
rtc_callback
。 - 引脚配置 :确保子时钟晶振引脚(XCIN/XCOUT)已正确分配(通常无需手动设置,FSP会自动映射)。
- 保存并生成代码 :
- 点击右上角"Generate Project Content",FSP会生成相关代码和配置文件。
3. 配置串口(UART)
- 添加UART模块 :
- 在FSP配置器中,点击"New Stack > Connectivity > UART (r_sci_uart)"。
- 添加一个UART实例(例如SCI0)。
- 配置UART参数 :
- 波特率 :9600(或其他常用值)。
- 数据位 :8位。
- 停止位 :1位。
- 奇偶校验 :无。
- 引脚 :分配TXD和RXD引脚(参考开发板手册,例如P401为TXD,P402为RXD)。
- 保存并生成代码 :
- 再次点击"Generate Project Content"。

4. 编写代码
FSP生成代码后,我们需要在用户代码中实现RTC初始化、时间设置、中断处理和串口打印逻辑。
4.1 主函数 (hal_entry.c
)
在 src/hal_entry.c
中编写以下代码:
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
)
在同一文件中添加回调函数:
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, ¤t_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. 构建与调试
- 构建项目 :
- 点击
Project > Build Project
,确保无编译错误。 - 如果遇到链接脚本
fsp.ld
缺失问题,参考此文重新生成FSP配置文件。
- 点击
- 下载并运行 :
- 连接RA2L1开发板,点击调试按钮(绿色播放图标)。
- 程序下载后自动运行。
- 查看输出 :
-
打开串口终端(如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系列开发中更进一步!
如果你有任何问题或优化建议,欢迎在评论区留言!