1

在使用 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:同情我的英文写作。我没有像我应该的那样精通英语。

4

1 回答 1

0

好吧,我的错!PySerial 完美运行。在 MCU 中修改代码,我发现一个错误取消了应该设置的位(我正在发送 7 位字符长度)。然后,接收到的帧显然部分是好的,部分是错误的。

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

于 2012-07-09T02:37:05.733 回答