如何扩展pyseri的输入缓冲区大小

2024-04-23 07:51:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过串行端口与电话通信。在给phone写了一些命令之后,我使用ser.read(ser.inWaiting())来获取它的返回值,但是我总是得到字符总数,实际上,期望的返回应该超过50KB

我试过设置ser.read(50000),但翻译会坚持。

如何扩展输入缓冲区以同时获取所有返回?


Tags: 端口命令readphone字符ser缓冲区电话
3条回答

如果在Windows平台上运行代码,只需在代码中添加一行即可。

ser.set_buffer_size(rx_size = 12800, tx_size = 12800)

其中12800是我选择的任意数字。您可以使接收(rx)和发送(tx)缓冲区大到2147483647(等于2^31-1)

这将允许您扩展输入缓冲区以同时获取所有返回。

请注意,这只适用于某些驾驶员,因为这是一个建议。驱动程序可能不接受您的建议,并将保持其“原始缓冲区大小”。

我也遇到过同样的问题,包括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

如果有人能想出缓冲区大小的解决方案,我会非常高兴!

我猜您正在读取1020字节,因为这就是缓冲区中的所有内容,这就是ser.inWaiting()返回的内容。根据波特率的不同,传输50kb可能需要一段时间,或者手机希望与您有所不同。握手?

检查ser.in waiting的值,然后检查接收到的内容以获取提示。

相关问题 更多 >