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(),因为它们只是丢弃缓冲区内容)。