2011-10-04 105 views
0

我正在嘗試在centos上設置一個串口,但無法使其工作。這是我遇到麻煩的代碼。串口不接受波特率

tcgetattr(idComDev[i], &options); // get current settings 

    printw("default baudrate is %d ", cfgetispeed(&options)); 

    cfsetispeed(&options, B115200); // set baud rate 
    cfsetospeed(&options, B115200); // set baud rate 

tcsetattr(idComDev[i], TCSANOW, &options);// save the settings 

    printw("Seg %d = COM%hd at %d Baudrate",i,CommNo[i], cfgetispeed(&options)); 

由此產生的結果是:Default baud rate is 4098 Seg0 = COM1 at 4098 Baudrate

爲什麼在4098?我無法在任何地方找到這個波特率。

如果我設置波特率爲1800,它說這是10。如果我將它設置爲9600它說,這是在13

我做了一些研究,發現suposidly硬件無法支持此高波特率,但我有一個Java程序在同一臺計算機與我正在嘗試連接的相同設備進行整流。所以我知道這不可能是這種情況。

有誰知道發生了什麼以及如何解決?

+0

什麼是'B115200'? –

+0

@phresnel它是波特率,如果你看這裏http://www.easysw.com/~mike/serial/serial.html那麼你會看到所有的波特率在使用termios – Skeith

+0

之前都是B我看到了,我擔心你可能使用了允許二進制文字的編譯器擴展。 –

回答

3

B115200是一個宏,並擴展到0x1002。這是兩位數的組合:0x1000表示它是非標準速率(正如您發現的),0x2是第二個非標準速率(B576000x1001,這是第一個非標準速率)。

+0

對不起,但我真的不明白如何回答這個問題? – Skeith

+0

哦,0x1002是4098是B115200。您確實將您的串行端口設置爲B115200。沒有問題需要修復。 – MSalters