cat如何知道串口的波特率?

cat如何知道串口的波特率?

我经常cat通过串行连接从 FPGA 开发板查看控制台中的调试信息,但我从来不需要告诉 Linux 波特率是多少。 cat 如何知道串行连接的波特率是多少?

答案1

stty实用程序设置或报告作为其标准输入的设备的终端 I/O 特性。通过该特定介质建立连接时将使用这些特征。cat不知道波特率本身,而是在屏幕上打印从特定连接接收到的信息。

作为示例,stty -F /dev/ttyACM0给出了 ttyACM0 设备的当前波特率。

答案2

cat仅使用端口已配置的任何设置。通过这个小 C 代码片段,您可以看到当前为特定串行端口设置的波特率:

获取波特率.c

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

int main() {
  struct termios tios;
  tcgetattr(0, &tios);
  speed_t ispeed = cfgetispeed(&tios);
  speed_t ospeed = cfgetospeed(&tios);
  printf("baud rate in: 0%o\n", ispeed);
  printf("baud rate out: 0%o\n", ospeed);
  return 0;
}

运行:

./get-baud-rate < /dev/ttyS0 # or whatever your serial port is

您获得的数字可以在 中查找/usr/include/asm-generic/termios.h,其中有#defines 等B9600。请注意,头文件和输出中的数字get-baud-rate都是八进制的。

也许你可以尝试一下,看看这些数字在新靴子上是什么样子,以及它们以后是否会改变。

答案3

串口将cat采用之前使用的波特率,或默认波特率。如果您需要更改波特率,可以stty像这样使用:

stty -F /dev/ttyS1 115200
cat /dev/ttyS1

上面的命令将波特率设置为/dev/ttyS1115200。那么当您使用cat时,它将以115200波特率工作。

相关内容