探测windows串口我写了这个程序。 我将串口波特率设置为115200 bps。 当我运行这个程序时,经过的时间是1250毫秒,所以波特率只能达到102400bps。 我也用类似的程序检查接收波特率,波特率是一样的。
这个程序是:
char* message = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; int numBytes = 144; c0 = clock() for (;;) { sendSerial(&hCom, message, numBytes ); tx +=numBytes; //14400 bytes * 8 = 115200 bps if (tx >= 14400) { c1 = clock(); runtime_diff_ms = (c1 - c0) * 1000. / CLOCKS_PER_SEC; printf("Tx frames %d Time ms %f", tx, runtime_diff_ms); system ("pause"); return -1; } } bool sendSerial(HANDLE *hCom, char *WriteBuffer, DWORD dwBytesToWrite) { DWORD dwBytesWritten = 0; BOOL bErrorFlag = FALSE; bErrorFlag = WriteFile( *hCom, // open file handle WriteBuffer, // start of data to write dwBytesToWrite, // number of bytes to write &dwBytesWritten, // number of bytes that were written NULL); ... }
这些是我的串口规格:
DCB dcbSerialParams; COMMTIMEOUTS timeouts; dcbSerialParams.BaudRate=CBR_115200; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; timeouts.ReadIntervalTimeout=MAXDWORD; timeouts.ReadTotalTimeoutMultiplier=MAXDWORD; timeouts.ReadTotalTimeoutConstant=5000; // 5sec timeouts.WriteTotalTimeoutMultiplier=10; timeouts.WriteTotalTimeoutConstant=100;
任何人都知道如何解决这个问题,达到115200 bps?
每个字符有10位 – 数据加8位起始和停止位。
如果计算每个字符10位的14400个字符应该以115200 bps的速度运行多长时间,那么您将得到1250 ms:
(14400 characters * 10 bits/character) / (115200 bits/second) = 1.250 seconds