2011-07-04 39 views
1

探測windows串口我寫過這個程序。我將串口波特率設置爲115200 bps。當我運行這個程序時,經過時間是1250毫秒,所以波特率只能達到102400bps。我也用類似的程序檢查接收波特率,波特率是一樣的。baudrate串口windows端口

下面是程序:

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?

+0

我有一個直覺的測量方法是錯誤的... –

回答

5

每個字符有10位 - 數據加8位起始和停止位。

如果計算多長時間,每字10位字符14400應在115200那麼你得到1250毫秒:

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