Python,串行 - 改变波特率,奇怪的行为
Python, serial - changing baudrate, strange behaviour
我在端口为 运行ning 时更改波特率时遇到问题。所有通信都是 运行,波特率为 100k,但我还需要以 10k 波特率发送一些数据。我读过我应该使用 setBaudrate 方法,所以我尝试了这个:
ser = serial.Serial(2, baudrate=BAUD, timeout=TIMEOUT)
def reset(string):
if string:
ser.flushInput() #erase input and output buffers
ser.flushOutput()
ser.setBaudrate(RESET_BAUD) #change baudrate to 10k
ser.write(string)
ser.setBaudrate(BAUD) #go back to 100k
问题是,它不能正常工作。我不知道这里出了什么问题,但只是没有正确接收到字符串。但这是有趣的部分——如果我删除最后一行(回到 100k)和 运行 这个函数从 shell,一切都很好。然后我可以 运行 直接在 shell 中的最后一个命令,而不是在函数内部。
我的问题是这里到底发生了什么以及如何避免它?我只需要一个函数来发送一个具有不同波特率的字符串,然后 return 到原始波特率...
您需要等待足够长的时间让字符串在重置波特率之前发送 - 否则它会发生变化,而其中一些仍在串口 (硬件) 缓冲区.
在最后一行之前添加 time.sleep(0.01*len(string))
。
顺便说一句,尽量不要使用像 string
这样的保留字作为变量名,因为它会导致问题。
我的猜测是波特率在实际发送数据之前被改变了。一个不错的选择是在尝试更改波特率之前强制发送数据。
根据 docs,这是通过调用 Serial.flush()
完成的(不是 flushInput()
或 flushOutput()
,因为它们只是丢弃缓冲区内容)。
我在端口为 运行ning 时更改波特率时遇到问题。所有通信都是 运行,波特率为 100k,但我还需要以 10k 波特率发送一些数据。我读过我应该使用 setBaudrate 方法,所以我尝试了这个:
ser = serial.Serial(2, baudrate=BAUD, timeout=TIMEOUT)
def reset(string):
if string:
ser.flushInput() #erase input and output buffers
ser.flushOutput()
ser.setBaudrate(RESET_BAUD) #change baudrate to 10k
ser.write(string)
ser.setBaudrate(BAUD) #go back to 100k
问题是,它不能正常工作。我不知道这里出了什么问题,但只是没有正确接收到字符串。但这是有趣的部分——如果我删除最后一行(回到 100k)和 运行 这个函数从 shell,一切都很好。然后我可以 运行 直接在 shell 中的最后一个命令,而不是在函数内部。
我的问题是这里到底发生了什么以及如何避免它?我只需要一个函数来发送一个具有不同波特率的字符串,然后 return 到原始波特率...
您需要等待足够长的时间让字符串在重置波特率之前发送 - 否则它会发生变化,而其中一些仍在串口 (硬件) 缓冲区.
在最后一行之前添加 time.sleep(0.01*len(string))
。
顺便说一句,尽量不要使用像 string
这样的保留字作为变量名,因为它会导致问题。
我的猜测是波特率在实际发送数据之前被改变了。一个不错的选择是在尝试更改波特率之前强制发送数据。
根据 docs,这是通过调用 Serial.flush()
完成的(不是 flushInput()
或 flushOutput()
,因为它们只是丢弃缓冲区内容)。