linux 串口 read n
在 Linux 中,通过串口读取数据通常涉及以下步骤(使用 C/C++ 语言):
核心步骤:
- 打开串口设备:使用
open()函数 - 配置串口参数:通过
termios结构体(波特率、数据位、停止位等) - 读取数据:使用
read()函数 - 关闭串口:使用
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;
}
关键点说明:
-
设备权限:
- 确保当前用户有串口访问权限(可执行
sudo usermod -aG dialout $USER)
- 确保当前用户有串口访问权限(可执行
-
核心参数配置:
- 波特率:
B9600、B115200等(需与设备一致) - 数据位:
CS8(8位) /CS7(7位) - 停止位:
~CSTOPB→ 1位停止位CSTOPB→ 2位停止位
- 奇偶校验:
~PARENB→ 无校验PARENB→ 奇偶校验启用
- 流控:
~CRTSCTS表示禁用硬件流控
- 波特率:
-
读取模式:
VMIN=1, VTIME=5:至少读取1字节,超时时间0.5秒VMIN=0:非阻塞模式(立即返回)VTIME=0:无限等待数据
编译与运行:
# 编译
gcc serial_read.c -o serial_read
# 运行(需要权限)
sudo ./serial_read
其他工具推荐:
- 命令行调试:
sudo apt install screen screen /dev/ttyUSB0 115200 - Python 简单实现:
import serial ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) while True: data = ser.read(100) # 读取100字节 if data: print(data.decode())
如果需要特定场景的扩展(如数据解析、多线程处理),可提供更多需求细节。
Linux系统串口批量产测工具
本文针对Linux系统上如何对各类串口硬件进行出厂测试进行硬件连接和软件使用说明,提供的软件测试工具wchsertest,适用于USB、PCI、PCIe转串口
2023-04-12 11:38:27
【嵌入式Linux(环境篇)】Linux下的串口助手 —— minicom或putty
!!!如果使用的是虚拟机,确保串口设备挂载到虚拟机里!!!1.Linux下可用的串口助手在
资料下载
李明
2021-11-02 12:50:59
在Linux操作鸿蒙开发板实现Helloworld程序
本文主要介绍了如何在 Linux 环境下在 Hi3516DV300 开发板搭载鸿蒙 OS 实现一个简单的Helloworld 程序。这跟 Linux 的驱动框架不一样,在
资料下载
o_dream
2020-10-14 12:05:29
合Linux下ARM和单片机的串口通信设计
,晶振采用11.0592MHz,定时器工作在方式2,计数初值为0xfd,串口工作在串行方式1(1-8-N-1),采用中断方式收发数据。程序流程图如图3所示。L
从串口驱动到Linux驱动模型
本文通过对Linux下串口驱动的分析。由最上层的C库。到操作系统系统调用层的封装。再到tty子系统的核心。再到一系列线路规程。再到最底层的硬件操作。 对Lin
2020-11-04 14:50:31
英创信息技术嵌入式Linux主板Qt串口应用程序简介
:/dev/ttyS1,设置串口参数,创建一个单独的线程来对数据进行收发,使用read函数读取数据,write函数发送数据。并且英创公司将其封装成一个serial类,可以使用serial类方便的操作英创工控主板的
2020-01-17 09:41:25
Linux 使用串口接收数据
这两天在研究Linux下的串口通信,在做接收测试的时候遇到点问题:“每次接收都必须等接收到换行符号才能read到数据”。后来发现其实是因为我在p
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览