我正在玩我的PC和STM32开发板之间的双向串行通信。我使用Python3.7与PySerial 3.4一起打开串口,接收/接收来自/到开发板的消息。除了我尝试读取和打印多行消息之外,一切都按预期的方式工作。在这种情况下,我只得到消息的第一行。
在微控制器上的程序是这样的,如果我通过串行发送'H‘到控制器板上,我会得到一个多行帮助消息。开发板发送的多行消息如下所示:
"HELP\r\nList of commands:\r\nH: Display list of commands\r\nS: Start the application"因此,我希望看到以下打印出来:
HELP
List of commands:
H: Display list of commands
S: Start the application但我只得到了:
HELP如果我用PuTTY连接到端口并手动发送'H‘,我就会得到完整的消息;所以我知道这不是我的微控制器程序的问题。
我的python代码如下所示:
import serial
import io
class mySerial:
def __init__(self, port, baud_rate):
self.serial = serial.Serial(port, baud_rate, timeout=1)
self.serial_io_wrapped = io.TextIOWrapper(io.BufferedRWPair(self.serial, self.serial))
# receive message via serial
def read(self):
read_out = None
if self.serial.in_waiting > 0:
read_out = self.serial_io_wrapped.readline()
return read_out
# send message via serial
def write(self, message):
self.serial.write(message)
# flush the buffer
def flush(self):
self.serial.flush()
commandToSend = 'H'
ser = mySerial('COM9', 115200)
ser.flush()
ser.write(str(commandToSend).encode() + b"\n")
while True:
incomingMessage = ser.read()
if incomingMessage is not None:
print(incomingMessage)任何帮助都将不胜感激。
发布于 2019-01-20 16:10:46
您需要在每一行之后等待新的数据。在此基础上,您的读取方法需要修改如下:
def read(self):
read_out = None
timeout = time.time() + 0.1
while ((self.serial.in_waiting > 0) and (timeout > time.time())):
pass
if self.serial.in_waiting > 0:
read_out = self.serial_io_wrapped.readline()
return read_outhttps://stackoverflow.com/questions/54203887
复制相似问题