虚拟串口模拟器和串口调试助手使用教程

2023-05-16

虚拟串口(虚拟 COM 端口),应该很多人都知道,也就是一种模拟物理串行接口的 软件 它完全复制了硬件 COM 接口的功能,并且将被操作系统和串行应用程序识别为真实端口。

以前的电脑,基本标配都包含一个串口。但现在的电脑,基本都没有配置串口了。如果要使用串口的功能,基本就要用一个USB转串口的硬件模块。

现实生活中,虚拟串口用处很多。比如:你的应用程序检测串行输入数据的时候,方便调试。还比如:多个有应用程序之间使用串口通信。

虚拟串口软件推荐:强大的虚拟串口软件


串口调试助手软件有很多,随便选一个自己习惯的即可。


演示一下串口模拟器和串口调试助手使用

打开VSPD,添加虚拟串口

在这里插入图片描述

打开串口调试助手,设置好必要的参数

https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801141400770.png
https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801141420257.png

打开两个串口,在其中一个串口中发送区写入消息,点击发送,在另一个串口的接收区可以看到我们发送的消息

在这里插入图片描述

两个串口的连接示意图如下图所示

image-20210801143004531

数据传输路线有两条

  • 串口调试助手1–>COM1–>COM2–>串口调试助手2
  • 串口调试助手2–>COM2–>COM1–>串口调试助手1

在Windows下使用C语言调用串口,接收发送数据

https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801144941433.png

C语言程序测试接收代码如下:

#include<stdio.h>
#include<windows.h>
 
int main()
{
	FILE *fp;
	if ((fp = fopen("com1", "r")) == NULL)
	{
		printf("cannot open com!\n");
	}
	else
		printf("open com successful!\n");
	char str;
	while (1)
	{
		fscanf(fp, "%c", &str);
		printf("%c ", str);
		Sleep(100);
	}
	return 0;
}

运行

https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801150720719.png

因为这个程序打开的是COM1,因此我么在COM2的串口调试助手中,在发送区输入要发送的值,点击发送
在这里插入图片描述
这是可以在运行串口看到接收并且打印出我们发送的值

https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801150945647.png

我们继续测试几次

image-20210801151033146

https://raw.githubusercontent.com/xkyvvv/blogpic/main/pic1/image-20210801151046652.png

C语言程序测试发送代码如下:

#include <Windows.h>
#include <stdio.h>
 
HANDLE hCom;
 
int main(void)
{
	hCom = CreateFile(TEXT("COM1"),//COM1口
		GENERIC_READ, //允许读
		0, //指定共享属性,由于串口不能共享,所以该参数必须为0
		NULL,
		OPEN_EXISTING, //打开而不是创建
 
		FILE_ATTRIBUTE_NORMAL, //属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作
		NULL);
 
	if (hCom == INVALID_HANDLE_VALUE)
	{
		printf("打开COM失败!\n");
		return FALSE;
	}
	else
	{
		printf("COM打开成功!\n");
	}
 
	SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024
 
	/*********************************超时设置**************************************/
	COMMTIMEOUTS TimeOuts;
	//设定读超时
	TimeOuts.ReadIntervalTimeout = MAXDWORD;//读间隔超时
	TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
	TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
	//设定写超时
	TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数
	TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
	SetCommTimeouts(hCom, &TimeOuts); //设置超时
 
	/*****************************************配置串口***************************/
	DCB dcb;
	GetCommState(hCom, &dcb);
	dcb.BaudRate = 9600; //波特率为9600
	dcb.ByteSize = 8; //每个字节有8位
	dcb.Parity = NOPARITY; //无奇偶校验位
	dcb.StopBits = ONESTOPBIT; //一个停止位
	SetCommState(hCom, &dcb);
 
	DWORD wCount;//实际读取的字节数
	bool bReadStat;
 
	char str[2] = { 0 };
 
	while (1)
	{
		int i;
    	unsigned char sendData[256] = {0};//写入串口缓存区的数组
    	for(i=0; i<16; i++)
    	{
        	sendData[i] = i;
    	}

    	DWORD dwWriteLen = 0;
    	if(!WriteFile(hCom, sendData, 16, &dwWriteLen, NULL))
    	{
        	printf("串口发送数据失败!\n");
    	}
		Sleep(1000);
	}
 
	CloseHandle(hCom);
}

也可以使用下面这段代码

#include<stdio.h>
#include<windows.h>
 
int main()
{
	FILE *fp;
	if ((fp = fopen("com1", "r")) == NULL)
	{
		printf("cannot open com!\n");
	}
	else
		printf("open com successful!\n");
		
	char str = 'x';
 
	while (1)
	{
		fprintf(fp, "%s", &str);
		Sleep(1000);
	}
	return 0;
}

不过不知道为什么,这两段代码都可以正常运行,但是COM2的串口调试助手那接收不到数据。
最近发现了是哪里出了问题,串口参数不一致导致的问题。
只需要将代码改成如下

#include <Windows.h>
#include <stdio.h>
 
HANDLE hCom;
 
int main(void)
{
	hCom = CreateFile(TEXT("COM1"),//COM1口
		GENERIC_READ | GENERIC_WRITE, //允许读和写 
		0, //指定共享属性,由于串口不能共享,所以该参数必须为0
		NULL,
		OPEN_EXISTING, //打开而不是创建
 
		FILE_ATTRIBUTE_NORMAL, //属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作
		NULL);
 
	if (hCom == INVALID_HANDLE_VALUE)
	{
		printf("打开COM失败!\n");
		return FALSE;
	}
	else
	{
		printf("COM打开成功!\n");
	}
 
	SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024
 
	/*********************************超时设置**************************************/
	COMMTIMEOUTS TimeOuts;
	//设定读超时
	TimeOuts.ReadIntervalTimeout = MAXDWORD;//读间隔超时
	TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
	TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
	//设定写超时
	TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数
	TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
	SetCommTimeouts(hCom, &TimeOuts); //设置超时
 
	/*****************************************配置串口***************************/
	DCB dcb;
	GetCommState(hCom, &dcb);
	dcb.BaudRate = 115200; //波特率为115200
	dcb.ByteSize = 8; //每个字节有8位
	dcb.Parity = NOPARITY; //无奇偶校验位
	dcb.StopBits = ONESTOPBIT; //一个停止位
	SetCommState(hCom, &dcb);
 
	DWORD wCount;//实际读取的字节数
	bool bReadStat;
 
	char str[2] = { 0 };
 
	while (1)
	{
		int i;
    	unsigned char sendData[256] = {0};//写入串口缓存区的数组
    	for(i=0; i<16; i++)
    	{
        	sendData[i] = i;
    	}

    	DWORD dwWriteLen = 0;
    	if(!WriteFile(hCom, sendData, 16, &dwWriteLen, NULL))
    	{
        	printf("串口发送数据失败!\n");
    	}
		Sleep(1000);
	}
 
	CloseHandle(hCom);
}

运行之后,发现在串口2的调试助手处,显示的接收数据在增加,

在这里插入图片描述
在这里插入图片描述

但是却不会在界面上显示出来,这个不知道是啥原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚拟串口模拟器和串口调试助手使用教程 的相关文章

  • STLINK出现在设备管理器,但却报错找不到STLINK

    博客链接 xff1a STLINK出现在设备管理器 xff0c 但却报错找不到STLINK Infinite s Blog 这个问题出现的原因可能是你使用STM32CubeMX或者CubeIDE生成工程时 xff0c 在SYS里面选择了No
  • 深入Pytorch: pytorch张量和numpy数组相互转换(torch.from_numpy() and numpy())

    PyTorch张量转换为Numpy数组 代码如下 xff1a span class token keyword import span torch span class token keyword import span numpy spa
  • 对魔法数字的理解

    魔法数字 定义 xff1a 魔法数字 xff0c 在编程领域指的是莫名其妙出现的数字 数字的意义必须通过详细阅读才能推断出来 解决办法 xff1a 一般魔法数字都是需要使用枚举变量来替换的 举个例子 xff1a span class tok
  • mac下访问ubuntu下共享文件

    samba简介 Samba是在Linux和Unix系统上实现SMB协议的一个免费软件 xff0c 能够完成Windows mac操作系统下访问linux系统下的共享文件 samba安装 使用apt命令安装samba span class t
  • wegame发展

    wegame是腾讯旗下的一款集游戏售卖与游戏启动为一体的官方平台 xff0c 于2017年4月正式上线 wegame的前身是tgp游戏平台 tgp为用户提供了免密登录 游戏下载及游戏加速等功能 xff0c 但只限于下载腾讯旗下游戏 tgp最
  • 【Python全栈100天学习笔记】Day41 Django深入理解框架

    深入模型 在上一个章节中 xff0c 我们提到了Django是基于MVC架构的Web框架 xff0c MVC架构追求的是 模型 和 视图 的解耦合 所谓 模型 说得更直白一些就是数据 xff08 的表示 xff09 xff0c 所以通常也被
  • ovs-appctl 用户手册中文翻译

    该文章收录在在我的博客 xff1a http www sskywatcher com blog 运行时管理命令 ovs appctl 能够向运行中的ovs vswitchd进程发送命令 现已支持的命令描述如下 这些描述假设读者理解如何配置o
  • 【Python全栈100天学习笔记】Day43 Django静态资源与Ajax请求

    静态资源和Ajax请求 基于前面的知识 xff0c 我们已经可以使用Django框架来完成Web应用的开发了 接下来我们就尝试实现一个投票应用 xff0c 具体的需求是用户进入应用首先查看到 学科介绍 页面 xff0c 该页面显示了一个学校
  • 【Python全栈100天学习笔记】Day44 Web表单介绍及使用

    表单的应用 我们继续来完成上一章节中的项目 xff0c 实现 用户注册 和 用户登录 的功能 xff0c 并限制只有登录的用户才能为老师投票 Django框架中提供了对表单的封装 xff0c 而且提供了多种不同的使用方式 首先添加用户模型
  • 【Python全栈100天学习笔记】Day45 Cookie和Session介绍及使用

    Cookie和Session 实现用户跟踪 如今 xff0c 一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况 xff0c 失去的就是网站的可用性和便利性 xff0c 继而很有可能导致网站用户的流式 xff0c 所以记住一个用
  • 【Python全栈100天学习笔记】Day46 导入导出Excel报表和配置日志

    报表和日志 导出Excel报表 报表就是用表格 图表等格式来动态显示数据 xff0c 所以有人用这样的公式来描述报表 xff1a 报表 61 多样的格式 43 动态的数据 有很多的三方库支持在Python程序中写Excel文件 xff0c
  • 【Python全栈100天学习笔记】Day47 Django中间件使用

    中间件的应用 实现登录验证 我们继续来完善投票应用 在上一个章节中 xff0c 我们在用户登录成功后通过session保留了用户信息 xff0c 接下来我们可以应用做一些调整 xff0c 要求在为老师投票时必须要先登录 xff0c 登录过的
  • 【Python全栈100天学习笔记】Day48 前后端分离开发入门

    前后端分离开发入门 在传统的Web应用开发中 xff0c 大多数的程序员会将浏览器作为前后端的分界线 将浏览器中为用户进行页面展示的部分称之为前端 xff0c 而将运行在服务器 xff0c 为前端提供业务逻辑和数据准备的所有代码统称为后端
  • 【Python深度学习之路】-3.1性能评价指标

    1 理解混淆矩阵 所谓混淆矩阵 xff0c 是指将模型对各个测试数据的预测结果分为真阳性 真阴性 假阳性和假阴性并对符合各个观点的预测结果的数量进行统计的一种表格 其中 xff0c 真阳性和真阴性表示机器学习模型的回答是正确的 xff0c
  • 【Python深度学习之路】-3.2PR曲线

    1 何谓PR曲线 所谓PR曲线是指用横轴表示召回率 xff0c 纵轴表示精确率 xff0c 将数据绘制成图表的形式所得到的曲线 召回率和准确率两个指标成反比关系 xff0c 所谓反比关系 xff0c 指的是当提升精确率时 xff0c 召回率
  • 【Python深度学习之路】产生随机数

    随机数的生成 1 设置种子 计算机是根据被称为 种子 seed 的数据来生成随机数的 所谓种子 xff0c 是指在生成随机数的过程中所使用的初始值 xff0c 如果种子的值固定不变 xff0c 生成的随机数序列也是不变的 通过使用相同的随机
  • 【Python深度学习之路】时间序列数据

    1 datetime类型 对于时间序列数据进行处理时 xff0c 需要使用表示时间的方法 在P樱桃红中提供了datetime数据类型来对日期和实践进行处理 指定datetime datetime 年 xff0c 月 xff0c 日 xff0
  • caffe学习笔记

    一 mnist例程 https blog csdn net bestrivern article details 85101303 二 cifar10例程 附录 xff1a caffe常见问题及注意事项 https blog csdn ne
  • 我的创作纪念日

    机缘 提示 xff1a 可以和大家分享最初成为创作者的初心 例如 xff1a 实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流 收获 提示 xff1a 在创作的过程中都有哪些收获 例如 xff1a 获得了多少粉丝的关注获得了多少

随机推荐

  • Python数据分析常用30段优化代码

    1 重复元素判定 以下方法可以检查给定列表是不是存在重复元素 xff0c 它会使用 set 函数来移除所有重复元素 def all unique lst return len lst 61 61 len set lst x 61 1 1 2
  • Python妙用小工具:2行Python给图片加水印

    filestools库介绍 今天给大家介绍的Python库 xff0c 叫做filestools xff0c 由小小明开发 xff0c 直接使用如下命令 xff0c 安装后使用 pip install filestools index ur
  • 在Excel中调用Python脚本,实现数据自动化处理

    说起Excel xff0c 那绝对是数据处理领域王者般的存在 xff0c 尽管已经诞生三十多年了 xff0c 现在全球仍有7 5亿忠实用户 xff0c 而作为网红语言的Python xff0c 也仅仅只有700万的开发人员 Excel是全世
  • Python数据分析中常用的工具类和方法【持续更新系列】

    本文主要记录在工作和学习中 xff0c 做数据分析常用到的一些简单的工具函数和类 span class token comment 判断是否为浮点数 span span class token keyword def span span c
  • 【Python深度学习之路】-1 机器学习概论

    Python深度学习之路 1 机器学习概论 1 1 机器学习简介 机器学习火热的原因是 xff1a 人类无论如何也做不到在短时间内实现从大量数据中自动地计算出正确结果的操作 所谓机器学习 xff1a 通过对数据进行反复的学习 xff0c 来
  • 【Python深度学习之路】-2.1 机器学习的流程

    2 1 机器学习的流程简介 进行机器学习的整体流程 xff1a 数据收集 数据清洗 xff08 清洗重复或缺失的数据 xff0c 以提高数据的精读 xff09 运用机器学习算法对数据进行学习 xff08 获取基准 xff09 使用测试数据进
  • 【Python深度学习之路】-2.2 过拟合与集成学习

    2 3 过拟合 计算机对数据进行了过度的学习而产生的状态 xff0c 简称 过拟合 避免过拟合的方法 xff1a 深度学习中会使用 Dropout 的方法 xff0c 而在常规解决方案中 xff0c 我们通常会使用 归一化 来消除对存在偏差
  • 【Python深度学习之路】-4 监督学习

    Python深度学习之路 4 监督学习 4 1 了解监督学习 xff08 分类 xff09 监督学习 xff1a 根据积累的经验数据对新的数据或将来的数据进行预测 xff0c 或者进行分类的一种学习方式 无监督学习 xff1a 对积累的经验
  • 【Python】string模块之ascii_letters、digits(用于生成验证码)

    方法概述 xff1a 1 ascii letters方法的作用是生成全部字母 xff0c 包括a z A Z 2 digits方法的作用是生成数组 xff0c 包括0 9 span class token keyword import sp
  • 傅里叶变换

    傅里叶变换 目录 滤波傅里叶变换简介傅里叶变换的性质快速傅里叶变换 xff08 FFT xff09 一 xff1a 滤波 滤波是将信号中特定波段频率滤除的操作 xff0c 是抑制和防止干扰的一项重要措施 是根据观察某一随机过程的结果 xff
  • centos 常用的网络登录端口测试工具

    ssh 登录 last lastb who users w lastlog ac d ac p lsof lsof i 443 ngrep ngrep port 80 ngrep q 39 GET HTTP 1 01 39 ngrep q
  • 基于stm32的半实物仿平台开发——FreeRTOS、PID控制电机

    目录 一 系统方案 1 1 系统基本方案 1 2 程序结构方案设计 二 系统理论分析计算 2 1控制算法的分析 三 硬件的选型 3 1编码器电机的选型 四 源代码 摘要 本文基于STM32F103ZET6开发板开发了一个直流电机的实物控制系
  • vnc viewer使用方法

    首先需要配置ip xff0c 网络适配器配置那个ipv4到同一网段 1 双击打开exe 2 输入目标ip 端口 3 输入密码 服务器管理工具 这里写目录标题 一 VNC管理工具1 1 工具介绍1 2 使用步骤1 3 使用截图 二 KVM安装
  • 【Unity Shader】用Cubemap实现天空盒和环境映射

    1 关于Cubemap Cubemap在实时渲染中有很多应用 xff0c 最常见的就是实现天空盒 xff08 Skybox xff09 和环境映射 xff08 Environment Mapping xff09 2 实现天空盒 2 1 实现
  • ubuntu samba搭建教程

    1 更新当前软件 sudo apt get upgrade sudo apt get update sudo apt get dist upgrade 2 安装samba服务器 sudo apt get install samba samb
  • 大数据学习路径

    第一阶段linux 43 搜索 43 hadoop体系 Linux基础 shell编程 高并发架构 lucene solr搜索 hadoop体系 HDFS mapreduce hbase zookeeper hive flume sqoop
  • 【Windows11来了】WIN11抢先体验,使用VMware虚拟机安装WIN11

    2021 6 30更新 xff1a 解决安装时出现 Operating System not found 的问题 2021 6 26更新 xff1a 解决了不同VMware版本可能默认引导方式不同造成启动不成功的问题 2021 6 25更新
  • 斜杠、反斜杠、双斜杠、反双斜杠的区别和使用方法及范围

    背景 这边我就找了两篇大神写的文章 xff0c 讲得非常清晰明了 文章主要讲了一些历史缘故和我们面对各种斜杠时的疑惑 斜杠 和反斜杠 深入探讨正斜杠和反斜杠 概念 1 斜杠 34 34 是URL地址中用到的分隔符 xff0c 并且在linu
  • C语言中int占几个字节,指针占几个字节,由什么决定呢?

    int占几个字节 今天心血来潮 xff0c 想要了解一下C语言中各整型占用几个字节 先上代码测试两个环境 xff1b include lt stdio h gt include lt stdlib h gt int main printf
  • 虚拟串口模拟器和串口调试助手使用教程

    虚拟串口 xff08 虚拟 COM 端口 xff09 xff0c 应该很多人都知道 xff0c 也就是一种模拟物理串行接口的 软件 它完全复制了硬件 COM 接口的功能 xff0c 并且将被操作系统和串行应用程序识别为真实端口 以前的电脑