pySerial不喜欢低值

时间:2012-07-09 00:41:24

标签: python serial-port microcontroller pyserial uart

使用MCU,我正在尝试通过RS232链接与PC桌面进行通信。

我的测试程序非常简单:每隔 n ms发送“Hello world!\ n”

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

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

要检查我是否从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)
'\xc8\xe5\xec\xec\xef\xa0\xf7\xef\xf2\xec\xe4\xa1\x8a\x80'

此时,我已为此字符串更改了“ Hello world!\ n”输出字符串(MCU端): 0xde,0xad,0xbe,0xef 。而且,我得到的pySerial是:

>>> s.read(4)
'\xde\xad\xbe\xef'

有效!我已经改变了另一次,现在为此: 0x00,0x01,0x02,0x03,0x80,0x81,0x82,0x83 。结果:

>>> s.read(8)
'\x80\x81\x82\x83\x80\x81\x82\x83' 

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

我不知道为什么会这样。我在其他场合(版本2.4)使用pySerial模块,一切正常。我在Ubuntu 11.10和Ubuntu 10.04中尝试过2.5和2.6版本,但没有用。任何线索?

PD:同情我的英文写作。我不应该像我一样精通英语。

1 个答案:

答案 0 :(得分:0)

好的,我的错! PySerial非常完美。修改MCU中的代码,我发现一个错误,设置了一个应该设置的位(我发送的是7位字符长度)。然后,收到的框架显然部分正常,部分错误。

现在,我可以理解为什么pySerial会给我带来糟糕的结果。然而,对我来说,如何从7位数据重建8位长度的字符对我来说是一个谜。我完全相信MCU的代码很好,因为来自终端的数据是正确的:S