在玩MCU时,我试图通过RS232链接与PC桌面进行通信。在
我做了一个非常简单的测试程序:send“Hello world!\n“每nms
最相关的链路连接参数是:
为了检查我是否从MCU接收数据到PC,我使用以下命令设置/dev/ttyUSB0:
%> stty -F /dev/ttyUSB0 57600 cooked
然后
^{pr2}$所以,我正确地从MCU接收数据。在
但是,这里的问题是,当我想在pySerial模块中使用Python时,数据是绝对错误的:
>>> 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'
结论:pySerial将小于128的字节值更改为相同值加128。在
我不知道为什么会这样。我在其他场合使用了pySerial模块(2.4版),一切都很好。我试过在Ubuntu11.10和Ubuntu10.04中使用2.5和2.6版本,但是没有用。有什么线索吗?在
请同情我的英语写作。我的英语不是我应该精通的。在
好吧,我的错!PySerial工作得很好。在MCU中修改代码时,我发现了一个错误,设置了一个应该设置的位(我发送的是7位字符长度)。然后,帧接收,显然,部分好,部分错误。在
现在,我明白了为什么pySerial会给我带来糟糕的结果。然而,对我来说,我的电脑是如何从7位数据(8位长度的字符)中重建的一个谜。我完全相信MCU的代码是好的,因为来自终端的数据是正确的:s
相关问题 更多 >
编程相关推荐