MATLAB串口通信技术
matlab中的串口通信通信系统设计

文章标题:探索Matlab中的串口通信系统设计在当前的现代通信系统中,串口通信系统设计已经成为一项至关重要的任务。
在Matlab中,借助各种工具和函数,我们可以设计出高效、稳定和灵活的串口通信系统。
本文将从简单到复杂、由浅入深地探讨Matlab中的串口通信系统设计,为读者提供全面的了解和深入的思考。
1. 串口通信系统概述在进行Matlab中的串口通信系统设计之前,我们首先需要了解串口通信系统的基本概念和原理。
串口通信是通过串行接口进行数据传输的一种通信方式,它在各种领域中都有着广泛的应用,包括嵌入式系统、通信设备、工业控制等。
Matlab作为强大的工程计算软件,为我们提供了丰富的工具和函数来进行串口通信系统设计,包括串口对象、串口配置、数据读写等功能。
2. Matlab中的串口通信基本操作在Matlab中,我们可以通过串口对象来进行串口通信的基本操作。
我们需要创建一个串口对象,并进行相应的配置,包括波特率、数据位、停止位、校验位等参数。
我们可以使用该串口对象来进行数据的读写操作,可以发送数据到外部设备,也可以接收来自外部设备的数据。
通过Matlab中丰富的串口函数,我们可以轻松实现串口通信系统的基本功能。
3. Matlab中的串口通信系统设计在实际的工程应用中,我们通常需要设计更加复杂和灵活的串口通信系统。
在Matlab中,我们可以借助信号处理工具箱、通信工具箱等功能来进行串口通信系统的设计。
通过信号处理工具箱,我们可以实现对串口数据的解调、调制、滤波等操作,从而提高通信系统的稳定性和性能。
而通信工具箱中的各种算法和工具则可以帮助我们实现更加复杂的通信协议和数据处理。
4. 个人观点和总结在我看来,Matlab是一款非常适合进行串口通信系统设计的软件,它不仅提供了丰富的工具和函数,还具备强大的计算能力和灵活的编程环境。
通过Matlab,我们可以实现从简单到复杂的串口通信系统设计,为各种应用场景提供定制化的解决方案。
matlab之串口通信

matlab之串口通信matlab之串口通信串口通信,一般是指RS232、RS422之间的通信。
matlab中有专门的serial函数来创建串口对象。
设串口ID号为COM1,则创建方法为:复制内容到剪贴板代码:>>scom= serial('com1');创建完串口对象后,一般需要设置串口对象的属性,否则,串口不会相互通信。
复制内容到剪贴板代码:>> get(scom)ByteOrder = littleEndianBytesAvailable = 0BytesAvailableFcn =BytesAvailableFcnCount = 48BytesAvailableFcnMode = terminatorBytesToOutput = 0ErrorFcn =InputBufferSize = 512Name= Serial-COM1ObjectVisibility = onOutputBufferSize = 512OutputEmptyFcn =RecordDetail = compactRecordMode = overwriteRecordName = record.txtRecordStatus = offStatus = closedTag=Timeout = 10TimerFcn =TimerPeriod = 1TransferStatus = idleType= serialUserData = []ValuesReceived = 0ValuesSent = 0SERIAL specific properties:BaudRate= 9600BreakInterruptFcn =DataBits = 8DataTerminalReady = onFlowControl = noneParity = nonePinStatus = [1x1 struct]PinStatusFcn =Port= COM1ReadAsyncMode = continuousRequestToSend = offStopBits = 1Terminator = LF这些属性中,要使串口真正通信,一般要设置这几个属性:BaudRate:波特率;Parity:奇偶校验类型;DataBits:数据位,一般为8,不用设置;StopBits:停止位,一般为1,不用设置;TimerFcn :定时回调函数;TimerPeriod:定时周期;BytesAvailableFcn:字节计数回调函数BytesAvailableFcnCount:字节计数BytesAvailableFcnMode:一般设置为字节模式,即byte串口通信时,数据一般按帧传送,有的数据量比较大,会将帧打包后发送。
matlab串口程序

matlab串口程序Matlab是一种功能强大的编程语言和数学软件环境,被广泛应用于科学计算、数据可视化、机器学习等领域。
其中,串口通信是Matlab中常见的应用之一,通过串口可以实现与外部设备的数据交互,例如与传感器、机器人等进行通信。
本文将介绍如何使用Matlab进行串口通信的编程。
我们需要了解一些基本概念。
串口通信是通过计算机的串行接口与外部设备进行数据传输的一种方式。
在Matlab中,可以使用Serial对象来实现串口通信。
Serial对象提供了一系列函数,用于打开、关闭、读取和写入串口数据。
在使用Serial对象之前,需要先创建该对象并设置相关参数,如串口号、波特率、数据位数、停止位等。
在Matlab中,首先需要创建一个Serial对象,可以使用以下代码实现:```s = serial('COM1'); % 创建Serial对象,指定串口号为COM1```上述代码中,'COM1'表示串口号,可以根据实际情况进行修改。
创建Serial对象后,还需要设置相关参数,例如波特率、数据位数、停止位等,可以使用以下代码实现:```set(s, 'BaudRate', 9600); % 设置波特率为9600set(s, 'DataBits', 8); % 设置数据位数为8set(s, 'StopBits', 1); % 设置停止位为1```上述代码中,'BaudRate'表示波特率,可以根据实际情况进行修改,常见的波特率有9600、115200等;'DataBits'表示数据位数,一般为8位;'StopBits'表示停止位,一般为1位。
设置完参数后,还需要打开串口以便进行数据的读取和写入。
可以使用以下代码打开串口:```fopen(s); % 打开串口```打开串口后,我们可以使用Serial对象提供的函数进行数据的读取和写入。
MATLAB串口通讯

if recdta==255 %找帧头
rectr=rectr+1; %接收计数器加1
recbuf(rectr)=recdta; %送入接收缓冲区
elseif recdta==framelen&rcbuf(1)==255 %验证接收长度和帧头
%以下程序用以数据进行滤波
inbuffer2=filter(…., Inbuffer1);
%以下程序用以对滤波后数据进行文件存储
fid = fopen('C:\MATLAB7\work\data.txt','a+'); %创建并data.txt文件
fprintf(fid,'%3d',inbuffer2); %将滤波后数据存储到fid文件设备中
%根据具体通讯协议提取数据
…
%接收滤波后的数据
….
plot(…) %输出显示
end
else rectr=0; %未找到帧头清计数器
end %接收结束
end %主循环结束
g.inputbuffersize=256; %设置输入缓冲区为256b,缺省值为512b
g.Terminator='LF'; %设置输入缓冲区为256b,缺省值
recbuf=zeros(1,40); %清接收缓冲区(40)
framelen=23; %帧长度(每帧23byte)
%修改后的instrcallback.m文件如下:
function instrcallback(obj, event)
%以下是用户自行添加的通信事件处理及通信数据处理的中断服务程序代码
%定义存储串口30个字节通信数据的数组
matlab串口通信基础讲义

matlab串口通信基础讲义①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信;②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言;③支持异步通信和同步通信;④支持基于事件驱动的通信。
从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。
3.1Matlab对串行口控制的基础知识Matlab对串行口的编程控制主要分为四个步骤。
①创建串口设备对象并设置其属性。
scom=serial('com1');%创建串口1的设备对象scomscom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符)scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512Bscom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512Bscom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10ss.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中.注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。
对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。
如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。
MATLAB 串口通信技术

一. MATLAB串口通信技术对于WINDOWS系统而言,硬件系统的驱动程序有着十分严格的规范,可以用C或汇编语言进行开发,而MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力。
即使安装了驱动程序并能正常工作的硬件设备,MATLAB也没有统一的形式对其进行访问。
对于系统的串口,在MATLAB6.X中以类(SERIAL)的形式提供了支持。
当用指令建立了一个串口对象(句柄)以后,对串口的硬件操作可以文件操作的软件形式来完成,方法比较简单。
常用的串口操作命令及其含义如下表(1)所示,这些命令既可在MATLAB命令窗口实现,也可以M文件的形式出现,使用起来十分方便。
表1 MATLAB串口操作命令表二. 数据采集系统与PC机通信的硬件电路为了简化系统的硬件设计,数据采集系统的微转换器选用AD公司的全集成芯片ADu C812,该芯片包含有12位高性能的自校准8通道ADC,两个12位的DAC,与8051兼容的内核使用户无须学习新的指令系统。
片内8K闪速/电摖除程序存储器使数据采集系统具有在线下载编程能力,利用AD公司提供的免费SERIAL WINDOW DOWNLOAD就可以将H EX文件下载到ADuC812内,对于不同的应用场所可以方便的修改系统的参数,既不需要昂贵的编程器,也不需打开机壳插拨芯片,只需将一条电缆连接到计算机的COM1或COM 2即可。
另外该转换器还支持看门狗定时器、电源监视器及ADC的DMA等功能,可编程的I/O口具有三种类型的串口UART、SPI、I2C,价格也比较便宜,是一种理想的转换器。
系统的硬件组成如下图(1)所示。
图1 ADUC812与PC机串口通信的硬件电路图其中ADM202及P3.0\P3.1构成了与计算机通信的RS232接口,它有两个功能,一是实现计算机与数据采集系统的数据通信。
另一功能是与JP1配合使用,完成将程序从计算机下载到ADuC812片内的闪速/电摖除程序存储器中。
Matlab中的串口通信与硬件控制

Matlab中的串口通信与硬件控制在科学与工程领域,与硬件设备的通信和控制是一个非常重要的环节。
例如,根据传感器的读数来控制机器人的运动、通过串口与测量仪器进行数据交互等等。
Matlab作为一种功能强大的数学软件,提供了强大的串口通信与硬件控制功能,能够帮助工程师和科学家们简化开发流程并降低开发难度。
一、串口通信基础串口通信是一种实现设备之间数据传输的常见方式。
在Matlab中,我们可以通过Serial对象来实现与串口设备的通信。
首先,需要了解一下串口通信的基本概念。
1. 波特率(Baud Rate)波特率是指每秒传输的比特数。
它决定了数据传输的速率。
在串口通信中,发送端和接收端的波特率必须保持一致,否则数据会出现错误。
2. 数据位(Data Bits)数据位是指每个字符中实际的数据位数。
常见的数据位数有5位、6位、7位和8位。
一般来说,数据位较多可以提供更高的数据传输精度。
3. 校验位(Parity Bit)校验位是一种用于检测数据传输错误的方法。
它可以用于检验数据位中有效数据的奇偶性,常见的校验位有None、Even和Odd三种模式。
4. 停止位(Stop Bit)停止位是指每个字符的结束位数。
常见的停止位有1位和2位,通常使用1位即可。
二、Matlab中的串口通信Matlab提供了Serial对象来实现与串口设备的通信。
首先,我们需要创建一个Serial对象,并设置合适的串口参数。
例如,我们可以使用如下代码创建一个Serial对象:```matlabs = serial('COM1'); % 创建一个Serial对象,指定串口为COM1set(s, 'BaudRate', 9600); % 设置波特率为9600set(s, 'DataBits', 8); % 设置数据位为8位set(s, 'Parity', 'None'); % 设置校验位为Noneset(s, 'StopBits', 1); % 设置停止位为1位```接下来,我们可以打开Serial对象并开始串口通信:```matlabfopen(s); % 打开Serial对象```可以使用`fwrite`函数向串口写入数据,使用`fread`函数从串口读取数据。
MATLAB与硬件设备的连接与控制

MATLAB与硬件设备的连接与控制近年来,科技的迅猛发展使得人们对于计算机科学和工程技术的需求日益增长。
作为一款强大的科学计算软件,MATLAB以其方便的使用和高效的性能受到了广泛的关注和应用。
然而,尽管MATLAB在数据分析、数学建模和算法开发等方面表现出色,但与硬件设备的连接与控制依然是一个热门的话题。
本文将探讨MATLAB如何与各类硬件设备实现连接与控制,并展示了一些具体的实例。
一、MATLAB与串口通信MATLAB提供了一套强大的串口通信功能,使得用户可以通过串口与各种硬件设备进行通信。
利用MATLAB的串口通信工具箱,我们可以很方便地实现与微控制器、传感器和其他外设的连接。
通过简单的代码编写,我们可以读取串口传输的数据,并在MATLAB环境中进行进一步处理和分析。
例如,我们可以使用MATLAB来监测温度传感器的数据,并实时显示温度变化的曲线图。
这种灵活且高效的通信方式为各类实时监测和控制系统的搭建提供了极大的便利。
二、MATLAB与图像处理设备的连接图像处理是现代计算机视觉和图形学领域的重要研究内容,而与图像处理设备的连接与控制则成为图像处理的基础。
通过MATLAB,我们可以与各类摄像头、光学传感器等设备实现连接并进行相关的图像采集和处理。
MATLAB提供了一些强大的图像处理工具箱,如图像滤波、边缘检测和图像分割等功能,可以帮助用户进行图像数据的处理和分析。
例如,我们可以利用MATLAB连接数字相机,并使用图像处理算法实现人脸识别或者运动追踪等应用。
三、MATLAB与机器人控制机器人技术作为现代工业制造领域中的核心内容,对于与硬件设备的连接与控制提出了更高的要求。
MATLAB通过机器人控制工具箱提供了一系列强大的功能,可以方便地与各类机器人控制器和传感器进行通信。
利用MATLAB的机器人控制工具箱,我们可以设计和实现各种类型的机器人任务,如路径规划、物体抓取和自主导航等。
例如,我们可以编写MATLAB代码,实现机器人在指定的环境中自主探索和定位目标物体的功能。
Matlab与51单片机的串口通信

数字信号处理2012电子信息工程专业答辩报告姓名杨全任伟学号********* *********成绩Matlab与51单片机的串口通信一、简介从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口(九针串口)通信正式支持(本实验采用USB转串口)利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。
Matlab支持面向对象技术,用一个对象将计算机串口封装起来,只要创建串口对象,对串口对象操作就是对串口操作,非常方便。
使用serial函数就可创建串口对象,通过定义串口对象的属性,能定义串口的通信模式,从串口对象属性也能了解串口的状态,即可以通过MATLAB的串口通讯函数读写数据。
二、 Matlab串口函数serial 创建一个串口对象,格式:s = serial('coml' )fopen 打开串口对象,格式:fopen(s)fwrite 其他程序能对该串口进行读写操作fwrite(s,’’)fread 读取串口数据,格式: fread(s)fclose 关闭串口对象,格式:fclose(s)free 解除Matlab对串口对象的控制,使delete 删除对象s,格式:delete(s)clear 从工作空间中删除对象s,格式:clear(s)三、实现功能利用MATLAB串口通信函数,读写51单片机(STC89C52R+)数据,运用keil编写时钟程序,烧录到单片机中,时钟程序实现的功能是实现时钟的显示,并且能用开发板上的三个按钮进行时钟的修改,一个按钮进入修改模式(复位),另两个实现时间的增减。
编辑MATLAB程序,实现对单片机的控制。
读写串口操作。
初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口读写操作支持二进制和文本(ASCII)两种方式。
MATLAB环境下两主机间的串口通信

delete(s);
clear(s)
步骤四、MATLAB中GUI的实现
步骤五、能量管理系统中GUI的实现
步骤一、设置用户自定义模块
1、பைடு நூலகம்模型中添加用户自定义模块
该模块位于Simulink、User-Define Function下的S-Function模块
2、添加模块对应的函数名,双击模块,在弹出窗口S-function name后面输入要定义的函数名
3、编写模块对应的函数代码,函数代码要求有固定的格式
count=fwrite(fid,y,’float32’);
>> fclose(fid);
(2)发送数据函数
>> %read data from file
>> fid=fopen('f:/sin.bin','r');
[x,countx]=fread(fid,629,'float32');
步骤二、编写自定义模块中s函数
通过自定义s函数,使用serial对象来实现。
建立串口对象,设置参数,fopen,fscan,fprintf,fclose,fdelete等。
创建串口对象、设置参数、打开串口是在s函数初始化的时候通过回调函数来实现。
读写串口是在sfunction的输出实现的。fclose、fdelete是在sfunction的terminate里实现
>> [y,county]=fread(fid,629,'float32');
>> fclose(fid);
>> s=serial('COM1');
MATLAB串行通信的实现方法

MATLAB串行通信的实现方法1.硬件串口通信方法硬件串口是计算机与外部设备(如传感器、微控制器等)之间进行数据传输的接口。
要使用硬件串口进行通信,首先需要连接计算机和外部设备。
接下来,可以按照以下步骤在MATLAB中实现串行通信:步骤1:确定串口参数使用MATLAB提供的命令`instrhwinfo('serial')`来查看计算机上可用的串行端口和其相关信息。
根据需要,选择合适的串口参数,包括波特率、数据位、停止位和校验位等。
步骤2:创建串行端口对象使用`serial`函数创建一个串行端口对象,并指定串口号和参数。
例如,`s = serial('COM1', 'BaudRate', 9600)`将创建一个串行端口对象s,并设置波特率为9600。
步骤3:打开串口使用`s`对象的`fopen`函数打开串口连接。
例如,`fopen(s)`将打开与外部设备的串行通信连接。
步骤4:收发数据使用`s`对象的`fread`和`fwrite`函数进行数据的接收和发送。
例如,`data = fread(s, n)`将从串口接收n个字节的数据并存储在变量`data`中,`fwrite(s, data)`将发送变量`data`中的数据到串口。
步骤5:关闭串口`fclose(s)`将关闭串行通信连接。
2.虚拟串口通信方法虚拟串口是一种通过软件模拟的串口,可以在计算机上模拟硬件串口的功能。
使用虚拟串口进行通信时,不需要实际的硬件设备,只需要安装虚拟串口软件即可。
以下是使用虚拟串口进行通信的方法:步骤1:安装虚拟串口软件步骤2:创建虚拟串口对在虚拟串口软件中创建一个虚拟串口对,一个作为发送端口,一个作为接收端口。
将发送端口与接收端口进行连接。
步骤3:创建串行端口对象使用`serial`函数创建一个串行端口对象,并指定虚拟串口对的接收端口。
例如,`s = serial('COM3', 'BaudRate', 9600)`将创建一个串行端口对象s,并设置波特率为9600。
(完整版)MATLAB串口通信设计源码

(完整版)MATLAB串口通信设计源码function varargout = PJSerialCOM(varargin)% PJSERIALCOM M-file for PJSerialCOM.fig% PJSERIALCOM, by itself, creates a new PJSERIALCOM or raises the existing% singleton*.%% H = PJSERIALCOM returns the handle to a new PJSERIALCOM or the handle to% the existing singleton*.%% PJSERIALCOM('CALLBACK',hObject,eventData,handles,...) calls thelocal% function named CALLBACK in PJSERIALCOM.M with the given input arguments.%% PJSERIALCOM('Property','Value',...) creates a new PJSERIALCOM or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before PJSerialCOM_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to PJSerialCOM_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUIallows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help PJSerialCOM% Last Modified by GUIDE v2.5 26-May-2012 18:45:14 % Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct( 'gui_Name' 'gui_Singleton' 'gui_OpeningFcn''gui_OutputFcn''gui_LayoutFcn''gui_Callback' if nargin && ischar(varargin{1})gui_State.gui_Callback =str2func(varargin{1}); endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before PJSerialCOM is made visible.function PJSerialCOM_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLABmfilename, ... gui_Singleton, ..., @PJSerialCOM_OpeningFcn,@PJSerialCOM_OutputFcn, [] , ... []);% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to PJSerialCOM (see VARARGIN)% Choose default command line output for PJSerialCOM handles.output = hObject;% Update handles structure guidata(hObject, handles);% UIWAIT makes PJSerialCOM wait for user response (see UIRESUME) % uiwait(handles.figPJSerialCOM); set(handles.btnClosePort, 'Enable' , 'off' ); set(handles.btnSendData, 'Enable' , 'Off' );setappdata(handles.figPJSerialCOM, 'u' , '' );% --- Outputs from this function are returned to the command line.function varargout = PJSerialCOM_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structure varargout{1} = handles.output;% --- Executes on selection change in pumComPort. function pumComPort_Callback(hObject, eventdata, handles)% hObject handle to pumComPort (see GCBO)% eventdata reserved - to be defined in a future version ofMATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumComPort contents as cell array% contents{get(hObject,'Value')} returns selected item from pumComPort % --- Executes during object creation, after setting all properties. functionpumComPort_CreateFcn(hObject, eventdata, handles) % hObject handle to pumComPort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. get(0, 'defaultUicontrolBackgroundColor' set(hObject, 'BackgroundColor' , 'white' );end% --- Executes on selection change in pumBaudRate. functionpumBaudRate_Callback(hObject, eventdata, handles)if ispc && isequal(get(hObject, 'BackgroundColor' ),))% hObject handle to pumBaudRate (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumBaudRate contents as cellarray% contents{get(hObject,'Value')} returns selected item from pumBaudRate % --- Executes during object creation, after setting all properties.function pumBaudRate_CreateFcn(hObject, eventdata, handles)% hObject handle to pumBaudRate (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ), get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );end% --- Executes on selection change in pumDataBits. function pumDataBits_Callback(hObject, eventdata, handles)% hObject handle to pumDataBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumDataBits contents as cellarray% contents{get(hObject,'Value')} returns selected item from pumDataBits % --- Executes during object creation, aftersetting all properties.function pumDataBits_CreateFcn(hObject, eventdata, handles)% hObject handle to pumDataBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint:popupmenu controls usually have a white background on Windows. % See ISPCand COMPUTER.if ispc && isequal(get(hObject, get(0, 'defaultUicontrolBackgroundColor' set(hObject, 'BackgroundColor'end% --- Executes on selection change in pumStopBits.function pumStopBits_Callback(hObject, eventdata, handles) % hObject handle to pumStopBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB 'BackgroundColor' )) , 'white' ); ),% handles structure with handles and user data (see GUIDATA) % Hints:contents = get(hObject,'String') returns pumStopBits contents as cell array% contents{get(hObject,'Value')} returns selected item from pumStopBits% --- Executes during object creation, after setting all properties. functionpumStopBits_CreateFcn(hObject, eventdata, handles)% hObject handle to pumStopBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ),get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' ,'white' );end% --- Executes on selection change in pumParity.function pumParity_Callback(hObject, eventdata, handles)% hObject handle to pumParity (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') array% contents{get(hObject,'Value')} % --- Executes duringobject creation, after setting all properties. function pumParity_CreateFcn(hObject, eventdata, handles)% hObject handle to pumParity (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint:popupmenu controls usually have a white background on Windows. % See ISPCand COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ),get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' ,'white' );end % --- Executes on selection change in pumFlowControl. functionpumFlowControl_Callback(hObject, eventdata, handles)% hObject handle to pumFlowControl (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumFlowControl contentsreturns pumParity contents returns selected item from as cell pumParityas cell array% contents{get(hObject,'Value')} returns selected item from pumFlowControl % --- Executes during object creation, after setting all properties. function pumFlowControl_CreateFcn(hObject, eventdata, handles) % hObject handle to pumFlowControl (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ), get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );endfunction edtRecvData_Callback(hObject, eventdata, handles) % hObject handle to edtRecvData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edtRecvData as text% str2double(get(hObject,'String')) returns contents of edtRecvDataas a double% --- Executes during object creation, after setting all properties. functionedtRecvData_CreateFcn(hObject, eventdata, handles)% hObject handle to edtRecvData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ),get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );end function edtSendData_Callback(hObject, eventdata,handles)% hObject handle to edtSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edtSendData as text% str2double(get(hObject,'String')) returns contents of edtSendDataas a double% --- Executes during object creation, after setting all properties. functionedtSendData_CreateFcn(hObject, eventdata, handles) % hObject handle to edtSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject, 'BackgroundColor' ), get(0, 'defaultUicontrolBackgroundColor' ))set(hObject, 'BackgroundColor' , 'white' );end % --- Executes on button press in btnOpenPort.function btnOpenPort_Callback(hObject, eventdata, handles) % hObject handle to btnOpenPort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (seeGUIDATA)comPort=get(handles.pumComPort, 'String' );handles.u_sCom=serial(comPort{get(handles.pumComPort, 'Value'baudRate=get(handles.pumBaudRate, set(handles.u_sCom, 'BaudRate' te,'Value' )}));dataBits=get(handles.pumDataBits,set(handles.u_sCom, 'DataBits' ts,'Value' )}));stopBits=get(handles.pumStopBits,set(handles.u_sCom, 'StopBits' ts,'Value' )})); parity=get(handles.pumParity, if strcmp(parity, '?T' )==1set(handles.u_sCom, 'Parity' else'String' );,str2double(baudRate{get(handles.pumBaudRa 'String' );,str2double(dataBits{get(handles.pumDataBi 'String' );,str2double(stopBits{get(handles.pumStopBi'String' );, 'none' );if strcmp(parity,set(handles.u_sCom, elseif strcmp(parity, set(handles.u_sCom, elseset(handles.u_sCom, end '??D £?e'==i'Parity' , 'odd' );'??D £?e'==i'Parity' , 'even' )'Parity' , 'none' )end endflowControl=get(handles.pumFlowControl,if strcmp(flowControl, '?T' )==1 set(handles.u_sCom, 'FlowControl' else'String' ); , 'none' );if strcmp(flowControl, set(handles.u_sCom, elseo 2?t' )==1'FlowControl' , 'hardware' );if strcmp(flowControl, set(handles.u_sCom, elseset(handles.u_sCom,「?t')==1'FlowControl' , 'software' );'FlowControl' , 'none' );)});fopen(handles.u_sCom); set(handles.txtStatus, set(hObject, 'Enable'set(handles.btnClosePort, %handles.u_timer=timer('TimerFcn',{@ReadCom,handles},'Per iod',1,'ExecutionMode','fixedrate');guidata(hObject,handles);set(handles.btnSendData, 'Enable' , 'On' );% function ReadCom(obj,eventdata,handles)% set(handles.txtStatus,'String','?y? u ? ae ? e y?Y');% readString=fread(handles.u_sCom,10);% set(handles.edtRecvData,'String',readString);% set(handles.txtStatus,'String','? oe ? e y?Y3 e 1|');% --- Executes on button press in btnClosePort.function btnClosePort_Callback(hObject, eventdata, handles) % hObject handle to btnClosePort (see GCBO)% eventdata reserved - to be defined in a future version ofMATLAB %handles structure with handles and user data (see GUIDATA) fclose(handles.u_sCom); % stop(handles.u_timer);% delete(handles.u_timer); handles.u_sCom=0; guidata(hObject,handles);set(handles.txtStatus, set(handles.btnOpenPort, set(handles.btnSendData,set(hObject, 'Enable' % --- Executes on button press in btnSendData.function btnSendData_Callback(hObject, eventdata, handles) % hObject handle to btnSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)sendString=get(handles.edtSendData, 'String' );fwrite(handles.u_sCom,sendString);set(handles.txtStatus, 'String' set(handles.edtSendData, 'String'% start(handles.u_timer);,'7 ? ^e y?Y3 e 1):, '' ); function BytesAvailableFcnCallback(t,eventdata,handles)readString=fread(handles.u_sCom,1);u=getappdata(handles.figPJSerialCOM, 'u' ); endend endset(handles.u_sCom,set(handles.u_sCom,set(handles.u_sCom,set(handles.u_sCom, set(handles.u_sCom,les});'Timeout' ,1); 'InputBufferSize' ,1024);'BytesAvailableFcnMode' 'BytesAvailableFcnCount' 'BytesAvailableFcn' , 'byte' ); ,1); ,{@BytesAvailableFcnCallback,hand'Stri ng' ,'‘ 6 ?a u 3e 1|'); , 'off' ); 'Enable' , 'On' );'String' , '1? ±u 3e 1|' ); 'Enable', 'On' );'Enable' , 'Off' );, 'Off' );。
基于Matlab-GUI的串口通信编程实现

0 引言Matlab是MathWorks公司开发的一种科学计算软件。
Matlab运行稳定、可靠、使用方便,是广大科研人员进行科学研究的得力助手。
Matlab不仅具有强大的科学计算功能,还具有满足一般要求的数据采集以及界面设计开发功能。
Matlab GUI(Graphic User Interface)就是内置于Matlab的进行图形界面开发的模块。
本文利用Matlab GUI设计通过串口进行数据发送和接收的界面,并利用内置于Matlab的串口通信API实现串口数据发送与接收功能。
1 Matlab GUl介绍启动Matlab后,运行guide命令即可以启动Matlab GUI开发工具。
如图1所示。
新建Blank GUI,如图2所示。
在新建Blank GUI界面中,包含了一般的界面元素,如菜单、按钮、坐标轴、控件等。
添加必要的串口通信参数设置按钮。
运行后的界面如图3所示。
2 串口数据发送与接收功能实现2.1 建立串口通信流程的基本步骤Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。
利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。
从建立串口通信到结束串口通信的完整流程包括以下几个步骤:(1)为应用程序创建串口对象。
实现该功能的函数为:其中参数port为完整的串口名称,如cornl。
PropertyName为串口通信参数,如baudrate,startbits等。
创建串口对象的过程中,也可以忽略PropertyName。
其函数为:(2)连接打开串口。
实现该功能的函数为:obj即为使用创建串口对象函数的返回值。
在连接打开串口后,可以对串口通信参数进行修改。
(3)设置或者修改串口通信参数。
在能够有效地进行串口通信前,必须设置正确的串口通信参数。
实现该功能的函数为:obj即为使用创建串口对象函数的返回值;PropertyName为串口通信参数,如baudrate,startbits等。
MATLAB串口通信

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%本程序主要实现串口控制三轴转台进行自动标定,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%查找串口对象,若串口一开始被占用,需要加上这段程序释放串口,若串口没有被占用,则不需要这段程序scoms = instrfind;%%尝试停止、关闭删除串口对象stopasync(scoms);fclose(scoms); %关闭串口delete(scoms); %释放串口%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all;clc;%%%%%串口配置通道1global s;s = serial('COM13'); %设置串口号s.baudrate = 57600; %设置波特率s.parity = 'none'; %校验位s.stopbits = 1; %停止位s.databits = 7; %数据位s.timeout = 2; %一次读/写的时间最长为0.5ss.InputBufferSize = 1024; %输入缓冲区s.OutputBufferSize = 1024; %输出缓冲区% s.BytesAvailableFcnMode = 'byte'; %中断触发事件为'bytes-available event' % s.BytesAvailableFcnCount = 8; %接收缓冲区每收到n个字节时,触发回调函数% s.BytesAvailableFcn = {'cmd_rec_callback', handles};%得到回调函数句柄fopen(s); %%%%打开串口fclose(s);%%%%%串口配置通道2global s2;s2 = serial('COM15'); %设置串口号s2.baudrate = 460800; %设置波特率s2.parity = 'none'; %校验位s2.stopbits = 1; %停止位s2.databits = 8; %数据位s2.timeout = 2; %一次读/写的时间最长为0.5ss2.InputBufferSize = 1024; %输入缓冲区s2.OutputBufferSize = 1024; %输出缓冲区% s.BytesAvailableFcnMode = 'byte'; %中断触发事件为'bytes-available event' % s.BytesAvailableFcnCount = 8; %接收缓冲区每收到n个字节时,触发回调函数% s.BytesAvailableFcn = {'cmd_rec_callback', handles};%得到回调函数句柄fopen(s2); %%%%打开串口fclose(s2);% InitPos(1)=InitPos(1)+0.3% Pos1=num2str(InitPos(1)');% Pos1=['Q010',Pos1(1,:),'$'];% A=[0 0 0 0 0 0 0 0 0 0 0];% fwrite(s2,A,'uint8')% AA=fread(s2,11,'uint8')%%%%%%%定义变量,存放星点位置PosX=zeros(41,51);PosY=zeros(41,51);AllX=zeros(30,2091);AllY=zeros(30,2091);n=1;InitPos=[0.3 0.0000 93.4253];Flag=0;MouseX=1354;MouseY=376;LeftC=1;global filename4;global filename5;filename4=['D:\1-3\*.bmp' ];filename5=['D:\1-3\'];%%%%%%%三轴转台,自动标定for j=1:41fopen(s);for i=1:51%%%%%%%%%%%控制鼠标左键,采集图像PressMouse(MouseX,MouseY,LeftC);PressMouse(MouseX,MouseY,LeftC);pause(5); %等待整数秒%%%%%%%%%%%%%读取转台位置坐标,进行反馈控制fopen(s2);[Flag]=ReadCoor(s2,InitPos);fclose(s2);while (Flag==1)%%%%%%%%%%%%%删除上次存储的点的图片filename6=dir(filename4); %显示xxx目录下的文件和文件夹[~,index] = sortrows({filename6.date}.'); %index变址向量,重新排序前的地址filename6 = filename6(index);clear indexpath=[filename5]; %查看或者改变路径for k=(length(filename6)-29): length(filename6)A=[path filename6(k).name];delete(A);end%%%%%%%%%%%%%向内轴发定位命令,位置:12.3456?;ASC码:Q01012.3456$ ;16进制数:51H 30H 30H 31H 31H 32H 2EH 33H 34H 35H 36H 24HPos1=num2str(InitPos(1)');Pos1=['Q010',Pos1(1,:),'$'];fwrite(s,Pos1,'char')pause(2);%%%%%%%%%%%%%向中轴发定位命令,位置:12.3456?;ASC码:Q01112.3456$ ;16进制数:51H 30H 31H 31H 31H 32H 2EH 33H 34H 35H 36H 24HPos2=num2str(InitPos(2)');Pos2=['Q011',Pos2(1,:),'$'];fwrite(s,Pos2,'char');pause(2);%%%%%%%%%%%%%向外轴发定位命令,位置:12.3456?;ASC码:Q01212.3456$ ;16进制数:51H 30H 32H 31H 31H 32H 2EH 33H 34H 35H 36H 24HPos3=num2str(InitPos(3)');Pos3=['Q012',Pos3(1,:),'$'];fwrite(s,Pos2,'char');fclose(s);pause(2);%%%%%%%%%%%控制鼠标左键,采集图像PressMouse(MouseX,MouseY,LeftC);PressMouse(MouseX,MouseY,LeftC);pause(5); %等待整数秒% B=[0 12 34 56 0 0 0 0 0 0 0];% fwrite(s2,B,'uint8')fopen(s2);[Flag]=ReadCoor(s2,InitPos);fclose(s2);end%%%%%%%%%%中轴坐标位置一次-0.3°InitPos(2)=InitPos(2)-0.3;%%%%%%%%串口给转台发送命令,设定增量模式,中框增量-0.3°,ASC码:Q02 1 -0.3$ 16进制数:51 30 32 31 2D 30 2E 33 24fwrite(s,'Q021-0.3$','char');pause(3); %等待整数秒end%%%%%%%%%每个点找一张图存到新建文件夹filename=['D:\',num2str(j)]new_folder = filename; % new_folder 保存要创建的文件夹,是绝对路径+文件夹名称mkdir(new_folder); % mkdir()函数创建文件夹filename=dir(filename5);[~,index] = sortrows({filename.date}.'); %index变址向量,重新排序前的地址filename = filename(index);clear indexfor r=1:51k=30*(r-1)+1;path=[filename5];A0=imread([path filename(k).name]);imshow(A0);B=['D:\j\',num2str(r),'.bmp'];imwrite(A0,B,'bmp');endfwrite(s,'Q02115$','char');pause(5);%%%%%%%%%%计算星点坐标[x,y,x0,y0]=SigleStarPointCalibration(j, filename4 ,filename5);PosX(j,:)=x;PosY(j,:)=y;AllX(:,n*51-50)=x0;AllY(:,n*51-50)=y0;n=n+1;%%%%%%%%%%中轴坐标位置回到初始位置InitPos(2)=InitPos(2)+15.3;%%%%%%%%%%内轴坐标位置增量+0.3°InitPos(1)=InitPos(1)+0.3;if (InitPos(1)>360)InitPos(1)=InitPos(1)-360;end%%%%%%%%串口给转台发送命令,增量模式,内框增量-0.3°,ASC码:Q01 0 0.3$ 16进制数:51 30 32 30 30 2E 33 24fwrite(s,'Q0200.3$','char');pause(3); %等待整数秒fclose(s);end%%%%%%%关闭串口fclose(s);%查找串口对象scoms = instrfind;% 尝试停止、关闭删除串口对象stopasync(scoms);fclose(scoms); %关闭串口delete(scoms); %释放串口。
MATLAB 串口通信资料

为了将模拟信号采集到,并对其经AD变换后的数字信号进行保存并处理,包括一些简单的如数字滤波和傅里叶变换等,或者之后可能用到现代的信号处理方法,于是考虑使用stm32负责信号的采集,将数据经232串口送入PC进行处理。
在PC端进行数据接收的方法也很多,典型的应该是用VC++吧?但考虑到MATLAB在信号处理方面比较适合,于是用了MATLAB 的串口通信。
单片机方面,stm32f103rb的工作包括时钟、中断、IO口、串口及AD的初始化,然后启动转换,便可以向串口发数据。
需要注意的是,当向串口发送连续两个数据时(比如16位的高低8位),在等待第一个数据发送完成的方式选择上,不能查询发送完成标志位(TC)。
若采用了查询发送完成标志位,第二个数据将覆盖第一个数据。
解决办法是采用查询发送数据寄存器空标志位(TXE)。
这次的主要工作放在了MATLAB上,因为之前对MATLAB的串口通信不熟,所以是边学边做的,然后顺便又利用GUIDE做了个简单的界面,基本达到要求,等具体用到的时候再去完善吧。
要使用MATLAB接收串口数据,首先需要新建一个串口对象,并初始化,包括波特率,停止位,有无校验,输入输出缓冲区大小等。
scom=serial('COM1'); %串口com1scom.BaudRate = 9600; %波特率scom.InputBufferSize = 1024; %输入缓冲区scom.OutputBufferSize = 1024; %输出缓冲区scom.ReadAsyncMode = 'continuous'; %异步通信时,连续读串口数据scom.BytesAvailableFcnMode = 'byte'; %中断触发事件scom.BytesAvailableFcnCount = 100; %当缓冲区数据scom.BytesAvailableFcn = @instrcallback; %调用回调函数以上是串口的部分属性及相应的修改,若要查看全部属性,可使用语句get(scom),并根据需要自己的修改相关属性。
在MATLAB中使用串口

在MATLAB中使用串口3.2.1MATLAB对RS232的串口通信设计MATLAB是一个跨平台软件,而此处使用的是自主设计的数据采集卡,因此不具备直接访问的能力。
但MATLAB的面向对象技术,已用一个对象把计算机串口封装起来,只要用Serial函数创建串口对象即可[6]。
关键语句为:s=ser ial(‘COM1’,‘BaudRate’,9600)。
MATLAB封装的串口对象支持对串口的异步读写操作,通过对异步读写设置,PC在执行读写串口函数时能立即返回,不必等待串口把数据串输完毕。
当指定数据传输结束时就触发事件,执行事件回调函数,对事件回调函数编程,进行数据处理,这样可以大大提高数据处理的效率。
MEX是MATLAB的可执行程序,是MATLAB调用其它语言编写的程序或算法的接口,在Windows环境下是扩展名为DLL的动态链接库。
对MEX编译器进行配置的方法是:在MATLAB命令窗口中运行mex-setup,选择VC6.0++作为编译器。
用C语言编写端口读、写的操作程序,程序包含有头文件mex.h和m exFunction函数,mexFunction函数中nelhs表示输出变量的个数,plhs包含指向输出变量指针的数组,nrhs表示输入变量的个数,prhs包含指向输入变量指针的数组。
接口编形成的MEX文件与参考文献[7][8]类似,在此不再累述。
3.2.2数据采集与分析(1)数据读取的MATLAB实现主要代码为:%读取通道数及总数据量fid=fopen(‘cardiogram.add’,‘r’);Status=fseek(fid,56,‘bof’);nDataChNum=fread(fid,1,‘long’);status=fseek(fid,204,‘bof’);nAllDataLength=fread(fid,1,‘long’);%按通道数循环读出各通道起始地址status=fseek(fid,76,‘bof’);%for i="1:"nDataChNumpChannelAdr(i)=fread(fid,1,‘long’)end%按通道数循环读出各通道数据for i="1:nDataChNum"status=fseek(fid,pChannelAdr(i)+360,‘bof’)nSegNum=fread(fid,1,‘log’)status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024,‘bof’);data=fread(fid,nAllDataLength,‘short’);endsta=fclose(fid);(2)数据处理与图形绘制利用MATLAB的图形用户接口,通过编程可以很方便地构建数据采集与分析的用户交互界面。
matlab 串口协议解析

matlab 串口协议解析Matlab 是一种功能强大的数值计算和数据可视化工具,它还提供了与外部设备进行通信的功能。
其中,串口通信是一种常见的通信方式,它通过串行通信接口(Serial Port)将计算机与外部设备连接起来。
本文将介绍如何使用Matlab 进行串口协议解析,包括如何配置串口参数、如何发送和接收数据以及如何解析接收到的数据。
需要在 Matlab 中配置串口参数。
可以通过 `serial` 函数创建一个串口对象,并使用 `set` 函数设置串口的各项参数,如波特率、数据位、停止位等。
波特率是串口通信中用于衡量数据传输速率的重要参数,它需要与外部设备的串口参数保持一致。
数据位和停止位则决定了每个数据字节的位数和数据的结束方式。
除此之外,还可以设置奇偶校验位、流控制等参数,以适应不同的通信需求。
配置好串口参数后,可以使用`fopen` 函数打开串口并建立与外部设备的连接。
然后,可以使用`fwrite` 函数向外部设备发送数据。
在发送数据之前,需要将待发送的数据按照协议要求进行封装,以保证数据的可靠传输。
封装的方式可以根据具体的协议要求进行设计,可以是固定长度的数据包,也可以是带有校验位的数据帧。
在封装数据时,需要注意字节顺序和数据类型的转换,以确保数据的正确性和可解析性。
外部设备接收到数据后,可以通过 `fread` 函数从串口缓冲区中读取数据。
读取到的数据是一个字节数组,需要根据协议要求进行解析。
解析过程中,需要注意字节顺序和数据类型的转换,以及数据的截取和组合。
可以使用Matlab 中的位操作函数和类型转换函数,如`bitget`、`bitshift`、`typecast` 等,来处理和转换数据。
解析完成后,可以对接收到的数据进行进一步的处理和分析。
可以根据数据的含义和格式进行特定的操作,如计算数据的平均值、最大值、最小值等;可以将数据可视化,如绘制曲线图、柱状图等;还可以将数据保存到文件中,以备后续分析和处理。
MATLAB制作串口通讯APP2019A

MATLAB制作串口通讯APP2019A由于MATLAB中提供了仪表仪器通信的功能,所以MATLAB可以用来实现串口通信。
1、要实现串口通信,第一步必须要创建一个串口对象,MATLAB中提供了serial函数来创建一个串口对象。
具体用法为:串口中的参数有很多例如:parity校验方式;data bits数据位;stop bits停止位等。
MATLAB设置串口对象后,还要对它的属性进行设置:object.Insufferable=1024;%设置输入缓冲区的大小object.Out put Buffer Size=1024;%设置输出缓冲区的大小object.Timeout=0.5;%设置一次写入或者读入操作完成最大时间为0.5s时间单位为秒。
object.Bytes Available Fcn Mode=‘byte’;%设置读入文件的格式为二进制。
object.BytesAvailableFcn==fcntion_callback;%设置串口执行的回调函数(这个属性比较重要);2、建立好串口的对象后,要使用它需要将串口对象打开。
3、将串口打开之后要想与串口进行通讯,这时候就需要发送握手命令给串口,与串口进行连接。
具体操作:fwrite(object,......);%握手信号根据协议或者其他信息的差异会不同由于我选择读取数据的方式为二进制文件的方式,所以使用f write函数来发送信息。
如果是文本文件时写入串口的函数使用scan 函数来完成。
4、当我们与串口建立联系之后就可以向串口读取信息了。
具体使用的方法:data=fared(object,10);%向串口读取10个数据,这里的数据根据需求可以进行改动5、当我们需要关闭工程或者是停止通讯时,需要将串口关闭或者清除串口对象。
具体的用法是:F close(object);%关闭串口对象delete(object);%删除内存中的串口对象。
(完整版)MATLAB串口通信设计源码

function varargout = PJSerialCOM(varargin)% PJSERIALCOM M-file for PJSerialCOM.fig% PJSERIALCOM, by itself, creates a new PJSERIALCOM or raises the existing% singleton*.%% H = PJSERIALCOM returns the handle to a new PJSERIALCOM or the handle to% the existing singleton*.%% PJSERIALCOM('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in PJSERIALCOM.M with the given input arguments.%% PJSERIALCOM('Property','Value',...) creates a new PJSERIALCOM or raises the% existing singleton*. Starting from the left, property value pairs are % applied to the GUI before PJSerialCOM_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application % stop. All inputs are passed to PJSerialCOM_OpeningFcn via varargin. %% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help PJSerialCOM% Last Modified by GUIDE v2.5 26-May-2012 18:45:14% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @PJSerialCOM_OpeningFcn, ...'gui_OutputFcn', @PJSerialCOM_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before PJSerialCOM is made visible.function PJSerialCOM_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to PJSerialCOM (see VARARGIN)% Choose default command line output for PJSerialCOMhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes PJSerialCOM wait for user response (see UIRESUME)% uiwait(handles.figPJSerialCOM);set(handles.btnClosePort,'Enable','off');set(handles.btnSendData,'Enable','Off');setappdata(handles.figPJSerialCOM,'u','');% --- Outputs from this function are returned to the command line.function varargout = PJSerialCOM_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on selection change in pumComPort.function pumComPort_Callback(hObject, eventdata, handles)% hObject handle to pumComPort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumComPort contents as cell array% contents{get(hObject,'Value')} returns selected item from pumComPort% --- Executes during object creation, after setting all properties. function pumComPort_CreateFcn(hObject, eventdata, handles)% hObject handle to pumComPort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on selection change in pumBaudRate.function pumBaudRate_Callback(hObject, eventdata, handles)% hObject handle to pumBaudRate (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumBaudRate contents as cell array% contents{get(hObject,'Value')} returns selected item from pumBaudRate% --- Executes during object creation, after setting all properties. function pumBaudRate_CreateFcn(hObject, eventdata, handles)% hObject handle to pumBaudRate (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on selection change in pumDataBits.function pumDataBits_Callback(hObject, eventdata, handles)% hObject handle to pumDataBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumDataBits contents as cell array% contents{get(hObject,'Value')} returns selected item from pumDataBits% --- Executes during object creation, after setting all properties. function pumDataBits_CreateFcn(hObject, eventdata, handles)% hObject handle to pumDataBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on selection change in pumStopBits.function pumStopBits_Callback(hObject, eventdata, handles)% hObject handle to pumStopBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumStopBits contents as cell array% contents{get(hObject,'Value')} returns selected item from pumStopBits% --- Executes during object creation, after setting all properties. function pumStopBits_CreateFcn(hObject, eventdata, handles)% hObject handle to pumStopBits (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on selection change in pumParity.function pumParity_Callback(hObject, eventdata, handles)% hObject handle to pumParity (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumParity contents as cell array% contents{get(hObject,'Value')} returns selected item from pumParity % --- Executes during object creation, after setting all properties. function pumParity_CreateFcn(hObject, eventdata, handles)% hObject handle to pumParity (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on selection change in pumFlowControl.function pumFlowControl_Callback(hObject, eventdata, handles)% hObject handle to pumFlowControl (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = get(hObject,'String') returns pumFlowControl contentsas cell array% contents{get(hObject,'Value')} returns selected item from pumFlowControl% --- Executes during object creation, after setting all properties. function pumFlowControl_CreateFcn(hObject, eventdata, handles)% hObject handle to pumFlowControl (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edtRecvData_Callback(hObject, eventdata, handles)% hObject handle to edtRecvData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edtRecvData as text% str2double(get(hObject,'String')) returns contents of edtRecvData as a double% --- Executes during object creation, after setting all properties. function edtRecvData_CreateFcn(hObject, eventdata, handles)% hObject handle to edtRecvData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edtSendData_Callback(hObject, eventdata, handles)% hObject handle to edtSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edtSendData as text% str2double(get(hObject,'String')) returns contents of edtSendData as a double% --- Executes during object creation, after setting all properties. function edtSendData_CreateFcn(hObject, eventdata, handles)% hObject handle to edtSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on button press in btnOpenPort.function btnOpenPort_Callback(hObject, eventdata, handles)% hObject handle to btnOpenPort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)comPort=get(handles.pumComPort,'String');handles.u_sCom=serial(comPort{get(handles.pumComPort,'Value')}); baudRate=get(handles.pumBaudRate,'String');set(handles.u_sCom,'BaudRate',str2double(baudRate{get(handles.pumBaudRa te,'Value')}));dataBits=get(handles.pumDataBits,'String');set(handles.u_sCom,'DataBits',str2double(dataBits{get(handles.pumDataBi ts,'Value')}));stopBits=get(handles.pumStopBits,'String');set(handles.u_sCom,'StopBits',str2double(stopBits{get(handles.pumStopBi ts,'Value')}));parity=get(handles.pumParity,'String');if strcmp(parity,'ÎÞ')==1set(handles.u_sCom,'Parity','none');elseif strcmp(parity,'ÆæУÑé')==1set(handles.u_sCom,'Parity','odd');elseif strcmp(parity,'żУÑé')==1set(handles.u_sCom,'Parity','even');elseset(handles.u_sCom,'Parity','none');endendendflowControl=get(handles.pumFlowControl,'String');if strcmp(flowControl,'ÎÞ')==1set(handles.u_sCom,'FlowControl','none');elseif strcmp(flowControl,'Ó²¼þ')==1set(handles.u_sCom,'FlowControl','hardware');elseif strcmp(flowControl,'Èí¼þ')==1set(handles.u_sCom,'FlowControl','software');elseset(handles.u_sCom,'FlowControl','none');endendendset(handles.u_sCom,'Timeout',1);set(handles.u_sCom,'InputBufferSize',1024);set(handles.u_sCom,'BytesAvailableFcnMode','byte');set(handles.u_sCom,'BytesAvailableFcnCount',1);set(handles.u_sCom,'BytesAvailableFcn',{@BytesAvailableFcnCallback,hand les});fopen(handles.u_sCom);set(handles.txtStatus,'String','´ò¿ª¶Ë¿Ú³É¹¦');set(hObject,'Enable','off');set(handles.btnClosePort,'Enable','On');%handles.u_timer=timer('TimerFcn',{@ReadCom,handles},'Period',1,'Executi onMode','fixedrate');guidata(hObject,handles);set(handles.btnSendData,'Enable','On');% function ReadCom(obj,eventdata,handles)% set(handles.txtStatus,'String','ÕýÔÚ¶ÁÈ¡Êý¾Ý');% readString=fread(handles.u_sCom,10);% set(handles.edtRecvData,'String',readString);% set(handles.txtStatus,'String','½ÓÊÕÊý¾Ý³É¹¦');% --- Executes on button press in btnClosePort.function btnClosePort_Callback(hObject, eventdata, handles)% hObject handle to btnClosePort (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)fclose(handles.u_sCom);% stop(handles.u_timer);% delete(handles.u_timer);handles.u_sCom=0;guidata(hObject,handles);set(handles.txtStatus,'String','¹Ø±Õ¶Ë¿Ú³É¹¦');set(handles.btnOpenPort,'Enable','On');set(handles.btnSendData,'Enable','Off');set(hObject,'Enable','Off');% --- Executes on button press in btnSendData.function btnSendData_Callback(hObject, eventdata, handles)% hObject handle to btnSendData (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) sendString=get(handles.edtSendData,'String');fwrite(handles.u_sCom,sendString);set(handles.txtStatus,'String','·¢ËÍÊý¾Ý³É¹¦');set(handles.edtSendData,'String','');% start(handles.u_timer);function BytesAvailableFcnCallback(t,eventdata,handles)readString=fread(handles.u_sCom,1);u=getappdata(handles.figPJSerialCOM,'u');u=[u readString];setappdata(handles.figPJSerialCOM,'u',u);set(handles.edtRecvData,'String',u);set(handles.txtStatus,'String','½ÓÊÕÊý¾Ý³É¹¦');% --- Executes on button press in btnExitProgram.function btnExitProgram_Callback(hObject, eventdata, handles)% hObject handle to btnExitProgram (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close(handles.figPJSerialCOM);。
MATLAB串口操作官方教程

号发生器等等。
此部分有电子或计算机lab/matlab_external/overview-of-the-serial-port.html
• 如果您已经具备 MATLAB 串口基本开发能力,建议从“Events and Callbacks 事件和回 调用”开始阅读。
• 您可以点击“on this page…本节包含的内容”框内的链接访问对应的英文原文。
1
Serial Port Devices
MATLAB
目录:教程和实例
Examples and How To
The pins and signals associated with the 9-pin connector are described in the following table. Refer to the RS-232 standard for a description of the signals and pin assignments used for a 25-pin connector.
1.介绍
对于许多串口通信的应用来讲,你不需要知道串口具体的工作机制,就可以和目标设备进行
通信。如果你对上述条目已经很熟悉,你不需要再阅读本章节,你可以直接阅读 ”Getting
Started with Serial I/O 开始串口工作”章节。
2 什么是串口通信
串口通信是适用于一个或多个设备之间的,底层通信协议。通常一个设备是一个计算机,其
4
Serial Port Devices
MATLAB
R2012b
串口总览
Overview of the Serial Port
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.MATLAB串口通信技术
对于WINDOWS系统而言,硬件系统的驱动程序有着十分严格的规范,可以用C或汇编语言进行开发,而MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力。
即使安装了驱动程序并能正常工作的硬件设备,MATLAB也没有统一的形式对其进行访问。
对于系统的串口,在MATLAB6.X中以类(SERIAL)的形式提供了支持。
当用指令建立了一个串口对象(句柄)以后,对串口的硬件操作可以文件操作的软件形式来完成,方法比较简单。
常用的串口操作命令及其含义如下表(1)所示,这些命令既可在MATLAB命令窗口实现,也可以M文件的形式出现,使用起来十分方便。
表1MATLAB串口操作命令表
二.数据采集系统与PC机通信的硬件电路
为了简化系统的硬件设计,数据采集系统的微转换器选用AD公司的全集成芯片ADu C812,该芯片包含有12位高性能的自校准8通道ADC,两个12位的DAC,与8051兼容的内核使用户无须学习新的指令系统。
片内8K闪速/电摖除程序存储器使数据采集系统具有在线下载编程能力,利用AD公司提供的免费SERIAL WINDOW DOWNLOAD就可以将H EX文件下载到ADuC812内,对于不同的应用场所可以方便的修改系统的参数,既不需要昂贵的编程器,也不需打开机壳插拨芯片,只需将一条电缆连接到计算机的COM1或COM 2即可。
另外该转换器还支持看门狗定时器、电源监视器及ADC的DMA等功能,可编程的I/O口具有三种类型的串口UART、SPI、I2C,价格也比较便宜,是一种理想的转换器。
系统的硬件组成如下图(1)所示。
图1ADUC812与PC机串口通信的硬件电路图
其中ADM202及P3.0\P3.1构成了与计算机通信的RS232接口,它有两个功能,一是实现计算机与数据采集系统的数据通信。
另一功能是与JP1配合使用,完成将程序从计算机下载到ADuC812片内的闪速/电摖除程序存储器中。
当下载程序时,需将单片机系统的电源关掉,用屏蔽帽屏蔽JP1,单片机系统再上电,ADuC812进入程序下载状态,运行SERIAL W INDOW DOWNLOAD可以将HEX文件下载到芯片内。
ADM812组成了系统的复位电路。
三.应用程序的软件流程图
PC机与单片机的串口通信技术可以说已经比较成熟,但在工程实际中应用较多的是V C、VB通信控件,一般人员开发具有一定的困难。
本文的PC机应用程序是运用MATLAB 的类(SERIAL)和M语言开发,辅以MATLAB的GUIDE工具箱,程序开发相对简单。
单片机的程序应用MCS—51汇编,只需在程序的第一行加$MOD812标识符即可。
整个传输过程是:由单片机发送握手信号,PC机接到握手信号后发应答信号,并准备接收信号,单片机接收到应答信号后准备发送数据,并说明通信过程挂钩成功,总的测量次数和键值作为第0组发送,发送完毕累加校验和,发现传输错误时重发,程序的流程图如图2所示
图2单片机与微机的通信流程图
MATLAB的SERIAL类核心是用JAVA语言编写的,与VC等高级语言相比存在许多不足,如不能以中断的方式访问该串口类,但是对一般的应用要求该类还是可以满足要求的,同时由于该类的使用方法极其简单,故而也有一定的实用性。