这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 【瑞萨RA4M2v2.0开发板马年限定】调试板载的串口,实现数据输出

共1条 1/1 1 跳转至

【瑞萨RA4M2v2.0开发板马年限定】调试板载的串口,实现数据输出

高工
2026-05-19 16:03:28     打赏

瑞萨RA4M2的串口(UART)是其多功能串行通信接口(SCI)的一部分。在嵌入式开发中,掌握其硬件资源、配置方法和数据收发技巧是高效使用该芯片的基础。以下是对RA4M2串口知识的系统总结

一:串口的基础参数:

    串口通道 (SCI):最多 6个 SCI通道 (SCI0 - SCI5),每个都可配置为UART模式

    数据缓冲:每个SCI通道配备独立的发送和接收FIFO缓冲区,减少CPU中断次数,提高通信效率

    引脚功能:支持引脚功能复用,可将UART功能映射到多个不同的I/O引脚上,方便PCB布局

    相关时钟:时钟源可选自内部或外部时钟,经过分频后产生精确的波特率

二:关键参数配置:

    在进行串口初始化时,需要关注以下核心配置,这些通常在FSP(Flexible Software Package)配置界面中完成

    工作模式:选择 UART 模式(SCI可配置为UART、简单SPI或简单I2C)

    波特率:根据应用需求选择,常见的有9600、19200、38400、115200等

数据格式:

  数据位:通常为 8位。

  停止位:通常为 1位 或2位。

  校验位:可选择无校验、偶校验或奇校验

    中断与回调:配置中断优先级并绑定 回调函数。串口的所有事件(如发送完成、接收到数据)都会在中断服务程序中通过该回调函数通知用户代码.

    引脚选择:在配置工具的“Pins”页面,为选定的SCI通道指定具体的发送(TXD)和接收(RXD)引脚。

三:开发流程:

3.1工程配置 (FSP Configurator)

    在PIN选项卡中配置SCI的TXD/RXD引脚。

    在 Stacks卡中,新增“Driver -> Connectivity -> UART Driver on r_sci_uart”。

    在属性窗口中配置波特率、数据位、停止位、回调函数名等参数。

    配置完成后,点击“Generate Project Content”生成初始化代码

3.2  核心驱动API

主要依赖 r_sci_uart 驱动提供的接口

  R_SCI_UART_Open:根据FSP生成的配置结构体,初始化并使能指定的UART通道

  R_SCI_UART_Write:以阻塞或非阻塞方式通过串口发送指定长度的数据。

  R_SCI_UART_Read:启动一个非阻塞的接收过程,将接收到的数据存入指定的缓冲区

3.3 数据收发处理:

    数据发送:通常采用“非阻塞+回调”模式。调用R_SCI_UART_Write();后,CPU可继续执行其他任务。当数据从发送FIFO中全部发送完毕时,硬件产生中断,并在之前注册的回调函数中触发发送完成中断(UART_EVENT_TX_COMPLETE)事件,以此通知应用程序发送已完成。

    数据接收:接收一个字节时,硬件中断触发回调函数,并传入数据接收中断(UART_EVENT_RX_CHAR)事件。应用程序需在此事件中及时将接收到的数据读取并存入用户缓冲区,防止溢出。

    printf重定向:重定向标准C库的printf 函数,使其输出到串口

四:FSP库配置

4.1 CH340的原理图如下所示:

03-02 原理图.png

这里使用的是 P110 P109两个引脚,但是这两个引脚同时又是JLINK的调试引脚,所以这里我们把调试模式修改还曾SWD模式,将改引脚配置成串口所使用的引脚。

03-03 jlink引脚图.png

4.2 串口的配置

03-1 usart配置.png

五:软件代码:

5.1 串口的初始化:

void uart9_init(void)
{
    fsp_err_t err = FSP_SUCCESS;
    err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);    if (FSP_SUCCESS != err)
    {        while(1);
    }
}
5.2 串口的回调函数:

void g_uart9_callback(uart_callback_args_t *p_args)
{    switch (p_args->event)
    {        case UART_EVENT_TX_COMPLETE:
            g_data_transmit_flag = true;        break;        case UART_EVENT_RX_COMPLETE:
            g_data_received_flag = true;        break;        default:        break;
    }
}
5.3 重新映射printf 函数:
#ifdef __GNUC__                                 //串口重定向    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE
{
        fsp_err_t err = FSP_SUCCESS;
        err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);        if(FSP_SUCCESS != err) __BKPT();        while(g_data_transmit_flag == false){}
        g_data_transmit_flag = false;        return ch;
}


这里注意一下,需要打开软件的printf 函数的调用功能。

5.4 添加printf 函数的输出:

定义一个输出的字符串:

char buffer[]="RA4M2 test !!!!\r\n";

在任务调度中添加对字符串的输出就可以了。

六:调试串口心得:

  接收不定长数据:由于标准UART驱动本身无帧结束判断,需通过应用层逻辑实现:

  空闲中断:如果硬件支持(部分SCI通道可能不支持),可开启空闲中断,在接收到一帧数据后的空闲时刻自动产生中断,确认为一帧完整数据。

  定时器超时:利用一个定时器,在每次接收到数据时重置计时并开启定时。若定时器超时,说明在设定的间隔内未收到新数据,可认为一帧结束。

  数据格式约定:在通信协议中约定帧头、帧尾(如AA BB开头,BB AA结尾)或固定长度,软件根据特征来判断帧完整性。

  状态机查询:在main循环中周期性检查接收字节计数器的变化,若在一段时间内计数值未增加,则认为数据接收完成。

总结如下:

1:printf是在C语言中经常使用的输出函数,主要是用于输出一些调试信息,可以更加方便灵活的观察到变量的数值,在没有仿真的情况下,也可以直观的看到变量数值的大小。

2:当使用printf函数时候,需要设置堆栈的大小,这里我设置的是0x2000,由于是新建立的软件工程,开始没有设置堆栈的大小,自己移植的RA4M2的串口输出函数,没想到堆栈大小不足,导致程序运行出现的问题。

3:合理的设置串口的运行频率,开始设置的频率不合理,导致串口输出的也不正常。




关键词: RA4M2     调试     板载     串口    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]