简单的UART通信回显功能

项目概述

这是一个基础的UART通信协议应用,适合新手和初学者了解UART的应用。本案例使用移远通信EG800Z-CN开发板和UniRTOS,通过调用UART相关功能函数,实现了一个串口通信回显功能,串口工具向开发板发送的任何内容,开发板都会发送回给串口工具,达到“回显”效果。

功能特性

基于UART的实时数据回显

  • 全双工实时通信:利用通用异步收发器(UART)实现数据的同步接收与发送,确保通信链路畅通无阻。

  • 精准字节级回显:对接收到的每一个字节数据进行即时、原样返回,实现1:1的精确回显,便于通信链路验证与调试。

  • 支持连续数据流:能够稳定处理来自上位机或外部设备的连续、高速数据流,并保持低延迟的回显响应。

开发准备

硬件要求

软件要求

快速上手

下载项目

示例代码位于UniRTOS 官方创客仓库,点此访问下载

添加项目到UniRTOS SDK

CSDK新增Demo,固件编译和烧录请参考UniRTOS板块的快速启动栏或UniRTOS文档中心的快速入门

硬件连接

  1. 使用杜邦线连接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 演示的核心逻辑所在。它在一个无限循环中运行,负责完成 UART 的所有配置、初始化和数据轮询工作。

  • 关键操作:

    • 注册回调: 通过 qosa_uart_register_cb 将回调函数注册到 UNIR_TEST_UART_PORT 端口。这使得系统能在特定事件发生时自动通知我们。

    • 配置通信参数: 设置波特率 (115200)、数据位 (8)、停止位 (1)、校验位 (无) 和流控 (无)。然后通过 qosa_uart_ioctl将这些配置应用到 UART 端口。

    • 配置引脚复用: 使用 qosa_pin_set_func 将硬件引脚 UNIR_TEST_UART_TX_PINUNIR_TEST_UART_RX_PIN 设置为 UART 功能,而不是普通的 GPIO。

    • 打开端口: 调用 qosa_uart_open(UNIR_TEST_UART_PORT) 正式打开 UART 端口,使其可以进行读写操作。

    • 主循环 (轮询): 在 while(1) 循环中:

      1. 休眠: qosa_task_sleep_sec(1); 让任务每秒检查一次,避免过度占用 CPU。

      2. 检查数据: qosa_uart_read_available 查询 UART 接收缓冲区是否有待读取的数据。

      3. 读取数据: 如果有数据,则调用 qosa_uart_read 将数据读入全局缓冲区 g_uart_data

      4. 回传数据: 调用 qosa_uart_write 将刚刚读取到的数据原样发送回去(回显功能)。

      5. 清空缓冲区: qosa_memset 清空缓冲区,为下一次接收做准备。

  • 重要性: 这个函数封装了 UART 从配置到使用的完整生命周期,是理解如何操作 UART 的关键。

常见问题

串口工具收发数据无任何反应?

检查开发板和usb-ttl模块的硬件连接,确认双方的TX是连接另一方的RX