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系统的功能。