项目概述
本案例使用移远通信EG800Z-CN开发板和UniRTOS,通过调用UART相关功能函数,实现了一个串口通信回显功能,串口工具向开发板发送的任何内容,开发板都会发送回给串口工具,达到“回显”效果。这是一个基础的UART通信协议应用,适合新手和初学者了解UART的应用。
功能特性
基于UART的实时数据回显
- 全双工实时通信:利用通用异步收发器(UART)实现数据的同步接收与发送,确保通信链路畅通无阻。
- 精准字节级回显:对接收到的每一个字节数据进行即时、原样返回,实现 1:1 的精确回显,便于通信链路验证与调试。
- 支持连续数据流:能够稳定处理来自上位机或外部设备的连续、高速数据流,并保持低延迟的回显响应。
开发准备
硬件要求

- USB数据线(USB-A转USB-C),点此购买。


软件要求
- Quectel USB驱动,点此获取。
- UniRTOS SDK,请联系技术支持获取。
- EPAT工具:移芯平台日志调试工具,点此获取。
- CH340驱动,点此获取。
快速上手
下载项目
示例代码位于UniRTOS官方创客仓库,点此访问下载。
添加项目到UniRTOS SDK
SDK新增Demo,固件编译和烧录请参考UniRTOS板块的快速启动。
硬件连接

- 使用杜邦线连接USB-TTL模块和开发板的UART0,VCC->3V3 , GND->GND , TX-> RX0 , RX->TX0。
- 使用USB数据线连接开发板和电脑。
效果展示
下图为串口工具发送和接收的数据。

代码概览
示例工作流程

主要功能接口
unir_test_demo_init
- 功能:这是整个UART演示功能的入口点。它的主要职责是创建并启动一个独立的任务(线程),让UART的具体逻辑在后台运行,而不阻塞主程序。
- 关键操作:
- 任务创建:调用qosa_task_create来创建一个名为uart_demo的新任务。这个新任务将执行unir_uart_demo_process 函数。
- 重要性:这是用户需要在自己的应用初始化流程中调用的函数,以启动UART功能。
unir_uart_demo_process
- 功能:这是UART演示的核心逻辑所在。它在一个无限循环中运行,负责完成UART的所有配置、初始化和数据轮询工作。
- 关键操作:
- 注册回调:通过qosa_uart_register_cb将回调函数注册到UNIR_TEST_UART_PORT端口。这使得系统能在特定事件发生时自动通知我们。
- 配置通信参数:设置波特率 (115200)、数据位 (8)、停止位 (1)、校验位 (无) 和流控 (无)。然后通过qosa_uart_ioctl将这些配置应用到UART端口。
- 配置引脚复用:使用qosa_pin_set_func将硬件引脚UNIR_TEST_UART_TX_PIN和UNIR_TEST_UART_RX_PIN设置为UART功能,而不是普通的GPIO。
- 打开端口:调用 qosa_uart_open(UNIR_TEST_UART_PORT) 正式打开UART端口,使其可以进行读写操作。
- 主循环 (轮询):在while(1)循环中:
- 休眠:调用qosa_task_sleep_sec(1)让任务每秒检查一次,避免过度占用CPU。
- 检查数据:调用qosa_uart_read_available查询UART接收缓冲区是否有待读取的数据。
- 读取数据:如果有数据,则调用qosa_uart_read将数据读入全局缓冲区g_uart_data。
- 回传数据:调用qosa_uart_write将刚刚读取到的数据原样发送回去(回显功能)。
- 清空缓冲区:qosa_memse清空缓冲区,为下一次接收做准备。
- 重要性:这个函数封装了UART从配置到使用的完整生命周期,是理解如何操作UART的关键。
常见问题
串口工具收发数据无任何反应?
检查开发板和USB-TTL模块的硬件连接,确认双方的TX连接的是另一方的RX。