数据位设置不正确导致数据传输不正确(串口通讯)

一、开发环境

C#、Visual Studio、控制台程序;

二、问题描述

在进行串口编程时,打开串口的参数为"COM1", 115200, Parity.Even, 6, StopBits.One。其中6是数据位;

结果在7E这个十六进制字节时,另一端接收到的是3E

三、分析

1、串口通讯协议基本格式(总长度10bit):

     1)、串口传输是按每字节进行传输,每个字节用10个bit进行打包;

     2)、10个bit具体格式如下:

               起始位(1bit)   有效数据位(7/8bit)   校验位(1bit,可变)    停止位(1bit)

               注:有效数据位和校验位总共8bit,当有校验位时,有效数据位为7bit,否则有效位未8bit

2、其中打开串口是数据位参数代表取有效数据位中几个bit(从低位到高位);

     7E  的二进制 是 0111 1110,当数据位参数为6时,取6个bit进行传,其值为11 1110,高位01 给忽略了,而二进制11 1110 其       十六进制值为3E,故此接收端收到的是3E。

 

四、解决方法和总结

       将数据位参数改成8即可,这样串口传输时,会取8bit进行传输,完整的将7E的所有二进制位都传输过去;

       总结:在进行串口传输时,数据位设置务必保证能够将一个完整的字节传输过去。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于ESP32的多设备485通信,可以通过以下步骤来实现,并保证数据不重叠: 1. 使用RS485转换器:将ESP32的UART口连接到RS485转换器的发送和接收线路上。RS485是一种串行通信协议,可以实现多设备之间的通信。 2. 配置UART口:在ESP32上配置UART口的参数,包括波特率、数据位、停止和校验等。确保所有设备都使用相同的串口配置。 3. 设备地址:为每个设备分配唯一的地址。可以在通信协议中定义一个特殊的字段用于设备地址,以便区分不同的设备。 4. 数据帧格式:定义数据帧的格式,包括起始、停止数据位等。可以在通信协议中规定一定的帧结构,以便设备能够正确解析和处理数据。 5. 碰撞检测:在RS485通信中,可能会出现多个设备同时发送数据导致碰撞的情况。为了避免碰撞,可以使用碰撞检测机制,例如发送前检测总线上是否有其他设备正在发送数据,如果有,则等待一段时间后再发送。 6. 数据处理:在ESP32中接收到数据后,根据设备地址判断该数据是发往哪个设备的。可以使用条件语句或者查找表等方式进行判断和处理。 7. 通信协议:为了确保数据的可靠传输,可以定义一套通信协议,包括数据校验、重发机制和错误处理等。常用的通信协议有Modbus、DMX512等。 通过以上步骤,您可以实现ESP32的多设备485通信,并保证数据不重叠。请注意,具体的实现方式可能会因您所选用的硬件和通信协议而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值