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

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


软件要求
-
-
unirtos-toolchain.exe:编译工具链安装程序,
点此获取。
-
QFlash.exe:模块固件烧录程序,用于烧录UniRTOS编译生成的固件,
点此获取。
-
USB驱动:用于PC识别模块的USB枚举口,
点此获取。
-
EPAT工具:芯片厂商提供的日志捕获工具,用于查看模块运行日志以分析应用程序执行情况,
点此获取。
-
快速上手
下载项目
示例代码位于UniRTOS官方创客仓库,点此访问下载。
添加项目到UniRTOS SDK
SDK新增Demo,固件编译和烧录请参考UniRTOS板块的快速启动。
硬件连接

- 使用杜邦线连接USB-TTL模块和开发板的UART0
- VCC->3V3
- GND->GND
- TX-> RX0
- RX->TX0
2. 使用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_memset清空缓冲区,为下一次接收做准备。
- 重要性:这个函数封装了UART从配置到使用的完整生命周期,是理解如何操作UART的关键。
常见问题
串口工具收发数据无任何反应?
检查开发板和USB-TTL模块的硬件连接,确认双方的TX连接的是另一方的RX。
串口工具波特率与代码中115200不一致?
这两个现象完全相同(收发无任何反应)