2011-10-04 87 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