使用pySerial发送命令时遇到问题
我正在尝试通过串口与一个自制的卡片进行通信,所以我使用了pySerial。在Hyperterminal中,一切都正常。我可以发送:
$ audio on
这样音频就能启用了,但如果我使用
ser = serial.Serial("COM1", 38400)
ser.write("audio on\r\n")
就没有任何反应。不过我可以读取到传入的数据,所以通信本身没有问题。即使我把 \r\n 改成 \n 或者 \r 也没有帮助。
补充说明:有时候我发送的命令和在HyperTerminal中能正常工作的命令完全一样时,系统会反馈:没有这个命令。设置和HyperTerminal中的完全一样。
解决办法:为了让它正常工作,我需要一个一个字符地发送,并且在传输结束时加上 \r。
3 个回答
0
通过Hyperterminal发送字符时,字符的发送速度和你输入的速度是一样的。而通过pyserial发送字符时,它们会以连续的流形式发送。接收方(特别是在高波特率下)可能会因为接收器的特性而丢失一些字符。
另外,当你向解释器发送命令时,只需要用到\r这个结束符(不需要\n),这通常是Hyperterminal发送的内容。不过,如果你只是想显示数值,可能需要用到\n来生成换行。
0
- 仔细确认一下设备的波特率确实是38400。
- 再仔细确认一下奇偶校验、停止位等设置。
- 要注意,串行传输在长距离时可能会信号衰减(这可能不是你的问题)。
如果以上都没问题,可以试着把字符串放进一个字节数组里,然后通过写入命令发送。这个只是个猜测。
2
拿一个示波器(你有吧?)来观察串行线。每秒发送一个字符,看看示波器上显示的内容(记得设置它在起始位触发)。串口的数据顺序是:起始位、最低有效位(LSB)、最高有效位(MSB)、校验位和停止位。
看看有没有字符没有发送出去,或者是否有某种规律。还有一种可能是,所有数据其实都通过了端口,但你的电路板丢失了字符。