gpt4 book ai didi

Linux 设置更高的波特率和相关设置

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:20 24 4
gpt4 key购买 nike

输入硬件:BeagleBone Black,上面运行着一些 GNU/Linux 发行版。

我想要实现的目标:我想将一些 UART 外围设备设置为 921600 波特值,并能够设置其他串行相关设置(例如 start/停止位、奇偶校验、数据位、硬件流控制等)。

到目前为止,在 Linux 中,我至少找到了三种配置此参数的方法:

  1. 使用struct termios 形成termios.h 头文件。
  2. 使用 asm/termios.h 头文件中的 struct termios2
  3. 使用 stty(1) GNU/Linux 实用程序。

问题是什么:

第一种方法我不能使用921600波特率值(没有定义这么高的值,它只能达到230400 baud。所以这个方法无效。

第二种方法为我提供了一种更改自定义 baud 速率值的方法,但也很棘手,因为它不提供一些函数,如 tcgetattr()tcsendbreak()tcflush() 等等。此函数存在于第一个描述的方法中,由于 (1),我不能同时包含头文件 termios.hasm/termios.h .

最后一种方法也不起作用,或者至少它不适用于我想进行的所有设置。这是我正在使用的当前方法,我正在打开目标文件,我得到一个文件描述符,我为该文件描述符设置了通信参数(波特率(首先我设置了一个较低的值)、奇偶校验、开始/停止位等)使用第一种方法,然后我使用 stty(1) 实用程序将波特率值更改(覆盖)为 921600(我制作了一个 系统(...) 函数调用来执行此操作)。

例如,如果我想更改 HW 流控制,此方法将不起作用(它不会覆盖该设置,就像 baud 值一样).

解决方案是什么?

像这样将两种设置参数的方法混合到一个UART通信链接上可以吗?

最佳答案

您可以使用 setserial控制台实用程序:

1) 从setserial输出中获取baud_base值

setserial -a /dev/<...>

2) 计算除数 = baud_base/desired_baud_rate

例如,如果 baud_base = 3000000 (3MHz):

baud_rate = 115200 -> divisor = 26.04 (approximately 26)
baud_rate = 230400 -> divisor = 13.02 (approximately 13)
baud_rate = 921600 -> divisor = 3.26

3.26 对于设置 divisor=3 来说太多了,对于设置 divisor=4 来说又太少了。

因此,在这种情况下,由于硬件限制,您不能使用 baud_rate=921600。您可以选择 divisor=3 (baud_rate=1000000) 或 divisor=4 (baud_rate=750000)。这些波特率不是标准的,但是可能的。

stty -F /dev/<...> 9600 -icrnl -ixon -crtscts -parenb # desired UART settings
setserial /dev/<...> spd_cust # use custom value for divisor
setserial /dev/<...> divisor 3 # set custom value for divisor
stty -F /dev/<...> 38400 # activate setserial settings
# now baud_rate is (baud_base / divisor)

关于Linux 设置更高的波特率和相关设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com