关于linux:有没有办法获得C语言支持的波特率?

Is there a way to get supported baud rates in C?

我有一个应用程序在PC和带有运行uCLinux的微控制器的电路板之间进行通讯。当我通过/dev/TTYS0发送消息时,我在PC端收到消息,但是消息却变得乱七八糟。我非常确定我的波特率不匹配。

在PC端,我使用提供的波特率:

1
2
Serial<id=0x1efb320, open=True>(port='COM4', baudrate=9600, bytesize=8, parity='
N'
, stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

在Linux板上,我在代码中设置了相同的波特率:

1
2
3
4
5
tcgetattr(fd, &options);
cfsetispeed(&options, 9600);
cfsetospeed(&options, 9600);
tcsetattr(fd, TCSANOW, &options);
tcgetattr(fd, &options);

当我测试PC(Win 7)-> Linux Box(OpenSuse)时,这对我有用,因此我知道理论是正确的。现在,我已经将其移植到了我的真实目标(运行uCLinux的Coldfire微控制器板)上,我开始遇到垃圾了。

因此,我的第一个选择是"猜测并检查"各种波特率,以查看是否可以找到合适的波特率,但我不想以编程方式找到一种方法来识别特定目标支持的波特率。

我确定有一些API,但是我还没有找到。有想法吗?

编辑:
似乎可以通过COMMPROP结构在Windows上获得最大波特率。 Linux上是否还存在类似的东西?


请阅读cfsetospeed()手册页。 speed参数必须是常数:B50B75,..,B9600B19200B38400B57600B115200B230400,而不仅仅是速率 作为一个数字。

要确定是否支持特定速率,只需将其设置为cfset?speed() + tcsetattr(),然后回读设置(使用tcgetattr() + cfget?speed()),然后检查速度是否设置为所需的值 。 我认为,驾驶员应拒绝无效的波特率。