我正在尝试使用PySerial通过串行(rs232)端口与板进行通信。
板子是瑞萨rl78,下面是我的示例代码。 (基本上,我在这里尝试执行一些预定义的命令。因此,commands
还是返回其他命令列表的命令)
import serial, time, io
ser = serial.Serial()
ser.port = "/dev/cu.usbserial"
ser.baudrate = 19200 # as used for HyperTerminal
ser.timeout = 10 #non-block of 10 seconds
ser.bytesize = serial.EIGHTBITS
ser.parity=serial.PARITY_NONE
ser.stopbits=serial.STOPBITS_ONE
ser.xonoff = False
ser.rtscts = True
ser.dsrdtr = True
ser.dtr = True
ser.rts = True
try:
ser.open()
except Exception, e:
print "error open serial port: " + str(e)
exit()
if ser.is_open:
try:
#ser.reset_input_buffer() #flush input buffer, discarding all its contents
#ser.reset_output_buffer() #flush output buffer, aborting current output
#write data
ser.write(b'commands\r')
ser.reset_input_buffer()
time.sleep(2)
in_wait = ser.in_waiting
while True:
if in_wait != 0:
output = ser.read(in_wait)
print(output)
break
else:
break
ser.close()
except Exception, e1:
print "error communicating...: " + str(e1)
else:
print "cannot open serial port "
从设备的角度来看,我们必须按return
(回车符\ r)才能使用任何终端应用程序执行命令。即超级终端或Mac上的Serial。
因此,上面的代码不会返回任何输出,而只会返回一个空字符串(这是您在按回车键(\ r)时在终端中看到的内容)。该设备的行为就像它得到了返回(\ r)并且该命令被完全忽略了。
为确保PySerial没问题,我尝试使用PySerial的miniterm来获得此终端行为,并且我能够成功执行命令
这里再次要注意的是将CR设置为EOL,以使命令成功执行。
python -m serial.tools.miniterm -e --eol=CR
因此,我对代码的问题以及为什么它不执行命令感到困惑。