pySerial不喜欢低值

2024-04-30 03:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在玩MCU时,我试图通过RS232链接与PC桌面进行通信。在

我做了一个非常简单的测试程序:send“Hello world!\n“nms

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

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

为了检查我是否从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版本,但是没有用。有什么线索吗?在

请同情我的英语写作。我的英语不是我应该精通的。在


Tags: 模块devfalsehelloworldreadserialpc
1条回答
网友
1楼 · 发布于 2024-04-30 03:30:12

好吧,我的错!PySerial工作得很好。在MCU中修改代码时,我发现了一个错误,设置了一个应该设置的位(我发送的是7位字符长度)。然后,帧接收,显然,部分好,部分错误。在

现在,我明白了为什么pySerial会给我带来糟糕的结果。然而,对我来说,我的电脑是如何从7位数据(8位长度的字符)中重建的一个谜。我完全相信MCU的代码是好的,因为来自终端的数据是正确的:s

相关问题 更多 >