登录/注册

linux 串口 read n

更多

在 Linux 中,通过串口读取数据通常涉及以下步骤(使用 C/C++ 语言):

核心步骤:

  1. 打开串口设备:使用 open() 函数
  2. 配置串口参数:通过 termios 结构体(波特率、数据位、停止位等)
  3. 读取数据:使用 read() 函数
  4. 关闭串口:使用 close()

示例代码(C语言)

#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    // 1. 打开串口设备(以 /dev/ttyUSB0 为例)
    int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
    if (fd < 0) {
        perror("Error opening serial port");
        return 1;
    }

    // 2. 配置串口参数
    struct termios tty;
    memset(&tty, 0, sizeof tty);

    // 获取当前设置
    if(tcgetattr(fd, &tty) != 0) {
        perror("tcgetattr error");
        return 1;
    }

    // 设置波特率 (115200)
    cfsetospeed(&tty, B115200);
    cfsetispeed(&tty, B115200);

    // 8位数据位 | 无奇偶校验 | 1位停止位
    tty.c_cflag &= ~PARENB;        // 禁用奇偶校验
    tty.c_cflag &= ~CSTOPB;        // 1位停止位
    tty.c_cflag &= ~CSIZE;
    tty.c_cflag |= CS8;            // 8位数据位

    // 禁用流控
    tty.c_cflag &= ~CRTSCTS;
    tty.c_cc[VMIN] = 1;            // 至少读取1字节
    tty.c_cc[VTIME] = 5;           // 超时时间(单位:0.1秒)

    // 应用设置
    if (tcsetattr(fd, TCSANOW, &tty) != 0) {
        perror("tcsetattr error");
        return 1;
    }

    // 3. 读取串口数据
    char buf[256];
    ssize_t bytes_read;
    while (1) {
        bytes_read = read(fd, buf, sizeof(buf));
        if (bytes_read < 0) {
            perror("Read error");
            break;
        }
        if (bytes_read > 0) {
            buf[bytes_read] = '\0'; // 添加字符串结束符
            printf("Received: %s\n", buf);
        }
    }

    // 4. 关闭串口
    close(fd);
    return 0;
}

关键点说明:

  1. 设备权限

    • 确保当前用户有串口访问权限(可执行 sudo usermod -aG dialout $USER
  2. 核心参数配置

    • 波特率B9600B115200 等(需与设备一致)
    • 数据位CS8 (8位) / CS7 (7位)
    • 停止位
      • ~CSTOPB → 1位停止位
      • CSTOPB → 2位停止位
    • 奇偶校验
      • ~PARENB → 无校验
      • PARENB → 奇偶校验启用
    • 流控~CRTSCTS 表示禁用硬件流控
  3. 读取模式

    • VMIN=1, VTIME=5:至少读取1字节,超时时间0.5秒
    • VMIN=0:非阻塞模式(立即返回)
    • VTIME=0:无限等待数据

编译与运行:

# 编译
gcc serial_read.c -o serial_read

# 运行(需要权限)
sudo ./serial_read

其他工具推荐:

如果需要特定场景的扩展(如数据解析、多线程处理),可提供更多需求细节。

为什么你的串口总是丢一些特殊字符?

。Linux下串口设备名称一般为"/dev/ttySn",n是数字,若

2025-02-06 13:26:14

Linux系统串口批量产测工具

本文针对Linux系统上如何对各类串口硬件进行出厂测试进行硬件连接和软件使用说明,提供的软件测试工具wchsertest,适用于USB、PCI、PCIe转串口

2023-04-12 11:38:27

阿尔法Linux

阿尔法Linux ATK-IMX6F800E8GD512M-B 6~24V

2023-03-28 13:06:25

基于Linux的ARM和单片机的串口通信设计

电子发烧友网站提供《基于Linux的ARM和单片机的串口通信设计.pdf》资料免费下载

资料下载 李皓圳 2023-10-11 10:35:47

可以实时打印串口信息的串口调试软件

可以实时打印串口信息的串口调试软件

资料下载 xincv14 2021-11-23 18:17:08

【嵌入式Linux(环境篇)】Linux下的串口助手 —— minicom或putty

!!!如果使用的是虚拟机,确保串口设备挂载到虚拟机里!!!1.Linux下可用的串口助手在

资料下载 李明 2021-11-02 12:50:59

嵌入式linux串口编程

嵌入式开发——Linux串口编程笔记

资料下载 佚名 2021-11-02 10:21:18

Linux操作鸿蒙开发板实现Helloworld程序

本文主要介绍了如何在 Linux 环境下在 Hi3516DV300 开发板搭载鸿蒙 OS 实现一个简单的Helloworld 程序。这跟 Linux 的驱动框架不一样,在

资料下载 o_dream 2020-10-14 12:05:29

Mini Linux

Mini Linux EMMC

2023-03-28 13:06:25

linux串口的应用开发

BB-BLACK是16年买的一块开发板,时隔5年,板子上面却看不到一丝岁月的痕迹,这两天研究一下linux下串口的应用开发。

2023-01-12 16:42:20

Linux下ARM和单片机的串口通信设计

,晶振采用11.0592MHz,定时器工作在方式2,计数初值为0xfd,串口工作在串行方式1(1-8-N-1),采用中断方式收发数据。程序流程图如图3所示。L

2021-11-04 06:30:00

串口驱动到Linux驱动模型

本文通过对Linux下串口驱动的分析。由最上层的C库。到操作系统系统调用层的封装。再到tty子系统的核心。再到一系列线路规程。再到最底层的硬件操作。 对Lin

2020-11-04 14:50:31

嵌入式Linux串口扩展的驱动设计方案解析

本方案介绍WK2X系列UARTs在嵌入式Linux(Android)下扩展多串口方案,尤其是嵌入式Linux

2020-08-31 15:35:12

英创信息技术嵌入式Linux主板Qt串口应用程序简介

:/dev/ttyS1,设置串口参数,创建一个单独的线程来对数据进行收发,使用read函数读取数据,write函数发送数据。并且英创公司将其封装成一个serial类,可以使用serial类方便的操作英创工控主板的

2020-01-17 09:41:25

Linux 使用串口接收数据

这两天在研究Linux下的串口通信,在做接收测试的时候遇到点问题:“每次接收都必须等接收到换行符号才能read到数据”。后来发现其实是因为我在p

2019-07-05 08:29:35
7天热门专题 换一换
相关标签