PySerial模块中的'bytesize

2 投票
2 回答
7100 浏览
提问于 2025-04-16 07:53

我想通过串口使用PySerial发送消息。串口构造函数的一个参数是'bytesize'。我试过serial.SEVENBITS和serial.EIGHTBITS,但没发现有什么不同。文档有点模糊,而且我对Python和串口通信都很陌生。

这个参数是用来设置一个字节能表示的最大值吗,还是和有符号字节有关?谁能解释一下为什么我会选择7位而不是8位?我一直在找,但没有找到答案。

谢谢

2 个回答

3

以前,串行连接通常只发送ASCII文本,这种文本只需要七个比特位。而第八个比特位则用来做奇偶校验,帮助判断数据是否正确传输。

不过,奇偶校验并不能发现偶数个比特位的错误,而且也无法修正数据,所以它的价值不大。现在的做法是使用8个比特位的数据,并在更高层次的协议中进行错误检测和修正。

简单来说,你可能需要使用8比特位,但这也要看串行连接的另一端期待什么。

更新:从你提的另一个问题来看,你似乎在编程连接的两端,并且在对消息进行校验和处理,所以使用8比特位是最简单的选择。

1

这段话讲的是每个传输字符中包含的数据位数。根据维基百科的解释:

数据位

每个字符中的数据位数可以是5位(用于巴多特编码),6位(很少用),7位(用于真正的ASCII),8位(用于任何类型的数据,因为这正好是一个字节的大小),或者9位(也很少用)。在较新的应用中,几乎都使用8位数据位。5位或7位通常只在老旧设备上有意义,比如电传打字机。

大多数串行通信设计在每个字节中以LSB(最低有效位)优先的方式发送数据位。这种标准也被称为“小端模式”。还有一种可能性,但很少使用,就是“高端模式”或MSB(最高有效位)优先的串行通信。(关于位的顺序,可以查看“字节序”了解更多。)位的顺序通常是不可配置的,但数据可以在发送之前进行字节交换。

撰写回答