2026 / 07 / 22
瑞萨RA8系列教程 | 基于 e2 studio 实现串口输出

作者 | strongerHuang

UART:Universal Asynchronous Receiver/Transmitter,即通用异步收发器,简称串口。


UART串口是学习单片机开发最常见的一个通信接口,也是实际项目中最常用的一个通信接口。


本文基于e2 studio 开发环境,教大家实现 RA8 单片机串口输出的方法。


准备工作

本文以 Windows 操作系统下 e2 studio V5.8.0、瑞萨RA8D1单片机为例。


1、下载安装e2 studio开发工具

前面文章《瑞萨 RA8 开发环境搭建》有提到具体的下载和安装方法。


e2 studio瑞萨GitHub下载地址:

https://github.com/renesas/fsp/releases


2、准备开发板和下载调试器

  • 下载调试器:J-Link

  • 瑞萨RA8开发板


瑞萨官方推出的开发板,很多都自带有J-Link调试器,比如,本文基于瑞萨CPKCOR-RA8D1B 开发板就自带有J-Link调试器。


3、下载安装J-Link配套软件

如果你要用到J-Link的一些功能,比如:Hex下载代码、J-Link RTT 等功能,建议下载并安装J-Link配套的软件。


下载地址:

https://www.segger.com/downloads/jlink/


基于 e2 studio  配置串口

本文基于之前Demo工程进行配置 RA8 单片机的串口。这里推荐参看文章:瑞萨RA8系列教程 | 基于 e2 studio 创建RA8工程


我们复制之前生成的整个工程目录,并重命名(比如:RA8D1_UART)。


打开 
e2 studio 开发环境,直接导入工程:


当然,我们也可以参看之前文章《瑞萨RA8系列教程 | 基于 e2 studio 创建RA8工程》自己从头到尾新建一个工程。本文不重复造轮子,省略这一步,直接配置UART串口。


1、配置串口时钟

RA8单片机串口被定义为SCI(Serial Communications Interface),即串行通信接口。


2、配置串口引脚

本文基于瑞萨CPKCOR-RA8D1B 开发板,使用SCI3作为调试串口。


3、新建串口模块


4、配置串口模块

UART串口模块有很多配置选项,作为初学者,我们只需要配置几个基础的即可,其他大部分默认即可。


5、打印输出配置

如果要使用printf打印输出,还需要配置两个地方。

heap栈大小


工程设置

项目 -> C/C++ Project Setting -> C/C++ 构建 -> 设置:


以上就是串口输出的一些基础配置。


编辑代码、编译、下载

上面工程配置好之后,接下来是添加串口printf打印输出相关的代码。


1、添加源代码文件

我们在 src 文件夹下添加一个 bsp 文件夹,并新建 bsp_uart.c 和 bsp_uart.h文件。


bsp_uart.h源代码很简单,包含头文件,申明函数:

#ifndef __BSP_UART_H
#define	__BSP_UART_H
#include "hal_data.h"
#include 

void UART3_Init(void);

#endif


bsp_uart.c源文件包含
UART3_Init初始化、UART3_Callback回调函数、
重定向 printf 输出。

#include "bsp_uart.h"

/* 发送完成标志 */
volatile bool uart_send_complete_flag = false;
/**  
* @brief  调试串口 UART3 初始化  
* @param  无  
* @retval 无  
*/
void UART3_Init(void)
{    
  fsp_err_t err = FSP_SUCCESS;        
  err = R_SCI_B_UART_Open(&g_uart3_ctrl, &g_uart3_cfg);    
  assert(FSP_SUCCESS == err);
}

/**  
* @brief  串口中断回调  
* @param  无  
* @retval 无  
*/
void UART3_Callback (uart_callback_args_t * p_args)
{    
    switch (p_args->event)    
    {        
        case UART_EVENT_RX_CHAR:        
        {            
            /* 把串口接收到的数据发送回去 */            
            R_SCI_B_UART_Write(&g_uart3_ctrl, (uint8_t *)&(p_args->data), 1);            
            break;        
       }        
       case UART_EVENT_TX_COMPLETE:        
       {            
            uart_send_complete_flag = true;            
            break;        
       }        
       default:            
       break;    
    }
}

/**  
* @brief  重定向 printf 输出  
* @param  无  
* @retval 无  
*/
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //防止编译警告
int _write(int fd, char *pBuffer, int size)
{
    (void)fd;    
    R_SCI_B_UART_Write(&g_uart3_ctrl, (uint8_t *)pBuffer, (uint32_t)size);    
    while(uart_send_complete_flag == false);    
    uart_send_complete_flag = false;    
    return size;
}
#elseint 
fputc(int ch, FILE *f)
{
    (void)f;    
    R_SCI_B_UART_Write(&g_uart3_ctrl, (uint8_t *)&ch, 1);    
    while(uart_send_complete_flag == false);    
    uart_send_complete_flag = false;    
    return ch;
}
#endif


主函数我们添加一个测试printf的代码:

uint8_t Cnt = 0;

printf("Cnt = %d\r\n", Cnt);
Cnt++;
if (100 < Cnt)
{    
    Cnt = 0;
}

2、编译、下载代码

如果上面一切正常,我们就能正常编译了:


通过J-Link下载代码到芯片里面,就会有这样的现象:间隔1秒
LED闪烁一下,并打印Cnt累加的值。




瑞萨RA8系列教程······

文件下载
隐私条款

一、接受条款 使用者(也称"您")在访问或使用本网站及其服务时,即已经表示同意并不加修改地接受本《用户协议》、本网站的《隐私声明》、《法律声明》以及其关或相链接的网页和网站的条件和条款的规定。我们强烈建议:在您阅读和接受本《用户协议》时,也应阅读并接受本《用户协议》中所提到《隐私声明》、《法律声明》及其相关或相链接网页或网站所包含的资料,因为《隐私声明》、《法律声明》及其它相关网页或网站可能包含对您适用的进一步规定。(请注意:点击划有底线的词句即可链接到上述《隐私声明》、《法律声明》及其它相关或相链接的网页和网站。

 

二、使用者的资格要求 在本网站中"使用者"指的是浏览、阅读、使用本网站信息或服务的任何个人或组织。本网站的服务仅适用于根据相关法律的规定具有签订有约束力的合同的个人或组织并仅由其使用。本网站的服务不向18周岁以下的个人使用者提供,也不向临时被本网站中止或取消使用者资格的使用者提供。如果使用者不符合本条规定,请停止使用本网站或本网站的服务。

样品
申请

应用
资源

微信