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

前言

本文将详细介绍如何在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会生成相关代码和配置文件。


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"。

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, &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系列开发中更进一步!

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


相关推荐
工匠Sola1 小时前
STM32G473VET6 在 Keil MDK 下手动移植 FreeRTOS 指南
stm32·单片机·嵌入式硬件
道一231 小时前
STM32 微控制器库RCC_ClkInitTypeDef结构参数介绍
stm32·单片机·嵌入式硬件
道一231 小时前
STM32 微控制器库RCC_OscInitTypeDef结构参数介绍
stm32·单片机·嵌入式硬件
厂太_STAB_丝针2 小时前
【自学嵌入式(11)闪存文件系统的应用】
c语言·单片机·嵌入式硬件
电子小子洋酱2 小时前
ESP32移植Openharmony外设篇(9)NB-IOT
单片机·物联网·华为·harmonyos·鸿蒙
RFID舜识物联网2 小时前
RFID测温技术:为生产安全与稳定保驾护航
大数据·人工智能·嵌入式硬件·物联网
北京迅为2 小时前
【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
人工智能·单片机·嵌入式硬件·harmonyos·鸿蒙
影阴2 小时前
HAL库之是stm32cubemx安装
stm32·单片机·嵌入式硬件
谏君之3 小时前
编写第一个 C++ 程序 – Hello World 示例
开发语言·c++·单片机·学习
佳心饼干-4 小时前
51单片机课综合项目
单片机·嵌入式硬件