我想通过串口与手机通讯。在将一些命令写入手机后,我使用ser.read(ser.inWaiting())
来获取其返回值,但我总是得到1020 bytes
个字符,实际上,所需的返回值应该超过50KB
。
我尝试设置ser.read(50000)
,但解释器会挂起。
如何扩展输入缓冲区以立即获得所有返回值?
答案 0 :(得分:3)
我遇到了完全相同的问题,包括1020字节的缓冲区大小,并没有找到改变它的方法。我的解决方案是实现一个循环:
in_buff=''
while mbed.inWaiting():
in_buff+=mbed.read(mbed.inWaiting()) #read the contents of the buffer
time.sleep(0.11) #depending on your hardware, it can take time to refill the buffer
如果有人能提出缓冲区大小调整解决方案,我会非常高兴!
答案 1 :(得分:2)
如果您在Windows平台上运行代码,则只需在代码中添加一行。
ser.set_buffer_size(rx_size = 12800, tx_size = 12800)
其中12800是我选择的任意数字。你可以使接收(rx)和发送(tx)缓冲区大到2147483647(等于2 ^ 31 - 1)
这将允许您扩展输入缓冲区以立即获得所有返回。
请注意,这仅适用于某些驱动程序,因为它是推荐。司机可能不会接受你的推荐,并会坚持使用它的建议。原始缓冲区大小。
答案 2 :(得分:1)
我猜你正在读取1020个字节,因为这就是缓冲区中的所有内容,这就是ser.inWaiting()返回的内容。根据波特率,50 KB可能需要一段时间才能传输,或者手机预计会有不同的东西。握手?
检查ser.inWaiting的值,然后检查 接收提示的内容。
答案 3 :(得分:0)
pySerial使用本机OS驱动程序进行串行接收。对于Windows,输入驱动程序的大小基于设备驱动程序。
如果可能,您可以在设备管理器设置中增加大小,但最终您只需要足够快地读取数据。