在Linux环境下进行串口编程,通常会用到termios
结构体及相关函数来设置和控制串口参数。
一、基础概念
二、相关优势
三、类型(这里指串口通信的类型相关概念)
四、应用场景
五、示例代码(C语言)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
int main() {
int serial_port;
struct termios tty;
// 打开串口设备(例如/dev/ttyS0)
serial_port = open("/dev/ttyS0", O_RDWR);
if (serial_port < 0) {
printf("Error %i from open: %s\n", errno, strerror(errno));
return 1;
}
// 获取当前串口设置
tcgetattr(serial_port, &tty);
// 设置波特率为9600
cfsetispeed(&tty, B9600);
cfsetospeed(&tty, B9600);
// 设置数据位为8位
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
// 设置无奇偶校验
tty.c_cflag &= ~PARENB;
// 设置1个停止位
tty.c_cflag &= ~CSTOPB;
// 禁用硬件流控制
tty.c_cflag &= ~CRTSCTS;
// 启用接收和发送数据
tty.c_cflag |= (CLOCAL | CREAD);
// 设置本地模式为原始模式(不处理回车换行等特殊字符)
tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
// 设置输入模式为无处理
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
// 设置输出模式为无处理
tty.c_oflag &= ~OPOST;
// 应用新的串口设置
tcsetattr(serial_port, TCSANOW, &tty);
// 发送数据示例
char *data = "Hello, Serial Port!";
write(serial_port, data, strlen(data));
close(serial_port);
return 0;
}
六、常见问题及解决方法
termios
结构体中的相关参数。/dev/ttyS0
等),并且当前用户是否有权限访问该设备。可以通过ls -l /dev/ttyS0
查看权限,必要时使用sudo
或者调整权限(不推荐随意调整系统设备权限)。lsof /dev/ttyS0
查看是否有其他进程正在使用该串口,如果有,关闭相关进程或者选择其他串口。没有搜到相关的文章