pySerial 不喜欢低值



在玩MCU时,我试图通过RS232链接与PC桌面进行通信。

我做了一个非常简单的测试程序:每nms发送"Hello world!\n"

最相关的链路连接参数是:

  • 端口:/dev/ttyUSB0
  • 波特率:57600 bps
  • 8个数据位
  • 1位停止
  • 无奇偶校验和硬件控制

为了检查我是否从MCU接收到PC的数据,我用设置/dev/ttyUSB0

%> stty -F /dev/ttyUSB0 57600 cooked

然后,

%> cat /dev/ttyUSB0
Hello world!
Hello world!
Hello world!
...

因此,我正确地从MCU接收数据。

但是,这里的问题是,当我想将Python与pySerial模块一起使用时,数据是绝对错误的:

>>> s = serial.Serial('/dev/ttyUSB0', 57600)
>>> print s
Serial<id=0x195fed0, open=True>( 
    port='/dev/ttyUSB0', baudrate=57600, 
    bytesize=8, parity='N',  
    stopbits=1, timeout=None, 
    xonxoff=False, rtscts=False, 
    dsrdtr=False)
>>> s.read(14)
'xc8xe5xecxecxefxa0xf7xefxf2xecxe4xa1x8ax80'

在这一点上,我已经为这个字符串更改了"Hello world!\n"输出字符串(MCU侧):0xde、0xad、0xbe、0xef。而且,我用pySerial得到的是:

>>> s.read(4)
'xdexadxbexef'

它有效!我更改了另一个时间,现在是:0x00、0x01、0x02、0x03、0x80、0x81、0x82、0x83。结果:

>>> s.read(8)
'x80x81x82x83x80x81x82x83' 

结论:pySerial将小于128的字节值更改为相同的值加128。

我不知道为什么会发生这种事。我在其他场合使用了pySerial模块(版本2.4),一切都很好。我在Ubuntu 11.10和Ubuntu 10.04中尝试过2.5和2.6版本,但都不起作用。有线索吗?

PD:请同情我的英语写作。我的英语不够熟练。

好吧,我的错!PySerial工作非常完美。在修改MCU中的代码时,我发现一个错误,即未设置应该设置的位(我发送的是7位字符长度)。然后,接收到的帧,显然,部分是好的,部分是错的。

现在,我可以理解为什么pySerial向我显示糟糕的结果了。然而,对我来说,我的电脑是如何从7位数据,8位长度的字符中重建的,这是一个谜。我确信MCU的代码是好的,因为来自终端的数据是正确的:s

相关内容

  • 没有找到相关文章

最新更新