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


24

我经常cat通过串行连接从我的FPGA开发板在控制台中查看调试信息,但是我从来不必告诉linux波特率是多少。猫怎么知道串行连接的波特率是多少?


您没有设置端口,例如minicom之前?它在这里不起作用。只有设置了串行端口参数后,才能使用cat
Marco Marco

它没有设置或不知道波特率,它只是从设备读取数据。
Ulrich Dangel 2013年

@Marco,我不知道Debian是否有一些默认的波特率设置,但是我没有在任何地方进行设置。
斯坦里2013年

Answers:


34

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

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


1
但是stty怎么知道波特率呢?这个答案只能以某种方式提出一个问题,即可以自动检测波特率还是将波特率设置为某个点(例如通过stty
humanityANDpeace

@humanityANDpeace我假设默认的波特率是我碰巧使用的波特率。后来,当我更改设备上的波特率时,确实需要通过stty对其进行更改。
斯坦里

9

cat仅使用端口已配置的任何设置。通过这个小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#define例如s等B9600。请注意,头文件和get-baud-rate输出中的数字均为八进制。

也许您可以尝试一下,看看这些数字在全新启动时是什么样的,以及它们以后是否会更改。


2
我刚刚找到了stty执行此操作的命令。例如,stty -F /dev/ttyACM0给我当前的波特率,这对我的设备是正确的。
斯坦里2013年

当然,这是一个更好的主意。
clacke
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.