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

news2024/9/25 3:28:45

目录

一、串口工具安装

二、使用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> 0
        VMIN为最少读取的字符数,当读取到一个字符后,会启动一个定时器,在定时器超时事前,如果已经读取到了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 可能原因:权限不够  或者 虚拟串口关闭或位置错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XXXSpringMVC“框架的简单创建与使用,快速上手;

前言 【描述】 " 【环境】 系统"Windows"&#xff0c;软件"IntelliJ IDEA 2021.1.3(Ultimate Edition)"&#xff1b;“Java版本"1.8.0_202”&#xff0c;“Spring"版本"2.5.9”&#xff1b; 实操 【实操1】 说明 【描述】 创建&quo…

大学生学习新途径:视频号视频下载助你获取学术资源

​在这个信息爆炸的时代&#xff0c;大学生们为了获取更多的学术资源常常面临诸多挑战。然而&#xff0c;随着互联网的发展&#xff0c;视频号平台逐渐成为了学生们学习的新途径。本文将介绍如何通过视频号视频下载来获取学术资源&#xff0c;帮助大学生们更好地学习。 1. 视频…

测试内容总结

目录 面试题类型 测试用例 非软件题型 软件类型 代码题型 关于个人的项目设计测试类型 万能公式 自动化面试 什么是自动化以及为什么要做 selenium驱动浏览器的工作原理 设计自动化测试的思路(个人的自动化亮点) 1、明确个人项目里哪些页面需要做web做自动化测试—…

FreeRTOS 消息队列 详解

目录 什么是队列&#xff1f; 消息队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 消息队列相关 API 函数 1. 创建队列 2. 写队列 3. 读队列 消息队列实操 什么是队列&#xff1f; 队列又称消息队列&#xff0c;是一种常用于任务间…

SpringBoot+SpringMVC+MybatisPlus

文章目录 SpringBootSpringMVCMybatisPlus怎样在SpringBoot中引入SpringMVC?首先看下引入的依赖创建数据库表创建DO类创建MyBatisPlus动态代理接口创建controller控制器接收http请求创建SpringBoot配置文件application.yml最后创建启动类 SpringBootSpringMVCMybatisPlus 怎样…

管理Secrets

使用 kubectl 管理 Secret 创建 Secret Secret 对象用来存储敏感数据&#xff0c;如 Pod 用于访问服务的凭据。例如&#xff0c;为访问数据库&#xff0c;你可能需要一个 Secret 来存储所需的用户名及密码。 使用原始数据 kubectl create secret generic db-user-pass \--from…

【字符串】【将字符数组转为字符串】Leetcode 122 路径加密

【将字符数组转为字符串】Leetcode 122 路径加密 解法1 在Java中&#xff0c;char数组没有直接的toString()方法来将其转换为字符串。如果你想将char数组转换为字符串&#xff0c;可以使用String类的构造函数来实现&#xff1a; ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐…

使用vue3 搭建一个H5手机端访问的项目

首先说明&#xff0c;我本地之前运行过vue的项目&#xff0c;所以具有一些基础的运行环境&#xff0c;这里直接按步骤讲我项目框架搭建的过程。 这个不建议使用驼峰&#xff0c;按规范单词中间加横杠就可以。一般会出现选择项&#xff0c;按方向键选择&#xff0c;我这边选择了…

MS COCO数据集的评价标准以及不同指标的选择推荐(AP、mAP、MS COCO、AR、@、0.5、0.75、1、目标检测、评价指标)

目标检测模型性能衡量指标、MS COCO 数据集的评价标准以及不同指标的选择推荐 0. 引言 0.1 COCO 数据集评价指标 目标检测模型通过 pycocotools 在验证集上会得到 COCO 的评价列表&#xff0c;具体参数的含义是什么呢&#xff1f; 0.2 目标检测领域常用的公开数据集 PASCAL …

【23真题】招600+,太火爆!题目略难!快来挑战!

今天分享的是23年重庆邮电大学801的信号与系统试题及解析。 本套试难度分析&#xff1a;22年重庆邮电大学801考研真题我也发布过&#xff0c;如有需要戳这里自取&#xff01;本套试题内容难度中等偏上&#xff0c;没有选择计算题&#xff0c;涉及的知识点较多&#xff0c;题量…

干洗店软件,洗鞋店软件小程序,洗衣收银系统,洗衣工厂系统;

洗衣洗鞋店软件功能介绍: 预约上门收衣智能提醒&#xff0b;员工手机抢单&#xff0b;地图导航&#xff0b;拍照同步上传 智能通知会员&#xff0c;消费通知&#xff0b;取衣通知&#xff0b;衣物到期提醒&#xff0b;消费提醒&#xff0b;取衣提醒 快速完成订单&#xff0c…

esp32-S3 + visual studio code 开发环境搭建

一、首先在下面链接网页中下载esp-idf v5.1.1离线安装包 &#xff0c;并安装到指定位置。dl.espressif.cn/dl/esp-idf/https://dl.espressif.cn/dl/esp-idf/ 安装过程中会提示需要长路径支持&#xff0c;所以windows系统需要开启长路径使能 Step 1&#xff1a; 打开运行&…

Jenkins部署失败:no space left on device

Jenkins部署到最后一步时报错&#xff1a;no space left on device&#xff0c;没有可用的空间使用了。 查看磁盘空间使用情况&#xff1a; df -h发现/home/data路径空间已经使用100%。 排查此路径下存在哪些大文件。 //查看系统中文件的使用情况 df -h -T //查看当前目录下各…

众和策略可靠吗?中国资产,一夜狂飙!

可靠 当地时间10月24日&#xff0c;美股三大股指收高&#xff0c;其间道指涨0.62%&#xff0c;接连四个生意日下跌之后反弹&#xff0c;标普指数涨0.73%&#xff0c;纳斯达克指数涨0.93%。 10年期美国国债收益率小幅下滑。可口可乐等公司的财报表现弱小。美10月企业活动加速&…

Dynamics 365 重写自带按钮

必备工具&#xff1a;Ribbon Workbench 步骤&#xff1a; 1、查看默认按钮使用的方法名称 右键按钮选择自定义命令(Customise Command)&#xff0c;然后查看command使用的命令 2、在前台chrome浏览器中搜索对应的命令&#xff0c;查看命令细节 3、基于命令细节新建command&am…

c语言进制的转换16进制转换2进制

c语言进制的转换16进制转换2进制 c语言的进制的转换 c语言进制的转换16进制转换2进制一、16进制的介绍二、八四二一法则三、16进制转换2进制 一、16进制的介绍 十六进制&#xff1a; 十六进制逢十六进一&#xff0c;所有的数组是0到9和A到F组成&#xff0c;其中A代表10&#x…

当我们说“架构”的时候,我们在说什么?---解读《ISO/IEC/IEEE 42010》国际标准

当我们说“架构”的时候&#xff0c;你想到的是什么&#xff1f; 程序员听到“架构”的时候&#xff0c;想到的是SSH、SSM三层架构&#xff0c;或者是SOA架构&#xff0c;或者是微服务架构等。 人力资源专业人员听到架构的时候想到可能是企业组织架构。 几乎每个行业专业都会…

[Unity]给场景中的3D字体TextMesh增加描边方案二

如图所示仅支持图片内的/*数字 下面是资源

8.(vue3.x+vite)组件间通信方式之window挂实例

前端技术社区总目录(订阅之前请先查看该博客) 效果预览 父组件代码 <template><div><div>{{message }}</div><Child

66 跳跃游戏

跳跃游戏 题解1 贪心题解2 DP&#xff08;超时, 但思路应该对&#xff09; 给你一个非负整数数组 nums&#xff0c;你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 …