Linux串口开启之路

1. Linux中的串口概述

Linux是一个开放源代码的操作系统,提供了丰富的功能和灵活性,可以在各种设备上运行。串口是一种通信接口,用于在计算机与其他设备之间建立串行数据通信连接。

在Linux系统中,串口通信可以通过串口设备文件进行配置和管理,例如/dev/ttyS0、/dev/ttyUSB0等。通过串口,可以实现与其他设备的数据交互,例如使用串口连接外部传感器、嵌入式设备等。

2. 查找和确认可用的串口设备

2.1 使用dmesg命令来查看串口设备信息

dmesg命令可以显示内核的信息日志,包括串口设备的信息。在终端中输入以下命令:

dmesg | grep tty

可以看到类似如下的输出:

[    5.819937] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 6.020789] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 6.201866] 00:09: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

[ 6.370385] 00:0a: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A

[ 6.554268] 00:0b: ttyS3 at I/O 0x2e8 (irq = 3) is a 16550A

上面的输出中,"ttyS0"、"ttyS1"、"ttyS2"、"ttyS3"等都是串口设备,对应了不同的串口地址和中断请求(IRQ)。

2.2 使用ls /dev命令来查看串口设备文件

在终端中输入以下命令:

ls /dev/tty*

可以看到类似如下的输出:

/dev/tty    /dev/tty23  /dev/tty38  /dev/tty53  /dev/ttyS1  /dev/ttyS16  /dev/ttyS31

/dev/tty0 /dev/tty24 /dev/tty39 /dev/tty54 /dev/ttyS10 /dev/ttyS17 /dev/ttyS4

/dev/tty1 /dev/tty25 /dev/tty4 /dev/tty55 /dev/ttyS11 /dev/ttyS18 /dev/ttyS5

/dev/tty10 /dev/tty26 /dev/tty40 /dev/tty56 /dev/ttyS12 /dev/ttyS19 /dev/ttyS6

/dev/tty11 /dev/tty27 /dev/tty41 /dev/tty57 /dev/ttyS13 /dev/ttyS2 /dev/ttyS7

/dev/tty12 /dev/tty28 /dev/tty42 /dev/tty58 /dev/ttyS14 /dev/ttyS20 /dev/ttyS8

/dev/tty13 /dev/tty29 /dev/tty43 /dev/tty59 /dev/ttyS15 /dev/ttyS21 /dev/ttyS9

/dev/tty14 /dev/tty3 /dev/tty44 /dev/tty6 /dev/ttyS2 /dev/ttyS22

/dev/tty15 /dev/tty30 /dev/tty45 /dev/tty60 /dev/ttyS3 /dev/ttyS23

/dev/tty16 /dev/tty31 /dev/tty46 /dev/tty61 /dev/ttyS4 /dev/ttyS24

/dev/tty17 /dev/tty32 /dev/tty47 /dev/tty62 /dev/ttyS5 /dev/ttyS25

/dev/tty18 /dev/tty33 /dev/tty48 /dev/tty63 /dev/ttyS6 /dev/ttyS26

/dev/tty19 /dev/tty34 /dev/tty49 /dev/tty7 /dev/ttyS7 /dev/ttyS27

/dev/tty2 /dev/tty35 /dev/tty5 /dev/tty8 /dev/ttyS8 /dev/ttyS28

/dev/tty20 /dev/tty36 /dev/tty50 /dev/tty9 /dev/ttyS9 /dev/ttyS29

/dev/tty21 /dev/tty37 /dev/tty51 /dev/ttyMFD0 /dev/ttyS0 /dev/ttyS30

/dev/tty22 /dev/tty37 /dev/tty52 /dev/ttyMFD1 /dev/ttyS0 /dev/ttyS31

可以看到以"/dev/ttyS"开头的设备文件列表,对应了不同的串口。

3. 配置与设置串口

3.1 使用stty命令配置串口参数

stty命令可以用于配置和显示串口的参数,如波特率、数据位、停止位、奇偶校验等。

在终端中输入以下命令来显示当前串口的参数:

stty -F /dev/ttyS0

可以看到类似如下的输出:

speed 115200 baud; line = 0;

min = 0; time = 0;

-icrnl

-opost

-isig

-icanon

-echo

...(更多参数)

可以通过修改参数来配置串口,例如修改波特率为9600:

stty -F /dev/ttyS0 9600

上述命令将串口ttyS0的波特率修改为9600。

3.2 使用echo命令向串口写入数据

echo命令可以将指定的字符串或数据发送到终端设备,也可以用来向串口写入数据。

在终端中输入以下命令来向串口写入数据:

echo 'Hello, Serial!' > /dev/ttyS0

上述命令将字符串'Hello, Serial!'发送到串口ttyS0,可以通过其他设备来接收该数据。

4. 读取串口数据

4.1 使用cat命令读取串口数据

cat命令可以用于读取文件内容,也可以用于读取串口数据。

在终端中输入以下命令来读取串口数据:

cat /dev/ttyS0

上述命令将持续读取串口ttyS0的数据,并将其输出到终端上。

4.2 使用C语言代码读取串口数据

可以使用C语言编写程序来读取和处理串口数据。

以下是一个简单的C语言程序示例:

#include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

#include <termios.h>

int main()

{

int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);

if (fd == -1)

{

printf("Failed to open serial port\n");

return -1;

}

struct termios options;

tcgetattr(fd, &options);

options.c_cflag = B9600 | CS8 | CLOCAL | CREAD;

tcsetattr(fd, TCSANOW, &options);

char buffer[256];

while (1)

{

int bytesRead = read(fd, buffer, sizeof(buffer));

if (bytesRead > 0)

{

printf("Received: %.*s\n", bytesRead-1, buffer);

}

}

close(fd);

return 0;

}

上述程序打开/dev/ttyS0串口并进行初始化配置,然后循环读取串口数据并输出到终端上。

5. 总结

本文介绍了在Linux系统中开启串口的过程,包括查找和确认可用的串口设备、配置与设置串口参数,以及读取串口数据的方法。通过掌握这些基本知识,可以实现与外部设备的串行通信,拓展Linux系统的功能。

操作系统标签