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

【MATLAB 串口调试+虚拟串口测试】

文章目录

  • 前言
  • 一、matlab 串口
  • 二、测试串口
    • 1.从系统中获取串口号
    • 2.避免串口打开被占用
    • 3. 安装虚拟串口
    • 4. 打开串口助手和MATALB 进行测试
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

项目需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、matlab 串口

二、测试串口

1.从系统中获取串口号

% 获取所有可用的串口信息  
% ports = serialportlist;  
%   
% % 显示串口信息  
% for i = 1:length(ports)  
%     fprintf('Port %d: %s\n', i, ports(i).PortName);  
%     % 如果需要更多信息,可以访问其他字段,如:  
%     % fprintf('  Description: %s\n', ports(i).Description);  
%     % fprintf('  Manufacturer: %s\n', ports(i).Manufacturer);  
% end% 获取所有可用的串口信息  
ports = serialportlist;  % 检查是否有可用的串口  
if isempty(ports)  disp('没有检测到任何串口设备。');  
else  % 显示串口信息  for i = 1:length(ports)  fprintf('Port %d: %s\n', i, ports(i));  end  
end% 获取所有可用的串口端口号  
portNames = {ports}; % 这是一个单元数组  % 将单元数组转换为字符串数组(如果需要)  
portNamesStr = string(portNames); % 在 MATLAB R2016b 及更高版本中可用  % 显示端口号  
disp(portNamesStr);% 创建并打开串口  
serialObj = serialport(portNamesStr, 9600); 
serialObj.DataBits = 8;  
serialObj.StopBits = 1;  
serialObj.Parity = 'none';  % open(serialObj);  % 发送数据  
dataToSend = 'Hello, Serial Port!';  
% fwrite(serialObj, dataToSend, 'char');  % 等待一段时间以接收数据(假设设备有延迟)  
pause(2);  % 读取数据  
numBytesToRead = 100;  
% receivedData = fread(serialObj, numBytesToRead, 'char=>char');  
receivedData = read(serialObj, numBytesToRead, 'char');
receivedDataStr = char(receivedData);  % 显示接收到的数据  
disp('Received Data:');  
disp(receivedDataStr);  % 关闭串口  
% close(serialObj);  
clear serialObj;

2.避免串口打开被占用

matlab 调试打开一次串口后,下次就会被占用,必须关闭matlab在开才行,所以为了避免这个问题,要容错
代码如下(示例):

% 定义串口参数
% 创建并打开串口  serialComName = 'COM4';
serialBaudrate = 9600;
serialDataBit = 8;
serialCheckBit = 'none';
serialStopBit = 1;% 尝试打开串口
trySerial_Obj=serialport(serialComName,serialBaudrate,"Parity",serialCheckBit,"DataBits",serialDataBit,"StopBits",serialStopBit,"Timeout",1);text1 = '串口打开成功';disp(text1)catch% 串口打开失败text = '串口打开失败';disp(text)% 删除串口delete(Serial_Obj);
end

完整程序

% 获取所有可用的串口信息  
ports = serialportlist;  % 检查是否有可用的串口  
if isempty(ports)  disp('没有检测到任何串口设备。');  
else  % 显示串口信息  for i = 1:length(ports)  fprintf('Port %d: %s\n', i, ports(i));  end  
end% 获取所有可用的串口端口号  
portNames = {ports(2)}; % 这是一个单元数组  % 将单元数组转换为字符串数组(如果需要)  
portNamesStr = string(portNames); % 在 MATLAB R2016b 及更高版本中可用  % 显示端口号  
disp(portNamesStr);% 创建并打开串口  serialComName = portNamesStr;
serialBaudrate = 9600;
serialDataBit = 8;
serialCheckBit = 'none';
serialStopBit = 1;% 尝试打开串口
trySerial_Obj=serialport(serialComName,serialBaudrate,"Parity",serialCheckBit,"DataBits",serialDataBit,"StopBits",serialStopBit,"Timeout",1);text1 = '串口打开成功';disp(text1)catch% 串口打开失败text = '串口打开失败';disp(text)% 删除串口delete(Serial_Obj);
end% open(serialObj);  % 发送数据  
dataToSend = 'Hello, Serial Port!';  
write(Serial_Obj, dataToSend, "uint8");  % 等待一段时间以接收数据(假设设备有延迟)  
pause(2);  % 读取数据  
numBytesToRead = 100;  
% receivedData = fread(serialObj, numBytesToRead, 'char=>char');  
receivedData = read(Serial_Obj, numBytesToRead, 'char');
receivedDataStr = char(receivedData);  % 显示接收到的数据  
disp('Received Data:');  
disp(receivedDataStr);  % 关闭串口  clear Serial_Obj;

3. 安装虚拟串口

vspd.exe
在这里插入图片描述
在这里插入图片描述
一路点击安装
在这里插入图片描述
在这里插入图片描述

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

4. 打开串口助手和MATALB 进行测试

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

总结

为下一步guide做准备,连接下位机STM32 不成问题
学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!

相关文章:

【MATLAB 串口调试+虚拟串口测试】

文章目录 前言一、matlab 串口二、测试串口1.从系统中获取串口号2.避免串口打开被占用3. 安装虚拟串口4. 打开串口助手和MATALB 进行测试 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文…...

mac 安装最新版nginx

1. clone最新版本源代码: git clone https://github.com/nginx/nginx.git 2. 下载PCRE 没有PCRE那我们就下,下载地址:https://sourceforge.net/projects/pcre/files/pcre/,笔者下载的pcre-8.45.zip,下载之后解压到ngi…...

极氪汽车困局:营销频繁车、产品力不足

“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜,但因频繁忽视老用户和产品力不足的争议,并未赢得消费者好感,反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日,背靠吉利集团的极氪…...

Icecream 与 Python 日志库及性能分析整合指南

简介 Icecream 是一个用于简化 Python 调试过程的库,它允许开发者轻松打印变量名和它们的值。Python 的 logging 库则提供了一个强大的日志记录系统,用于跟踪应用程序的运行情况。而性能分析则是评估代码执行效率的重要手段。本指南将介绍如何将 Icecre…...

请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()

请解读下面的程序: pat re.compile(r\d) res pat.search(www.ddd996.com) res.group() 这段程序使用了正则表达式模块re来搜索字符串中的数字。首先,通过re.compile函数创建了一个正则表达式对象pat,该正则表达式是r\d,意味着匹…...

Fibonacci任意一位的值得算法

csDP写法 using System; class Program {static void Main(string[] args){Console.WriteLine("请输入一个非负整数&#xff1a;");// 读取用户输入while(true){string input Console.ReadLine();int n Convert.ToInt32(input);if (n < 0){Console.WriteLine(&…...

gbn,sr和tcp的区别

这是关于三种不同协议&#xff08;GBN、SR、TCP&#xff09;处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制&#xff1a; GBN&#xff08;Go-Back-N&#xff09;协议&#xff1a; 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…...

FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库

1. 背景 前期已经完成FastGPT的本地化部署工作&#xff0c;通过Docker启动FastGPT的相关容器即可运行。&#xff08;共6个容器&#xff09; 2.本地化开发 2.1 前置依赖 2.2 源码拉取 git clone gitgithub.com:labring/FastGPT.git2.3 数据库管理 本地化运行的FastGPT使用…...

hardhat部署智能合约

Hardhat安装 安装node 可以使用 nvm 安装node GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 安装Hardhat 打开命令行工具&#xff0c;输入&#xff1a; mkdir hardhat-demo cd hardhat-demo npm i…...

界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…...

【ERROR】ubuntu source: not found

Ubuntu 24.04.1 LTS系统设置环境变量&#xff0c;执行 source ~/.bashrc出现错误&#xff1a; source command not found 解决方案&#xff1a;不需要处理( echo 以下你的环境变量&#xff0c;发现是生效的)&#xff0c;ubantu系统 中 /bin/sh 通常链接到 dash&#xff0c;这…...

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 &#xff08;一&#xff09;模版方法postProcessBeanFactory &#xff08;二&#xff09;AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …...

配置nginx服务通过ip访问多网站

过程概要 1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 3.查看nginx是否开启 4.为当前主机添加多地址&#xff08;ip a&#xff09; 5.自定义nginx配置文件通过多地址区分多网站 /etc/nginx/conf.d/test_ip.conf server { #标记为一个虚拟主机 } 6.根据配置…...

银河麒麟V10设置QT开发程序开机自启动

1、切换root用户: su root 2、进入/etc/xdg/autostart目录&#xff1a; cd /etc/xdg/autostart 3、创建一个test.desktop文件&#xff0c;文件名不一定命名为test&#xff0c;可以自己随意命名&#xff1a; touch test.desktop 4、完善test.desktop文件内容&#xff1a; …...

RabbitMQ高级特性详解

前言 RabbitMQ是一款广泛使用的开源消息队列软件&#xff0c;它基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现。本文将带你深入了解RabbitMQ的一些高级特性&#xff0c;包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等&#xff…...

提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践

提升泛化能力的前沿方法&#xff1a;多任务学习在机器学习中的应用与实践 &#x1f4cb; 目录 &#x1f9e9; 多任务学习的概念与动机&#x1f310; 多任务学习在自然语言处理中的应用案例&#x1f5bc;️ 多任务学习在计算机视觉中的应用案例⚙️ 项目实践&#xff1a;实现多…...

【小白学机器学习16】 概率论的世界观2

目录 一 从正态分布说起 1.1 正态分布是自然分布&#xff0c;是客观 1.2 万物不齐 1.3 中庸 1.4 动态平衡 正态分布&#xff0c;概率论都是一种世界观 一 从正态分布说起 1.1 正态分布是自然分布&#xff0c;是客观 世界是客观的&#xff0c;是不以人们的意志想法为转…...

洛谷 P9868 [NOIP2023] 词典

好久不写博客了&#xff0c;今天来水一篇 原题链接 初看此题在洛谷上的定位是黄题&#xff0c;实际上也并不是很简单。 其实主要就用到了贪心的思想&#xff0c;先说一下我在做题的时候是怎么想的吧。 先看了部分分&#xff0c;10分是很好拿的&#xff0c;再就分析题意&…...

跨浏览器免费书签管理系统

随着互联网信息的爆炸式增长&#xff0c;如何有效管理我们日常浏览中发现的重要网页&#xff0c;成为了每个重度互联网用户的需求。一个跨平台的书签管理网站能够帮助用户在不同设备之间无缝同步和管理书签。本文将分享如何使用 Python 和 SQLite 构建一个简单、易于维护的跨平…...

导出Excel的常用方法:从前端到后端的全面指南

导出Excel的常用方法&#xff1a;从前端到后端的全面指南 在现代Web应用中&#xff0c;导出数据为Excel文件是一个常见需求。无论是为了数据分析、记录保存还是简单的数据共享&#xff0c;Excel文件都因其广泛的兼容性和易用性而成为首选格式之一。本文将介绍几种常用的Excel导…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...