ubuntu 串口收发数据测试

1.概要

1.echo cat
2.screen
3.minicom
4.cutecom

2.内容

在 Ubuntu 中测试串口(如 /dev/ttyS2 和 /dev/ttyS6)的数据收发,可通过以下步骤实现。假设两个串口已通过物理线缆(如零调制解调器线缆)连接,或通过虚拟串口工具模拟连接。


步骤 1:确认串口设备存在

ls -l /dev/ttyS*

输出应包含 /dev/ttyS2 和 /dev/ttyS6(或其他串口设备)。


步骤 2:安装串口测试工具

sudo apt install minicom screen cutecom # 选择其一即可

步骤 3:配置串口参数

使用 stty 统一设置发送和接收端的参数(以 115200 波特率为例):

# 设置 ttyS2 为发送端
stty -F /dev/ttyS2 115200 cs8 -parenb -cstopb


# 设置 ttyS6 为接收端
stty -F /dev/ttyS6 115200 cs8 -parenb -cstopb

步骤 4:测试串口通信

方法 1:使用 cat 命令(基础测试)
  1. 发送端(ttyS2):

    echo "Hello, Serial Port!" > /dev/ttyS2
  2. 接收端(ttyS6):

    cat /dev/ttyS6

    如果通信正常,接收端会输出 Hello, Serial Port!

方法 2:使用 screen 命令(交互式测试)
  1. 启动 screen 会话(接收端):

    screen /dev/ttyS6 115200
  2. 另开终端(发送端):

    echo "Test Data" > /dev/ttyS2

    接收端的 screen 会话中会显示 Test Data

  3. 退出 screen:按 Ctrl+A 后按 K,选择 Yes

方法 3:使用 minicom(专业调试工具)
  1. 配置 minicom
    sudo minicom -s
    • 选择 Serial port setup,设置串口设备为 /dev/ttyS6,波特率为 115200
    • 保存配置(Save setup as dfl)。
  2. 启动 minicom
    sudo minicom
    在发送端输入数据,接收端会实时显示。
方法 4:使用 cutecom(图形化工具)
  1. 启动 cutecom
    cutecom
    配置参数
    • 选择串口设备(如 /dev/ttyS6)。
    • 设置波特率为 115200,数据位为 8,停止位为 1,无校验。
  2. 发送数据:在文本框输入内容,点击 Send

步骤 5:验证数据完整性

方法 1:使用 od 查看二进制数据
echo "Binary Test: 0x00 0xFF" > /dev/ttyS2
od -tx1 /dev/ttyS6 # 以十六进制显示接收数据
方法 2:循环发送与接收
# 发送端(ttyS2)
while true; do echo "Loop Test $(date)" > /dev/ttyS2; sleep 1; done


# 接收端(ttyS6)
cat /dev/ttyS6

常见问题排查

  1. 无数据输出

    • 检查物理线缆连接(如 TX/RX 交叉)。
    • 确认串口参数(波特率、数据位等)一致。
    • 使用 dmesg | grep ttyS 查看内核日志。
  2. 权限不足

    sudo usermod -aG dialout $USER # 添加用户到 dialout 组
    newgrp dialout # 立即生效
  3. 设备未启用

    sudo chmod 666 /dev/ttyS2 /dev/ttyS6 # 临时修改权限(不推荐生产环境)

通过以上步骤,您可以完成 Ubuntu 下串口设备的收发测试。如果需要进一步调试(如分析通信协议),可使用 Wireshark 配合串口转 USB 适配器抓包。

3.关联链接

关于串口测试的链接-优快云博客

4.关联知识

Ubuntu 系统下使用 C 语言从串口接收数据的步骤如下: 1. 打开串口:首先通过打开设备文件的方式打开串口,例如:`int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);`,其中 `/dev/ttyUSB0` 是串口设备文件路径,`O_RDWR` 表示以读写方式打开,`O_NOCTTY` 表示不把串口设备作为控制终端,`O_NDELAY` 表示不等待数据可用时立即返回。 2. 配置串口参数:然后需要进行串口参数配置,包括波特率、数据位、校验位、停止位等,例如:`struct termios options; tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; tcsetattr(fd, TCSANOW, &options);`,其中 `B9600` 是波特率为 9600,`CS8` 表示数据位为 8,`PARENB` 表示启用奇偶校验,`CSTOPB` 表示停止位为 2。 3. 读取数据:接下来就可以通过调用 `read()` 函数从串口读取数据,例如:`char buf[1024]; int n = read(fd, buf, sizeof(buf));`,其中 `buf` 是缓冲区,`n` 是读取到的字节数。 4. 处理数据:最后可以根据自己的需求对读取到的数据进行处理,例如:将字节转换为字符串、解析协议等。 5. 关闭串口:处理完数据后需要关闭串口,例如:`close(fd);`。 总之,从串口接收数据需要打开串口、配置参数、读取数据和关闭串口等步骤,可以根据具体的应用场景进行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值