一、开发环境
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的所有二进制位都传输过去;
总结:在进行串口传输时,数据位设置务必保证能够将一个完整的字节传输过去。