【发布时间】:2012-09-28 19:39:27
【问题描述】:
我想通过我在 Linux 上的串行端口与具有termios.h 中未定义的非标准波特率的设备通信。
我尝试了this post 中的“波特率别名”方法,但是当我执行我的 C 程序(我将其命名为“testprogram”)时,Linux 显示为"testprogram sets custom speed on ttyS0. This is deprecated."
我在 Google 上进行了一些搜索,似乎还有另一种(更新的?)方法可以将波特率更改为非标准值:在 http://sourceware.org/ml/libc-help/2009-06/msg00016.html 作者说 c_flag 的 @987654329 @ 必须与 BOTHER (=CBAUDEX | B0) 进行或运算。
使用这种方法,波特率直接在struct termios 的c_ispeed 和c_ospeed 成员中设置。但是,我不知道如何在我的 C 程序中使用这种方法。正如作者所说,当我包含termios.h时,没有BOTHER定义/可用,那么应该如何设置波特率呢?
如何在不更改内核的情况下将波特率设置为非标准值?
【问题讨论】:
-
答案将取决于硬件。您使用的是哪种串行硬件? PC 16550 UART 通过将输入时钟除以整数除数来工作。我怀疑它是否有达到 125k 的精度,因为它已经按照标准达到了 115.2k。
-
@Andy Ross:如果是原来的 1.8432 MHz(除以 16 得到 115,200),除以 15 将起作用:122,880 波特(1.7% 偏差)。
-
PicoCom(但不是PuTTY)可以与非标准波特率一起使用,也可以使用比 1.8432 MHz 的(整数)除法更高的粒度(底层硬件可能很多今天比 1980 年代更有能力)。以 360,000 波特为例,Black Magic Probe 中的辅助内置 USB 转串口转换器:
picocom -b 360000 --imap lfcrlf /dev/ttyACM1。这是在Ubuntu MATE 20.04 和示波器上测试的实际波特率。
标签: linux serial-port baud-rate