本文共 1366 字,大约阅读时间需要 4 分钟。
Linux系统支持通过设备文件访问串口,类似于其他操作系统。在需要访问串口时,只需打开对应的设备文件即可。Linux系统通常提供多个串口设备,默认位于/dev文件夹下,设备名称通常为ttyS0、ttyS1等,其中"S"代表"Serial"的意思。
打开串口后,可以进行读写操作,但在操作之前需要进行串口设置,以确保使用默认配置。以下是详细的操作步骤。
使用open函数打开对应的串口设备,指定读写模式、控制终端属性和延迟模式:
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); 其中:
O_RDWR:设置为读写模式O_NOCTTY:指示系统不将该端口视为控制终端,避免由串口发送的信号(如Ctrl+C)中断当前进程O_NDELAY:不等待DCD信号线状态,串口将立即响应配置串口参数需要使用termios结构体和相关函数。以下是详细步骤:
首先,获取当前串口的属性:
struct termios newtio, oldtio; tcgetattr(fd, &oldtio); 设置本地连接和读取模式:
newtio.c_cflag |= CLOCAL | CREAD; 配置串口波特率,常见速率如115200:
cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); 通常使用8位数据位:
newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; 配置奇校验或偶校验:
newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag |= ~PARODD; 配置停止位数量:
newtio.c_cflag &= ~CSTOPB; 通常设置为0:
newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; 清除输入和输出缓存:
tcflush(fd, TCOFLUSH); 激活配置设置:
tcsetattr(fd, TCSANOW, &newtio); 使用标准的read和write函数进行通信:
读取数据时:
n = read(fd, buffer, sizeof(buffer)); 写入数据时:
n = write(fd, "tangquan\r\n", 10); 在非阻塞模式下读取:
fcntl(fd, F_SETFL, FNDELAY); 恢复阻塞模式:
fcntl(fd, F_SETFL, 0); 使用close函数关闭文件描述符:
close(fd); 转载地址:http://bhzh.baihongyu.com/