波特率串行 windows 端口

Posted

技术标签:

【中文标题】波特率串行 windows 端口【英文标题】:baudrate serial windows port 【发布时间】:2011-07-04 07:58:11 【问题描述】:

为了探测windows串口,我写了这个程序。我将串口波特率设置为 115200 bps。当我运行这个程序时,经过的时间是 1250 毫秒,所以波特率只能达到 102400 bps。我也用类似的程序检查接收的波特率,波特率是一样的。

这是程序:

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?

【问题讨论】:

我直觉你的测量方法不对…… 【参考方案1】:

每个字符有 10 位 - 8 位用于数据加上一个开始和停止位。

如果您计算 14400 个字符(每个字符 10 位)在 115200 bps 下应该花费多长时间,那么您会得到 1250 毫秒:

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

【讨论】:

以上是关于波特率串行 windows 端口的主要内容,如果未能解决你的问题,请参考以下文章

Python串行端口在传输中省略字符

Linux 上的串行通信连接

QSerialPort 不一致的行为取决于起始波特率

与科学仪器的串行通信

如何使用 DCB 结构设置波特率 2.000.000

在 C# 中管理串行端口 [重复]