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> 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.mfbz.cn/a/105927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享119个ASP.NET源码总有一个是你想要的

分享119个ASP.NET源码总有一个是你想要的 链接&#xff1a;https://pan.baidu.com/s/1Mp0RugMnIJbS8Hrja4sCOQ?pwd8888 提取码&#xff1a;8888 项目名称 asp.net core 微服务 项目 ASP.NET Core 项目日志解决方案 Serilog Log4net ASP.NET Core分布式项目实战 asp.n…

智能矩阵,引领商业新纪元!拓世方案:打破线上线下界限,开启无限营销可能!

在科技赋能商业大潮中&#xff0c;一切行业都在经历巨大变革&#xff0c;传统的营销策略被彻底改变&#xff0c;催生着无数企业去打造横跨线上线下、多维度、全方位的矩阵营销帝国。无数的成功案例已经告诉我们&#xff0c;营销不再只是宣传&#xff0c;而是建立品牌与消费者之…

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年8月

第15届蓝桥杯Scratch选拔赛中级&#xff08;STEMA&#xff09;真题2023年8月 一、单选题 第 1 题 单选题 点击以下积木块&#xff0c;生成的随机数是一个&#xff08; &#xff09;。 A.整数 B.小数 C.整数或小数 D.以上都不对 第 2 题 单选题 运行以下程序&#xff0…

DeepSpeed: 大模型训练框架 | 京东云技术团队

背景&#xff1a; 目前&#xff0c;大模型的发展已经非常火热&#xff0c;关于大模型的训练、微调也是各个公司重点关注方向。但是大模型训练的痛点是模型参数过大&#xff0c;动辄上百亿&#xff0c;如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这…

百度智能云获评Forrester中国市场人工智能/机器学习平台领导者

写在前面百度智能云AI平台&#xff0c;打造企业智能化转型的基础设施大模型时代&#xff0c;百度智能云AI平台迎来全面升级 写在前面 日前&#xff0c;国际权威咨询机构 Forrester 发布了最新的《The Forrester Wave™&#xff1a;中国市场人工智能/机器学习平台厂商评测&…

依靠继承与聚合,实现maven搭建分布式项目

简介聚合 对于复杂的Maven项目&#xff0c;一般建议采用多模块的方式来设计开发&#xff0c;便于后期维护管理。但是构建项目时&#xff0c;如果每次都需要按模块一个一个进行构建会十分麻烦&#xff0c;而Maven的聚合功能就可以很好的解决这个问题&#xff0c;当用户对聚合模…

SpringBoot 定时任务:@EnableScheduling @Scheduled

Scheduled注解参数 cron参数 这个参数是最经常使用的参数&#xff0c;表示接收一个cron参数&#xff0c;cron它是一个表达式&#xff0c;最多接收7个参数&#xff0c;从左到右分别表示&#xff1a;秒 分 时 天 月 周 年&#xff1b;参数以空格隔开&#xff0c;其中年不是必须参…

lesson-2C++类与对象(中)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 类的6个默认成员函数 构造函数 概念 特性 析构函数 概念 特性 拷贝构造函数 概念 特性 赋值运算符重载 运算符重载 赋值运算符重载 前置和后置重载 日期类的实现 类的6个默认成员函数 如果一个类中什么…

掌握CSS动画技巧:打造引人注目的页面过渡效果!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…

jquery-picture-cut 任意文件上传 (CVE-2018-9208)

jquery-picture-cut 任意文件上传 &#xff08;CVE-2018-9208&#xff09; 漏洞描述 picture cut是一个jquery插件&#xff0c;以非常友好和简单的方式处理图像&#xff0c;具有基于bootstrap或jquery ui的漂亮界面&#xff0c;具有ajax上传&#xff0c;从资源管理器拖动图像…

MySQL 连接出现 Authentication plugin ‘caching_sha2_password的处理方法(使用第二种)

出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 1. 升级MySQL版本 较早的MySQL版本可能不…

冒泡排序:了解原理与实现

目录 原理 实现 性能分析 结论 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单但效率较低的排序算法。它重复地比较相邻的元素并交换位置&#xff0c;直到整个序列有序为止。虽然冒泡排序的时间复杂度较高&#xff0c;但在小规模数据集上仍然具有一定的实际应用价…

Java开发者必备:支付宝沙箱环境支付远程调试指南

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f516;系列专栏&#xff1a; C语言、Linux、Cpolar ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级…

集卡实习总结

规则控制面板 &#xff08;1&#xff09;什么是低代码&#xff1f; 低代码 是借助低代码工具的情况下&#xff0c;开发人员编写少量代码快速开发出企业级应用系统&#xff0c;并帮助企业团队进行数字化转型。低码开发平台借助一整套功能组件&#xff0c;功能分类包括&#xff…

文心一言简单体验

百度正式发布文心一言&#xff0c;文心一言 这里的插件模式挺有意思&#xff1a; 测试了一下图解说明&#xff0c;随意上传了一张图片&#xff1a; 提供图解让反过来画&#xff0c;抓住了部分重点&#xff0c;但是还是和原图有比较大的差异&#xff01; 百宝箱 暂未逐个体验&am…

RPA除了和OCR、NLP技术结合,还能和什么技术结合?

鉴于业内现在也经常把RPA称为数字员工&#xff0c;就虚拟一个人的形象来解答吧。 首先是头部&#xff0c;实现人的“听看说想”能力&#xff1a; 听&#xff1a;ASR&#xff08;语音识别技术&#xff09;&#xff0c;主要用于听取和理解语音输入&#xff0c;让RPA能处理语音数…

人性与理性共赢,真心罐头跃过增长的山海关

在北方不少地方&#xff0c;黄桃罐头是一种抚慰人心的力量。从大连起家&#xff0c;用真材实料打动人心的真心罐头&#xff0c;在朝着国民品牌前进的路上&#xff0c;需要更透彻地洞悉“人性”。 ”人的因素影响太大。我们希望可以告别个人英雄主义&#xff0c;用流程来保证可…

学会Docker之——界面化操作(Docker Desktop)

Docker Desktop 是一款用于在桌面环境下开发、构建和容器化应用程序的工具。它适用于 Windows 和 Mac 操作系统&#xff0c;让开发人员可以轻松地在本地环境中创建和运行容器&#xff0c;并与 Docker Hub 和其他容器注册表进行交互。Docker Desktop集成了Docker Engine&#xf…

【蓝桥杯】蓝桥杯双周赛第二场ABCD题

A题&#xff1a;新生 知识点&#xff1a;下一届是第几届蓝桥杯…… 新一届蓝桥杯大赛即将在2024年拉开序! 作为大一新生的小蓝&#xff0c;在听说了这场盛大的比赛后&#xff0c;对其充满了期待与热情。但作为初次参赛的新手&#xff0c;他对蓝桥杯的相关赛制和历史并…

SpringMVC探秘: 实现MVC模式的Web应用

文章目录 1. SpringMVC概述1.1. 什么是SpringMVC&#xff1f;1.1.1. MVC与SpringMVC 1.2. SpringMVC项目的优势 2. SpringMVC项目的创建与使用2.1. 创建SpringMVC项目2.2. 设置路由2.3. 获取参数2.3.1. 获取一个参数2.3.2. 获取多个参数2.3.3. 获取日期参数2.3.4. 参数重命名Re…
最新文章