在使用 MCU 时,我正在尝试通过 RS232 链接与 PC 桌面进行通信。
我做了一个非常简单的测试程序:每n毫秒发送一次“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)
'\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。
我不知道为什么会这样。我在其他场合(2.4 版)使用了 pySerial 模块,一切正常。我在 Ubuntu 11.10 和 Ubuntu 10.04 中尝试了 2.5 和 2.6 版本,但没有用。有什么线索吗?
PD:同情我的英文写作。我没有像我应该的那样精通英语。