1. 什么是串口
串口(Serial port),是电脑上用于连接外部设备的一个通信接口,也可以称为COM口。串口以数据的串行传输方式进行通信,相对于并口的并行传输方式,串口只使用了一根信号线进行数据传输。
2. Linux下串口的配置
2.1 查看可用的串口
在Linux系统中,可以使用以下命令查看当前可用的串口:
dmesg | grep tty
该命令会打印出系统识别到的串口设备。常见的串口设备名包括 /dev/ttyS0、/dev/ttyS1、/dev/ttyUSB0 等。
2.2 配置串口参数
在使用串口进行通信前,需要对串口进行合适的配置。可以使用以下命令进行串口参数的设置:
stty -F /dev/ttyS0 speed 9600
上述命令将串口 /dev/ttyS0 的波特率设置为9600。
除了波特率,还可以配置数据位、停止位、奇偶校验等参数。例如,以下命令设置串口 /dev/ttyS0 的数据位为8位、停止位为1位、无奇偶校验:
stty -F /dev/ttyS0 cs8 -cstopb -parenb
3. 串口通信软件
3.1 minicom
minicom 是一款常用的串口通信软件,可以通过以下命令安装:
sudo apt-get install minicom
安装完成后,可以使用以下命令启动 minicom:
minicom -b 9600 -D /dev/ttyS0
上述命令将以9600波特率连接到串口 /dev/ttyS0。
3.2 screen
screen 是另一款常用的串口通信软件。可以使用以下命令安装:
sudo apt-get install screen
安装完成后,可以使用以下命令启动 screen:
screen /dev/ttyS0 9600
上述命令将以9600波特率连接到串口 /dev/ttyS0。
4. 串口通信示例
以下示例演示了如何通过串口发送和接收数据。
4.1 打开串口
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
printf("Failed to open serial port\n");
return -1;
}
上述代码片段中,使用 open() 函数打开串口 /dev/ttyS0。使用 O_RDWR 模式进行读写,O_NOCTTY 配置为不将该串口作为控制终端,O_NDELAY 立即返回打开结果。
4.2 配置串口参数
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600); // 输入波特率
cfsetospeed(&options, B9600); // 输出波特率
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB; // 无奇偶校验
options.c_cflag &= ~CSTOPB; // 1位停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8; // 8位数据位
tcsetattr(fd, TCSANOW, &options);
以上代码片段将串口参数配置成与 minicom 和 screen 中设置的参数相同,可以根据实际需求进行修改。
4.3 读取串口数据
char buffer[255];
int bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead == -1) {
printf("Failed to read from serial port\n");
return -1;
}
printf("Received: %s\n", buffer);
上述代码片段使用 read() 函数读取串口接收到的数据,并将其打印出来。
4.4 发送串口数据
char message[] = "Hello, serial port!";
int bytesWritten = write(fd, message, sizeof(message) - 1);
if (bytesWritten == -1) {
printf("Failed to write to serial port\n");
return -1;
}
printf("Sent: %s\n", message);
上述代码片段使用 write() 函数将指定的数据发送到串口。
总结
本文介绍了在Linux下使用串口的配置方法和两款常用的串口通信软件。同时给出了使用C语言进行串口通信的示例代码。
需特别注意的是,在使用串口通信时,需要确保串口参数的一致性,包括波特率、数据位、停止位等。否则会导致通信失败。