Matlab串口函数
在MATLAB中使用串口

在MATLAB中使用串口首先,你需要了解有关串口的一些基本概念,例如波特率和数据位。
然后你需要确保你的计算机上有一个可用的串口。
接下来,你需要打开串口连接。
使用`serial`函数创建一个串口对象,如下所示:```matlabs = serial('COM1', 'BaudRate', 9600);```此代码将创建一个串口对象`s`,并指定使用COM1串口号,波特率为9600。
使用`fopen`函数打开串口连接:```matlabfopen(s);```现在你已经打开了一个串口连接。
接下来,你可以发送和接收数据。
使用`fwrite`函数向串口发送数据,例如:```matlabdata = 'Hello';fwrite(s, data);```此代码将向串口s发送字符串"Hello"。
使用`fread`函数从串口接收数据,例如:```matlabreceived = fread(s);```此代码将从串口s接收数据,并将其存储在变量`received`中。
最后,当你完成使用串口时,使用`fclose`函数关闭串口连接:```matlabfclose(s);```这是一个最简单的串口通信的示例。
当然,你还可以进行更多的配置,例如设置校验位或停止位等。
例如,如果你需要设置串口的数据位为8、停止位为1和没有校验位,可以使用以下代码:```matlabs = serial('COM1', 'BaudRate', 9600, 'DataBits', 8,'StopBits', 1, 'Parity', 'none');```。
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之串口通信

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与51单片机通信

桂电二院科协出品,版权所有,转载不究。
maswell_xiao@
程序的最后用 dat = fread(s)读取单片机给 MATLAB 发送的数据,显然 dat 的数据对应的 ASCALL 码正好是单片机程序里对应的‘has been received’
桂电二院科协出品,版权所有,转载不究。
以上三种格式等价,都可以设置串口 1 的波特率为 4800。
2. fopen 函数,打开串口对象,格式为
fileID = fopen(filename) fileID = fopen(filename, permission) fileID = fopen(filename, permission, machineformat) fileID = fopen(filename, permission, machineformat, encoding) [fileID, message] = fopen(filename, ...) fIDs = fopen('all') [filename, permission, machineformat, encoding] = fopen(fileID)
当使用 serial 函数创建一个串口对象而不用时要用该函数删除对象 s。这个与 fclose 不 同的是,fclose 仅仅是关闭串口对象暂时不用,delete 函数是直接删除,若使用 delete 函数删除对象还想再用时就要用 serial 函数重新创建串口对象用 fopen 打开对象。而 fclose 不用再创建对象。当使用 MATLAB 占用串口时,其他软件不能使用该串口,如串 口小助手。
在串口中可以这样用 clear(s)。clear 函数从工作空间删除变量,并释放系统内存。
LabWindowsCVI串口通信函数

LabWindows/CVI串口通信函数LabWindows/CVI提供的RS-232函数库主要包括以下几类函数:串行口打开/关闭 (Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control)函数,串行口状态查询(Status)函数和串行口事件处理(Callbacks)函数。
下面分别予以介绍。
1.串行口打开/关闭函数1)OpenCom函数功能:表示以默认的参数设置方式打开一个串口。
该函数原型为:int OpenCom (int COM_Port,char Device_Name[ ] )其中,参数COM_Port为整型变量,用于指定串口号,有效范围为1~1000;Device_Name[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
2)OpenComConfig函数功能:用来打开一个串行口并进行相关的参数设置。
该函数原型为:int OpenComConfig(int COM_Port,char Device_Name[],long Baud_Rate,int Parity,int Data_Bits,int Stop_Bits,int Input_Queue_Size,int Output_Queue_Size)其中,参数COM_Port为整型变量,用于指定串口号,有效范围为1~1000;Device_Name[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
例如,以“COM1”来代替端口1,如果输入值为NULL或一个空字符串,则以COM_Port号作为指定端口号。
Baud_Rate为长整型变量,用来设置串行口的传输速率,标准的传输速率有110、300、600、1200、2400、4800、9600、19200b/s等;默认值为9600。
Parity为整型变量,用来指定奇偶校验模式。
0表示无奇偶校验,1表示奇校验,2表示偶校验;Data_Bits为整型变量,用来指定每帧信息中数据位的个数,可选5、6、7、8;Stop_Bits为整型变量,用来指定每帧信息中停止位的个数,可选1、1.5或2;Input_Queue_Size为整型变量,用来指定串行口输入队列的大小;Output_Queue_Size为整型变量,用来指定串行口输出队列的大小。
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串口

PC机接收单片机传来数据:
2
scom=serial('COM1'); %串口com1
scom.BaudRate = 9600; %波特率
scom.InputBufferSize = 1024; %输入缓冲区
scom.OutputBufferSize = 1024; %输出缓冲区
scom.BytesAvailableFcn = @instrcallback; %调用回调函数
当缓冲区中的数据达到100 bytes时调用instrcallback回调函数。instrcallback.m在MATLAB7\toolbox\matlab\iofun\@instrument目录下面,尽量不要改动原来的内容,在末尾添加当缓冲区有指定量的数据时需要MATLAB做的工作,比如绘图,数据保存之类的。
比如我要通信串口的波特率为4800:
s=serial('com1');
fopen(s)
s.baudrate=4800;
fwrite(s,[48 59]); %向com1口发送两个数据48和59
fread(s,4); %从串行口读入四个数据
4
val = [170 180 val 85];
scom.ReadAsyncMode = 'continuous'; %异步通信时,连续读串口数据
使用MATLAB进行串口调试的两种方法

使用MATLAB进行串口调试的两种方法方法1:在command window界面下输入tmtool,打开Test & Measurement Tool窗口,在Hardware→Serial下面找到已连接的串口设备(单片机开发板通过USB转串口,对应COM2),在communicate选项卡中对串口进行设置即可。
需要注意的是,程序功能是上位机发送16bit字符串,单片机通过串口接收并回显给上位机,这16bit的字符串是不包含字符串结束标志\n的,因此在sending data下面的data format下拉菜单中,要选择%s而不是%s\n。
为了使接收字符串的时间变短,可以在configure选项卡中将timeout选项设置为1.0。
方法2:直接在command window环境下用matlab提供的函数对串口进行操作,仍然以COM2为例。
在command window环境下依次输入以下代码:
s=serial('COM2') %将串口2赋给s
s.status %查看串口2的状态
fopen(s) %打开串口2
s.status
fprintf(s,'987654321abcdef') %给串口2的发送缓存写入数据987654321abcdef fscanf(s) %从串口2的接收缓存读数据
fclose(s) %关闭串口2
s.status
delete(s)
clear s
每一个语句的执行情况如下图所示:
其中需要注意的是fprintf()函数默认采用%s\n格式,因此在这里只能输入15个字符,系统会在15bit字符串的末尾自动添加字符串结束标志\n,该标志不能在数码管上显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% % H = SERIAL1 returns the handle to a new SERIAL1 or the handle to % the existing singleton*. % % SERIAL1('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in SERIAL1.M with the given input arguments. % % SERIAL1('Property','Value',...) creates a new SERIAL1 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before serial1_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to serial1_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
% --- Executes just before serial1 is made visible. function serial1_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 serial1 (see VARARGIN) global s; handles.mycom = s; % Choose default command line output for serial1 handles.output = hObject;
fopen(obj1); %打开串口 fopen(obj2); k=1; datas=zeros([1,100]); while(k<101)
if obj1.BytesAvailable datas(1,k)=fread(obj1,1);
end k=k+1; plot(datas); %向测试串口中写一个数据数据 在 COM3 中就可以接受到该数据 fwrite(obj2,round(255*rand(1))); pause(1); end fclose(obj1);
功能描述: 1.选择串口,点击 START,即等待串口发送数据,数据缓存 4000bytes。接收缓存区满后绘 图,同时显示最大电压值和波形功率值。 2.File 菜单下有 Import Data 和 Export Data 功能,可将电压数据保存到 txt 文件中,同时可 读取 txt 中的数据并显示相关波形。 3.Image 菜单下有 Open Image 和 Save Image 功能,可将波形保存成图片格式,同时可打开 图片显示在绘图窗口。 Matlab 源代码: function varargout = serial1(varargin) % SERIAL1 M-file for serial1.fig % SERIAL1, by itself, creates a new SERIAL1 or raises the existing % singleton*.
fopen 打开串口对象,格式:fope n( s)
fread 读取串口数据,格式: fread(s)
fclose 关闭串口对象,格式:fclose(s)
free 解除 Matlab 对串口对象进行读写操作
delete 删除对象 s,格式:delete( s)
机。 Matlab 支持面向对象技术,用一个对象将计算机串口封装起来,只要创建串口对象,对串 口对象操作就是对串口操作,非常方便。使用 serial 函数就可创建串口对象,串口对象有很 多属性[4],通过定义串口对象的属性,能定义串口的通信模式,从串口对象属性也能了解 串口的状态。要想通过串口传输数据,必须先用 fopen 函数打开串口;数据传输结束后要用 fclose。函数关闭串口。表 1 列出了常用的与串口操作有关的函数。
% Update handles structure guidata(hObject, handles);
% UIWAIT makes serial1 wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = serial1_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)
clear 从工作空间中删除对象 s,格式:clear(s)
___________________________________________________
当建立了一个串口对象后,可以利用 Matlab 对其参数进行设置,包括对波特率、同步或异 步读取方式、读取或写数据的等待时间等。本文以波特率的设置为例来说明串口参数的设置 方法。 波特率的设置,一般有两种方法:(1)在创建串口对象时设定波特率:s= serial(`coml' ,'baudrate','9600'); (2)用 set 命令:set(s,'baudrate','9600')。
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else gui_mainfcn(gui_State, varargin{:});
end % End initialization code - DO NOT EDIT %global s selected_com selected_baud selected_databits selected_stopbits selected_parity selected_flowctrl
表 1 Matlab 串口函数介绍
_____________________________________________________
函数
说明
_____________________________________________________
serial 创建一个串口对象,格式:s = serial('coml' )
matlab 串口编程 2009 年 06 月 10 日 星期三 下午 11:43
function serialdwj %本程序使用的是虚拟串口软件 VSPD 虚拟的 COM2 和 COM3 来测试的 %使用 COM1 也可以使用 已经经过测试了 %如果要使用 请使用 COM1 口 就可以与下位机通信了 obj1=instrfind('Type','serial','Port','COM3','Tag',''); %COM2 为测试串口 obj2=instrfind('Type','serial','Port','COM2','Tag',''); if isempty(obj1)
delete(obj1); %删除测试串口 fclose(obj2); delete(obj2); end
%现在使用的 m 文件来显示的 %到后来有机会就使用 gui 界面来显示
MATLAB 接收串口数据 GUI 界面 2009-09-19 12:42 工作流程:AD7818 采样模拟信号,12bits 输出,串口将数据发送给 PC。串口发送波特率 57600Bd,数据位 8 位,停止位一位。每个数据分两次发送,高四位补零。设计 GUI 界面接 收串口数据并显示波形。 GUI 界面如下:
Matlab 串口函数 2009-09-25 21:22 Matlab 是数学计算的强大工具,它以矩阵作为数据操作的基本单位,广泛应用在以矩阵运 算为主要工作方式的数理统计、自动控制、数字信号处理、动态系统仿真等领域。Matlab 便捷灵活、操作简单、处理功能强大,因而利用 Matlab 对采 集到的 ABS 试验数据进行分析处理是非常合适的,关键问题是如何将数据从 ECU 传到计算