本文档记录了如何在e2 studio中开启串口并使能中断,并且实现电脑向串口发送数据,cm33对串口数据进行回传的功能。一下是本文的参考链接:
- RZ/V2H Quick Start Guide for RZ Multi-OS Package 多核异构参考应用文档
- MYZR-RZV2H-MB320.REVB.20250527.pdf 明远智睿EK320底板原理图
1. 选取串口引脚
根据上文使用GPT时候提到,明远智睿这个开发板所有的拓展IO都是1.8V的电平标准,所以我们在使用串口的时候仍然需要做开漏输出和外部上拉来统一电平标准。博主这里使用的是ch340的usb转ttl模块,避开官方例程已经占用的IO引脚,这里选择80和81这两个引脚作为串口,排针位置如下图:

2. 配置e2 stuido FSP,开启串口中断使能
按照上一篇GPT的博客。这次我们新增stack时,选择connectivity->UART(rsci_b_uart)。然后我们发现stacks窗口中多出了一个g_uart0模块,如下图:

来到pins界面,在ports中找到P8->P80、P81,将P80和P81的Output Type改为n-ch open drain,如下图:

选择Peripherals->Connectivity-RSCI->RSCI8,将模式设置为Asynchronous UART,如下图:

回到Stacks页面,点击g_uart0模块,选择属性,对串口进行配置。关闭FIFO支持,开启中断回调,填写的名称就是我们待会儿编写的回调函数的名称,设置波特率为115200,通道改为8,如下图:

点击Generate Project Content,生成代码。
3. 编写代码,运行固件验证
回到文件main_task_entry.c,在extern int app (struct rpmsg_device * rdev, void * platform, unsigned long svcno);这一行下方添加回调函数:
void user_uart_callback(uart_callback_args_t *p_args)
{
// 只有在明确收到字符时才触发
if (p_args->event == UART_EVENT_RX_CHAR)
{
uint8_t rx_char = (uint8_t)p_args->data;
// 收到什么,立刻原样发回去
R_SCI_B_UART_Write(&g_uart0_ctrl, &rx_char, 1);
}
}
依旧在main_task_entry函数入口,init_system后添加以下代码:
fsp_err_t err = R_SCI_B_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
if (FSP_SUCCESS == err)
{
uint8_t tx_msg[] = "UART Init OK! Ready to Echo...\r\n";
R_SCI_B_UART_Write(&g_uart0_ctrl, tx_msg, sizeof(tx_msg) - 1);
}
点击锤子进行编译,得到固件。按照编译指南中的方法拷贝至开发板。随后进行电气连接,如下图:

运行固件后打开串口助手,选择合适的波特率,发送字符进行功能验证:

可以看到成功实现cm33串口通信!如果再执行rpmsg_sample_client时候,发送信息仍然发现信息能够正常回传,说明中断工作正常!
本文档到此为止,主要是对cm33的串口以及中断回调功能进行验证。
