当前位置: 首页 > news >正文

ubuntu 安装串口工具和添加虚拟串口

目录

一、串口工具安装

二、使用Windows本身虚拟的串口

(一)添加串口

1、保证虚拟机是关闭状态,打开“虚拟机设置”,点击“添加”。

2、选中“串行端口”,点击“完成”。

3、选中刚添加的串口,下拉选择自己需要使用的端口,点击完成即可。

(二)注册权限 

 1、注意:在使用串口进行通信时,需要先注册其权限。

  2、注册完权限后,打开CuteCom,选择串口,再点击Open,即可打开。如果没有注册权限,则打不开。

3、打开成功: 

(三)通讯测试

三、添加虚拟串口

原文:

1.下载socat

2.使用socat配置虚拟串口

3.重新打开终端 编写串口通信的代码 

4.执行程序

5.总结


一、串口工具安装

安装cute:

sudo apt-get install cutecom

安装完成,打开如下,点击“Settings”可以进行设置:

二、使用Windows本身虚拟的串口

(一)添加串口

1、保证虚拟机是关闭状态,打开“虚拟机设置”,点击“添加”。

2、选中“串行端口”,点击“完成”。

3、选中刚添加的串口,下拉选择自己需要使用的端口,点击完成即可。

进行查看:

(二)注册权限 

 1、注意:在使用串口进行通信时,需要先注册其权限。

//注册所有:
sudo chmod 777 /dev -R

  2、注册完权限后,打开CuteCom,选择串口,再点击Open,即可打开。如果没有注册权限,则打不开。

3、打开成功: 

(三)通讯测试

        1、在Windows下开启串口助手,选择与Ubuntu添加的端口成对的另一个虚拟串口,并使用Hex编码;

        2、CuteCom选择Hex的编码方式,再随机输入发送的内容,按回车即可发送,然后就能在Windows上的串口助手上看到发送过来的数据了。

三、添加虚拟串口

原文:

https://blog.csdn.net/qq_62106718/article/details/130949814

使用socat完成虚拟串口的配置

1.下载socat

sudo apt install socat

2.使用socat配置虚拟串口

socat -d -d pty,raw,echo=0 pty,raw,echo=0

 可以看到配置好的两个虚拟串口的路径:/dev/pts/3  /dev/pts/3, 不要关闭该进程。

3.重新打开终端 编写串口通信的代码 

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <error.h>
#include <termios.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
typedef struct termios termios_t;typedef struct serial_data{char databuf[100];//发送/接受数据int serfd;//串口文件描述符}ser_Data;void *sersend(void *arg);
void *serrecv(void *arg);
int main(int argc,char *argv[])
{pthread_t pid1,pid2;pthread_attr_t *pthread_arr1,*pthread_arr2;pthread_arr1 = NULL;pthread_arr2 = NULL;int serport1fd;/*   进行串口参数设置  */termios_t *ter_s = malloc(sizeof(*ter_s));serport1fd = open(argv[1],O_RDWR | O_NOCTTY | O_NDELAY);//不成为控制终端程序,不受其他程序输出输出影响if(serport1fd < 0){printf("%s open faild\r\n",argv[1]);return -1;}bzero(ter_s,sizeof(*ter_s));ter_s->c_cflag |= CLOCAL | CREAD; //激活本地连接与接受使能ter_s->c_cflag &= ~CSIZE;//失能数据位屏蔽ter_s->c_cflag |= CS8;//8位数据位ter_s->c_cflag &= ~CSTOPB;//1位停止位ter_s->c_cflag &= ~PARENB;//无校验位ter_s->c_cc[VTIME] = 0;ter_s->c_cc[VMIN] = 0;/*1 VMIN> 0 && VTIME> 0VMIN为最少读取的字符数,当读取到一个字符后,会启动一个定时器,在定时器超时事前,如果已经读取到了VMIN个字符,则read返回VMIN个字符。如果在接收到VMIN个字符之前,定时器已经超时,则read返回已读取到的字符,注意这个定时器会在每次读取到一个字符后重新启用,即重新开始计时,而且是读取到第一个字节后才启用,也就是说超时的情况下,至少读取到一个字节数据。2 VMIN > 0 && VTIME== 0在只有读取到VMIN个字符时,read才返回,可能造成read被永久阻塞。3 VMIN == 0 && VTIME> 0和第一种情况稍有不同,在接收到一个字节时或者定时器超时时,read返回。如果是超时这种情况,read返回值是0。4 VMIN == 0 && VTIME== 0这种情况下read总是立即就返回,即不会被阻塞。----by 解释粘贴自博客园*/cfsetispeed(ter_s,B115200);//设置输入波特率cfsetospeed(ter_s,B115200);//设置输出波特率tcflush(serport1fd,TCIFLUSH);//刷清未处理的输入和/或输出if(tcsetattr(serport1fd,TCSANOW,ter_s) != 0){printf("com set error!\r\n");}char buffer[] = {"hello my world!\r\n"};char recvbuf[100] = {};ser_Data snd_data;ser_Data rec_data;snd_data.serfd = serport1fd;rec_data.serfd = serport1fd;memcpy(snd_data.databuf,buffer,strlen(buffer));//拷贝发送数据pthread_create(&pid1,pthread_arr1,sersend,(void *)&snd_data);pthread_create(&pid2,pthread_arr2,serrecv,(void *)&rec_data);ssize_t sizec;while(1){usleep(100000);}pthread_join(pid1,NULL);pthread_join(pid2,NULL);free(ter_s);return 0;
}void *sersend(void *arg)//串口发送线程函数
{ser_Data *snd = (ser_Data *)arg ;int ret;while(1){scanf("%s",snd->databuf);ret = write(snd->serfd,snd->databuf,strlen(snd->databuf));if(ret > 0){printf("send success, data is  %s\r\n",snd->databuf);}else{printf("send error!\r\n");}usleep(300000);/*if(发生中断)break;//退出*/}
}void *serrecv(void *arg)//串口发送线程函数
{ser_Data *rec= (ser_Data *)arg ;int ret;while(1){ret = read(rec->serfd,rec->databuf,1024);if(ret > 0){printf("recv success,recv size is %d,data is  %s\r\n",ret,rec->databuf);}else{/*什么也不做*/}usleep(1000);/*if(发生中断)break;//退出*/}
}

使用下面命令编译

gcc serial.c -o serial -lpthread

4.执行程序

认真看上面的串口通信代码 在运行程序需要传入main函数的参数,该参数就是虚拟串口的位置

所以执行下面的命令运行程序

./serial /dev/pts/2

 再打开一个终端输入下面命令

./serial /dev/pts/3

5.总结

如果出现open fail 可能原因:权限不够  或者 虚拟串口关闭或位置错误

相关文章:

ubuntu 安装串口工具和添加虚拟串口

目录 一、串口工具安装 二、使用Windows本身虚拟的串口 &#xff08;一&#xff09;添加串口 1、保证虚拟机是关闭状态&#xff0c;打开“虚拟机设置”&#xff0c;点击“添加”。 2、选中“串行端口”&#xff0c;点击“完成”。 3、选中刚添加的串口&#xff0c;下拉选…...

【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表结构体初始化元素设置打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串&#xff08;一&#xff…...

为什么POST请求经常发送两次?

大多数初级前端程序员&#xff0c;在通过浏览器F12的调试工具调试网络请求时&#xff0c;可能都会有一个发现&#xff0c;在进行POST请求时&#xff0c;明明代码里只请求了一次&#xff0c;为什么network里发送了两次呢&#xff0c;难道我代码出bug了&#xff1f;带着疑问点开第…...

打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究

从银行开始建设数据仓库至今已近20年&#xff0c;当前各银行机构在数据能力建设中面临诸多困扰&#xff1a;如何保证数据使用时的准确性&#xff1f;如何让数据敏捷响应业务变化&#xff1f;如何让更多的业务人员使用数据&#xff1f; 这些问题极大影响了经营指标的达成与业务…...

测试用例的设计方法(全):边界值分析方法

一.方法简介 1.定义&#xff1a;边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下&#xff0c;其测试用例来自等价类的边界。 2.与等价划分的区别 1)边界值分析不是从某等价类中随便挑…...

酷开科技 | 酷开系统沉浸式大屏游戏更解压!

随着家庭娱乐需求日益旺盛&#xff0c;越来越多的家庭消费者和游戏玩家开始追求大屏游戏带来的沉浸感。玩家在玩游戏的时候用大屏能获得更广阔的视野和更出色的视觉包围感&#xff0c;因此用大屏玩游戏已经成为了一种潮流。用酷开系统玩大屏游戏&#xff0c;过瘾又刺激&#xf…...

读高性能MySQL(第4版)笔记20_Performance Schema和其他

1. 线程 1.1. MySQL服务端是多线程软件。它的每个组件都使用线程 1.2. 每个线程至少有两个唯一标识符 1.2.1. 操作系统线程ID 1.2.2. MySQL内部线程ID 2. 对象类型 2.1. OBJECT_TYPE列 2.2. EVENT 2.3. FUNCTION 2.4. PROCEDURE 2.5. TABLE 2.6. TRIGGER 3. Perfor…...

spring cloud Eureka集群模式搭建(IDEA中运行)《二》

上一篇集群配置文件完善 上一篇博客&#xff0c;想必大家都学会了Eureka集群模式的搭建和运行&#xff0c;针对上一篇的配置文件进行了优化&#xff0c;在这里分享给大家。上一篇主要有3个配置文件&#xff0c;分别对应3个不同的服务&#xff0c;这种形式配置文件分别写在了不…...

大模型(LLM)在电商推荐系统的探索与实践

本文对LLM推荐的结合范式进行了梳理和讨论&#xff0c;并尝试将LLM涌现的能力迁移应用在推荐系统之中&#xff0c;利用LLM的通用知识来辅助推荐&#xff0c;改善推荐效果和用户体验。 背景 电商推荐系统&#xff08;Recommend System&#xff0c;RecSys&#xff09;是一种基于…...

C语言之指针详解

目录 地址 指针的定义和使用 数组与指针的区别与联系 字符串与指针的用法 C 中的 NULL 指针 指针的算术运算 指向指针的指针 传递指针给函数 从函数返回指针 在学习指针之前&#xff0c;我们先弄清楚一个概念&#xff1a; 地址 地址在计算机内存中是一个唯一的标识符…...

【Java笔记+踩坑】设计模式——原型模式

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客​ 目录 零、经典的克隆羊问题&#xff08;复制10只属性相同的羊&#xff09; 一、传统方案&#xff1…...

Flutter GetX使用详解

介绍 GetX是一款功能强大且轻量级的Flutter状态管理和路由管理库。它提供了一种简单而强大的方式来构建Flutter应用程序&#xff0c;无需大量的模板代码。GetX不仅提供了状态管理和路由管理&#xff0c;还包括其他实用工具&#xff0c;如国际化和依赖注入。 在本文中&#xf…...

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】

文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…...

作为开发者,可视化开发工具了解一下

你是否为编程世界的各种挑战感到头痛&#xff1f;想要以更高效、简单的方式开发出专业级的项目&#xff1f; JNPF低代码工具正是你苦心寻找的产品&#xff01;它是一款专为稍微懂一点点编程思想的入门级人员设计的神奇工具&#xff0c;集成了丰富的功能和组件&#xff0c;让你轻…...

Python:实现日历功能

背景 日常生活中&#xff0c;每天都要用到日历&#xff0c;日历成为我们生活中的必需品&#xff0c;那么如何制作日历呢&#xff0c;其实方法有很多&#xff0c;可以直接在excel中制作&#xff0c;也可以手画等等。 学习过编程的朋友&#xff0c;能否想到用Python编写一…...

2.9.C++项目:网络版五子棋对战之业务处理模块的设计

文章目录 一、意义二、功能三、管理&#xff08;一&#xff09;客户端请求&#xff08;二&#xff09;websocket 四、框架五、完整代码 一、意义 将所有的模块整合在一起&#xff0c;通过网络通信获取到客户端的请求&#xff0c;提供不同的业务处理。 服务器模块&#xff0c;是…...

springboot actuator 常用接口

概述 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题&#xff0c;而微服务的特点决定了功能模块的部署是分布式的&#xff0c;运行在不同的机器上相互通过服务调用进行交互&#xff0c;业务流会经过多个微服务的处理和传递&#xff0c;在这种框架下&#xff0…...

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址&#xff0c;如 "exampleemail.com"&#xff0c;并不区分字母的大小写。无论你输入的是大写字母还是小写字母&#xff0c;它仍然会到达同一个电子邮件账户。例如&#xff0c;如果您的电子邮件地址是 …...

同一个页面同一区域两个el-table在v-if下样式重叠问题

&#x1f349;正常情况下在radio切换时两个表格的样式应如下 &#x1f349;实际上用v-if显示时会出现以下问题&#xff08;本该属于时间段相同模块的表格却出现在时间段自定义的表格中&#xff09; &#x1f349;解决方案&#xff1a; &#x1f343;一、将v-if替换成v-show(…...

ExoPlayer架构详解与源码分析(6)——MediaPeriod

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…...

通义千问3-Reranker-0.6B部署教程:模型服务SLA保障(P95延迟<800ms)调优

通义千问3-Reranker-0.6B部署教程&#xff1a;模型服务SLA保障&#xff08;P95延迟<800ms&#xff09;调优 1. 为什么你需要关注这个模型&#xff1f; 如果你正在做搜索系统、智能客服或者文档问答&#xff0c;肯定遇到过这样的问题&#xff1a;用户输入一个问题&#xff…...

联想X3650M5服务器双模式切换实战:UEFI与Legacy BIOS自由转换技巧

联想X3650M5服务器双模式切换实战&#xff1a;UEFI与Legacy BIOS自由转换技巧 在企业级IT基础设施中&#xff0c;服务器启动模式的灵活配置往往是系统部署的关键第一步。联想X3650M5作为主流机架式服务器&#xff0c;其双模式切换功能直接影响着操作系统兼容性、磁盘性能表现乃…...

Emu3.5 视觉 tokenizer 及其 decoder 的训练过程

下面我把 Emu3.5 视觉 tokenizer 及其 decoder 的训练完整过程,按照“论文明确写到的部分”“公开代码能对上的部分”“需要用开源近似路线复现的部分”三层重新整理。先给结论: 结论:Emu3.5 的视觉部分其实不是“一次性训练完一个模块”,而是至少分成两条链路: 第一条是…...

零代码驯服Qwen-2.5VL:LLaMA-Factory图形界面实战指南

1. 为什么你需要零代码驯服Qwen-2.5VL 想象一下&#xff0c;你手里有一台能看懂图片的AI机器人&#xff0c;但它总把工业零件认成厨房用具。传统解决方法需要你租用几十张显卡&#xff0c;像炼丹一样折腾几个月——但现在&#xff0c;有了LLaMA-Factory的图形界面&#xff0c;这…...

摆脱论文困扰!2026年实打实好用的专业降AI率平台

2026年论文降AI率工具已从“基础改写”升级为智能优化系统&#xff0c;核心评价维度包括AIGC识别精准度、文本自然度、学术格式合规性、查重适配能力、长文本逻辑性和多语种支持。本次测评覆盖6款主流工具&#xff0c;涵盖中文与英文、全流程与专项功能、免费与付费模式&#x…...

终极指南:如何用Muzic的MusicBERT实现符号音乐深度理解(从入门到实践)

终极指南&#xff1a;如何用Muzic的MusicBERT实现符号音乐深度理解&#xff08;从入门到实践&#xff09; 【免费下载链接】muzic 这是一个微软研究院开发的音乐生成AI项目。适合对音乐、音频处理以及AI应用感兴趣的开发者、学生和研究者。特点是使用深度学习技术生成音乐&…...

Cookie 和 Session 分别存储在客户端还是服务端?

从“存包凭条”到“后台存包柜”&#xff1a;Cookie 与 Session 的存储位置深度剖析1. 引言&#xff1a;超市存包处的“凭条”与“存包柜”2. 前置知识&#xff1a;HTTP 的“健忘症”3. Cookie&#xff1a;客户端的“小凭条”3.1 是什么&#xff1f;3.2 解决什么问题&#xff1…...

BepInEx Linux环境实战指南:从部署到故障解决

BepInEx Linux环境实战指南&#xff1a;从部署到故障解决 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 引言&#xff1a;Linux玩家的Mod困境 作为Linux平台的Unity游戏玩家&…...

模块化生产体系:戴森球计划从工厂到星系的进阶指南

模块化生产体系&#xff1a;戴森球计划从工厂到星系的进阶指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 在戴森球计划的宇宙探索中&#xff0c;高效的生产体系是从母…...

电感器特性与工程应用全解析

电感器的工程应用与特性分析1. 电感器基础特性电感器(Inductor)是电子电路中的基本无源元件&#xff0c;由导线绕制而成&#xff0c;可分为空心线圈和带磁芯线圈两种基本结构。其基本单位是亨利(H)&#xff0c;常用单位还包括毫亨(mH)和微亨(μH)&#xff0c;换算关系为&#x…...