port série baudrate

Pour sonder le port série de Windows, j’ai écrit ce programme. Je règle la vitesse de transmission du port série à 115200 bps. Lorsque je lance ce programme, le temps écoulé est de 1250 ms. Le débit en bauds n’atteint que 102400 bps. Je vérifie également à la réception le débit en bauds avec un programme similaire et le débit est le même.

Voici le programme:

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); ... } 

Voici les spécifications de mon port série:

 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; 

Quelqu’un sait comment résoudre ce problème pour atteindre 115200 bps?

Il y a 10 bits par caractère – 8 bits pour les données plus un bit de début et un bit d’arrêt.

Si vous calculez combien de temps 14400 caractères à 10 bits par caractère devraient prendre à 115200 bps, vous obtenez 1250 ms:

 (14400 characters * 10 bits/character) / (115200 bits/second) = 1.250 seconds