使用ubuntu串口数据收和发不一致问题

串口配置

使用virtual Serial Port Driver Pro模拟串口两个串口,com2和com3,使用默认配置;通过virtual box 串口映射功能,在Ubuntu里使用CuteCom打开com2接受和发送数据,在windows里使用com3发送和接收数据。
在这里插入图片描述

在这里插入图片描述

遇到问题:

使用串口助手,配置相同的波特率、校验位、数据位、停止位等参数;Ubuntu里发数据,Windows里能正确收到,但是windows里发数据,Ubuntu里显示数据会有错位,比如发abcd1234,收到的却是bcd1234a。
刚开始怀疑是二者系统不同,导致串口数据不能互通,折腾了好久。

解决方案

ubuntu里串口助手配置要正确,Flow Control默认选项是 None,这里要修改为Software才行
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值