使用MCU,我正在尝试通过RS232链接与PC桌面进行通信。
我的测试程序非常简单:每隔 n ms发送“Hello world!\ n”。
最相关的链接连接参数是:
要检查我是否从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:同情我的英文写作。我不应该像我一样精通英语。答案 0 :(得分:0)
好的,我的错! PySerial非常完美。修改MCU中的代码,我发现一个错误,设置了一个应该设置的位(我发送的是7位字符长度)。然后,收到的框架显然部分正常,部分错误。
现在,我可以理解为什么pySerial会给我带来糟糕的结果。然而,对我来说,如何从7位数据重建8位长度的字符对我来说是一个谜。我完全相信MCU的代码很好,因为来自终端的数据是正确的:S