2010-06-25 219 views
0

我试图通过串口与自制的卡交谈,并因此使用pySerial。在超级终端中,一切正常。我可以这样写:通过pySerial发送命令的问题

$ audio on 

和音频已启用,但如果我用

ser = serial.Serial("COM1", 38400) 
ser.write("audio on\r\n") 

没有任何反应。但是,我可以读取传入的数据,所以通信没有问题。如果我将\ r \ n更改为\ n或\ r,我也无济于事。

编辑:有时我实际上得到的反馈:当发送完全相同的命令作为超级终端的作品时没有这样的命令。该设置也与超级终端中的完全相同。

解决: 为了使它工作,我必须发送一个和一个字符,并以\ r结束传输。

回答

2

获取示波器(你有一个,对吧?)并观察串行线路,每秒发送一个字符并查看示波器上的内容(将其设置为在起始位上触发)串行端口位的顺序为:开始,LSB,MSB,奇偶校验,停止。

查看是否有不打通字符,或者如果有一个模式,另一种可能是,一切都做了真正出来的端口,您的板下降字符。

0

尝试指定连接的其他参数(波特率除外),如位奇偶校验(我记得还有其他的参数)。

我有pyserial同样的问题,但那是两年前(即我不记得我是如何解决它:()。

+0

在我的代码中,我指定了端口,波特率,奇偶校验和超时。我只写了一个简短的例子。不过,我确实看到我有时会得到一些回应,但并非总是如此。这很奇怪。在发送消息之前,我也尝试刷新输出,但即使如此,我也得到完全不同的输出。事实上,即使我发送的命令来自超级终端,我实际上也会从设备中收到'没有这样的命令'的消息。 – martiert 2010-06-25 12:07:09

0
  1. 三重检查设备的波特率的确38400
  2. 三重检查奇偶校验,停止位等
  3. 要注意长距离串行传输信号衰减(可能不是你的问题)

如果以上所有结帐尝试将字符串放入字节数组并通过写入命令发送。只是一个猜测。

0

通过超级终端发送字符以您输入的速度发送字符。通过pyserial发送字符,它们作为连续流传送。接收器(特别是在高波特率下)可能会降低它们,这取决于接收器的性质。另外,当你向解释器发送命令时,你只需要\ r结束符(不包括\ n),(这是通常由hyperterm发送的全部内容)。但是,如果您只是显示这些值,则可能需要\ n来生成新行。