10

我想通过串口与手机通信。在给手机写了一些命令之后,我曾经ser.read(ser.inWaiting())得到它的返回值,但我总是得到1020 bytes字符总数,实际上,期望的返回应该是 over 50KB

我试图设置ser.read(50000),但解释器会挂断。

我将如何扩展输入缓冲区以一次获得所有返回?

4

4 回答 4

6

如果你在 Windows 平台上运行你的代码,你只需要在你的代码中添加一行。

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

其中 12800 是我选择的任意数字。您可以将接收(rx)和传输(tx)缓冲区设为 2147483647(等于 2^31 - 1)

这将允许您扩展输入缓冲区以一次获得所有返回。

请注意,这仅适用于某些驱动程序,因为这是一项建议。驱动程序可能不会接受您的建议,并且会坚持使用其原始缓冲区大小。

于 2018-04-25T14:07:11.903 回答
4

我遇到了完全相同的问题,包括 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

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

于 2013-08-14T14:02:26.457 回答
1

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

检查 ser.inWaiting 的值,然后检查您收到的内容的内容以获取提示。

于 2012-10-16T17:23:16.307 回答
0

pySerial 使用本机操作系统驱动程序进行串行接收。在 Windows 的情况下,输入驱动程序的大小取决于设备驱动程序。

如果可能,您可以在设备管理器设置中增加大小,但最终您只需要足够快地读取数据即可。

于 2017-08-04T18:30:55.770 回答