博客
关于我
Linux下串口程序设计
阅读量:351 次
发布时间:2019-03-04

本文共 1366 字,大约阅读时间需要 4 分钟。

Linux串口访问指南

Linux系统支持通过设备文件访问串口,类似于其他操作系统。在需要访问串口时,只需打开对应的设备文件即可。Linux系统通常提供多个串口设备,默认位于/dev文件夹下,设备名称通常为ttyS0ttyS1等,其中"S"代表"Serial"的意思。

打开串口后,可以进行读写操作,但在操作之前需要进行串口设置,以确保使用默认配置。以下是详细的操作步骤。

打开串口设备

使用open函数打开对应的串口设备,指定读写模式、控制终端属性和延迟模式:

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

其中:

  • O_RDWR:设置为读写模式
  • O_NOCTTY:指示系统不将该端口视为控制终端,避免由串口发送的信号(如Ctrl+C)中断当前进程
  • O_NDELAY:不等待DCD信号线状态,串口将立即响应

串口配置

配置串口参数需要使用termios结构体和相关函数。以下是详细步骤:

1. 保存原始配置

首先,获取当前串口的属性:

struct termios newtio, oldtio;
tcgetattr(fd, &oldtio);

2. 激活配置选项

设置本地连接和读取模式:

newtio.c_cflag |= CLOCAL | CREAD;

3. 设置波特率

配置串口波特率,常见速率如115200:

cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);

4. 设置数据位

通常使用8位数据位:

newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;

5. 设置奇偶校验

配置奇校验或偶校验:

奇校验配置:

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;

6. 设置停止位

配置停止位数量:

newtio.c_cflag &= ~CSTOPB;

7. 设置最少字符和等待时间

通常设置为0:

newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;

8. 刷新缓存

清除输入和输出缓存:

tcflush(fd, TCOFLUSH);

9. 应用配置

激活配置设置:

tcsetattr(fd, TCSANOW, &newtio);

读写操作

使用标准的readwrite函数进行通信:

读取数据时:

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/

你可能感兴趣的文章
OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
查看>>
OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
查看>>
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
查看>>
OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
查看>>
OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
查看>>