我在使用窗口的WriteFile函數串口發送數據。這是由一個覆盆子pi零接收運行python腳本坐在pyserial readline循環(代碼如下)。在Windows端,我將文件的內容放入緩衝區,然後調用WriteFile函數。對於大約第一個95-99%的數據來說,它的效果非常好,因爲覆盆子pi會收到這些數據。我發送的文件內容大小大約爲200 KB,因此它獲得了大量的好數據,但最終數據卻沒有。每當我發送較少量的數據,如只是一條線,那麼大部分線都被破壞了。Windows以樹莓派零若干問題
Windows代碼(相關位):
config.StopBits = ONESTOPBIT;
config.BaudRate = 115200;
config.Parity = NOPARITY;
config.fBinary = TRUE;
config.fParity = TRUE;
config.ByteSize = 8;
//10 second time out
COMMTIMEOUTS timeOuts;
timeOuts.ReadIntervalTimeout = 10000;
timeOuts.ReadTotalTimeoutConstant = 10000;
timeOuts.ReadTotalTimeoutMultiplier = 10000;
timeOuts.WriteTotalTimeoutConstant = 10000;
timeOuts.WriteTotalTimeoutMultiplier = 10000;
char* packet_buffer;
if (!WriteFile(dataFile, packet_buffer, size, &bytesRead, NULL))
{
_tprintf("There is a problem: %d\n", GetLastError());
}
樹莓派的Python腳本(相關位):
ser = serial.Serial(
port = '/dev/serial0',
baudrate = 115200,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 10
)
data = open("data.txt", "w")
while 1:
x = ser.readline()
data.write(x)
很抱歉,如果這個問題是模糊的,但我一直是這樣的擺弄現在幾天。我的「直覺」是,這是什麼毛病的樹莓派零硬件(像它只是不夠快或東西),但是,當它接收到幾百KB就好並不完全意義。
試着降低波特率,或使某種流量控制。真的,你應該使用流量控制。它是在[DCB結構](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(V = vs.85)的.aspx)。 –
是將波特率降低至例如19200看它是否變得更好,這可能表明需要流量控制。 – barny