matlab串口编程

合集下载

使用MATLAB进行串口调试的两种方法

使用MATLAB进行串口调试的两种方法

使用MATLAB进行串口调试的两种方法在MATLAB中进行串口调试有多种方法,可以使用MATLAB自带的Instrument Control Toolbox,或使用第三方函数库进行串口通信。

1. 使用MATLAB自带的Instrument Control Toolbox进行串口调试Instrument Control Toolbox是MATLAB中用于连接和控制仪器的工具箱。

它提供了一组函数,可以通过串口与仪器进行通信。

第一步是创建串口对象。

使用MATLAB的serial函数可以创建一个串口对象,并设置串口的参数。

例如,以下代码创建一个串口对象并设置波特率为9600,数据位为8位,停止位为1位,校验位为无:```matlabs = serial('COM1');set(s, 'BaudRate', 9600);set(s, 'DataBits', 8);set(s, 'StopBits', 1);set(s, 'Parity', 'none');```第二步是打开串口。

使用MATLAB的fopen函数可以打开串口并进行通信:```matlabfopen(s);```第三步是发送和接收数据。

可以使用MATLAB的fwrite函数向串口发送数据,使用fread函数从串口接收数据。

以下代码发送一个字节的数据,并接收一个字节的数据:```matlabfwrite(s, uint8('A'));receivedData = fread(s, 1);```最后一步是关闭串口。

使用MATLAB的fclose函数可以关闭已经打开的串口:```matlabfclose(s);```2.使用第三方函数库进行串口通信```matlabimport java.io.*;import ng.*;import gnu.io.*;```创建和配置串口对象的步骤与使用Instrument Control Toolbox类似:```matlabport = 'COM1';baudRate = 9600;dataBits = 8;stopBits = 1;parity = 'none';s = serial(port, baudRate, dataBits, stopBits, parity);```打开串口和发送/接收数据的步骤也与使用Instrument Control Toolbox类似:```matlabfopen(s);fwrite(s, uint8('A'));receivedData = fread(s, 1);```关闭串口的步骤也是一样的:```matlabfclose(s);```这些是使用MATLAB进行串口调试的两种常见方法。

matlab中的串口通信通信系统设计

matlab中的串口通信通信系统设计

文章标题:探索Matlab中的串口通信系统设计在当前的现代通信系统中,串口通信系统设计已经成为一项至关重要的任务。

在Matlab中,借助各种工具和函数,我们可以设计出高效、稳定和灵活的串口通信系统。

本文将从简单到复杂、由浅入深地探讨Matlab中的串口通信系统设计,为读者提供全面的了解和深入的思考。

1. 串口通信系统概述在进行Matlab中的串口通信系统设计之前,我们首先需要了解串口通信系统的基本概念和原理。

串口通信是通过串行接口进行数据传输的一种通信方式,它在各种领域中都有着广泛的应用,包括嵌入式系统、通信设备、工业控制等。

Matlab作为强大的工程计算软件,为我们提供了丰富的工具和函数来进行串口通信系统设计,包括串口对象、串口配置、数据读写等功能。

2. Matlab中的串口通信基本操作在Matlab中,我们可以通过串口对象来进行串口通信的基本操作。

我们需要创建一个串口对象,并进行相应的配置,包括波特率、数据位、停止位、校验位等参数。

我们可以使用该串口对象来进行数据的读写操作,可以发送数据到外部设备,也可以接收来自外部设备的数据。

通过Matlab中丰富的串口函数,我们可以轻松实现串口通信系统的基本功能。

3. Matlab中的串口通信系统设计在实际的工程应用中,我们通常需要设计更加复杂和灵活的串口通信系统。

在Matlab中,我们可以借助信号处理工具箱、通信工具箱等功能来进行串口通信系统的设计。

通过信号处理工具箱,我们可以实现对串口数据的解调、调制、滤波等操作,从而提高通信系统的稳定性和性能。

而通信工具箱中的各种算法和工具则可以帮助我们实现更加复杂的通信协议和数据处理。

4. 个人观点和总结在我看来,Matlab是一款非常适合进行串口通信系统设计的软件,它不仅提供了丰富的工具和函数,还具备强大的计算能力和灵活的编程环境。

通过Matlab,我们可以实现从简单到复杂的串口通信系统设计,为各种应用场景提供定制化的解决方案。

MATLAB串口操作教程

MATLAB串口操作教程

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.
Signal States Signals can be in either an active state or an inactive state. An active state corresponds to the binary value 1, while an inactive state corresponds to the binary value 0. An active signal state is often
Serial Port Pin and Signal Assignments
Pin
Label
Signal Name
1
CD
Carrier Detect
Signal Type Control
2
RD
Received Data
Data
3
TD
Transmitted Data
Data
4
DTR
Data Terminal Ready
gets?name??port??type?ans?serialcom1??com1??serial?创建对象的同时配置对象的属性你可以在创建对象的时候配置对象的属性serial将会接受你的属性名称和属性值就像你在设置函数里面配置属性一样例如你可以分配属性名和属性值

【STM32H7的DSP教程】第9章Matlab的串口通信实现

【STM32H7的DSP教程】第9章Matlab的串口通信实现

【STM32H7的DSP教程】第9章Matlab的串⼝通信实现第9章 Matlab的串⼝通信实现本章节主要为⼤家讲解Matlab的串⼝⽅式波形数据传输和后期数据分析功能,⾮常实⽤。

9.1 初学者重要提⽰9.2 程序设计框架9.3 下位机STM32H7程序设计9.4 上位机Matlab程序设计9.5 Matlab上位机程序运⾏9.6 实验例程说明(MDK)9.7 实验例程说明(IAR)9.8 总结9.1 初学者重要提⽰1、测试本章节例程注意事项。

请优先运⾏开发板,然后运⾏matlab。

调试matlab串⼝数据发送前,请务必关闭串⼝助⼿。

2、函数delete(instrfindall);如果不⽤matlab了,请在matlab的命令输⼊窗⼝调⽤此函数,防⽌matlab⼀直占⽤串⼝。

9.2 程序设计框架上位机和下位机的程序设计框架如下:上位机和下位机做了⼀个简单的同步,保证数据通信不出错。

9.3 下位机STM32H7程序设计STM32H7端的程序设计思路。

9.3.1 第1步,发送的数据格式为了⽅便数据发送,专门设计了⼀个数据格式:__packed typedef struct{uint16_t data1;uint16_t data2;uint16_t data3;uint8_t data4;uint8_t data5;uint8_t data6;uint8_t data7;}SENDPARAM_T;SENDPARAM_T g_SendData;9.3.2 第2步,接收同步信号$Matlab发送同步信号$(ASCII编码值是13)给开发板。

int main(void)/* 省略未写,仅留下关键代码 *//* 进⼊主程序循环体 */while (1){/* 判断定时器超时时间 */if (bsp_CheckTimer(0)){/* 每隔100ms 进来⼀次 */bsp_LedToggle(2);}if (comGetChar(COM1, &read)){/* 接收到同步帧'$'*/if(read == 13){bsp_LedToggle(4);bsp_DelayMS(10);Serial_sendDataMATLAB();}}}}通过函数comGetChar获取串⼝接收到的数据,如果数值是13,说明接收到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进行串口通信的编程。

我们需要了解一些基本概念。

串口通信是通过计算机的串行接口与外部设备进行数据传输的一种方式。

在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串口编程

matlab串口编程

在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。

调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。

由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。

之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。

前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。

检索对自己有用的信息也是一种能力。

在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。

1,simulink工具箱仿真2,Instrument control toolbox3,使用MATLAB变成语言,编写自己的程序控制在Instrument control toolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。

在工具箱中,可以将你进行的操作实时的转换成m 文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。

simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。

Matlab中的串口通信与硬件控制

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进行串口调试的两种方法方法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,该标志不能在数码管上显示。

matlab gui串口数据例程

matlab gui串口数据例程

matlab gui串口数据例程在MATLAB中创建一个GUI来读取串口数据是一个常见的任务。

首先,你需要确保已经安装了MATLAB的Instrument Control Toolbox,这样才能够进行串口通讯。

接下来,我将为你提供一个简单的例程,来演示如何在MATLAB中创建一个GUI来读取串口数据。

首先,你需要创建一个GUI,你可以使用MATLAB自带的GUIDE 工具来创建。

在GUI上放置一个按钮用于打开串口,一个按钮用于关闭串口,一个文本框用于显示读取的数据,以及其他你需要的控件。

接下来,你需要编写一些代码来实现串口的打开、关闭和读取数据的功能。

下面是一个简单的例程,假设你的串口对象是serialPort:matlab.% 创建串口对象。

serialPort = serial('COM1'); % 假设你的串口是COM1。

% 设置串口参数。

set(serialPort, 'BaudRate', 9600); % 设置波特率为9600。

% 创建GUI.f = figure;openButton = uicontrol('Style', 'pushbutton', 'String', '打开串口', 'Callback', {@openSerial, serialPort});closeButton = uicontrol('Style', 'pushbutton', 'String', '关闭串口', 'Callback', {@closeSerial, serialPort});textBox = uicontrol('Style', 'edit', 'String', '','Position', [10 10 200 20]);% 打开串口的回调函数。

MATLAB串行通信的实现方法

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串口通信设计源码

(完整版)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函数编程步骤串口编程的一般步骤及相关函数讲解

matlab函数编程步骤串口编程的一般步骤及相关函数讲解

matlab函数编程步骤串⼝编程的⼀般步骤及相关函数讲解matlab函数编程步骤串⼝编程的⼀般步骤及相关函数讲解⽤Windows API进⾏串⼝编程的⼀般步骤及相关函数讲解------分隔线---------------------------- 虽然使⽤诸如CSerialPort VC串⼝类,MSComm VC 串⼝控件等⾮常⽅便,但有时这些控件并不适合⾃⼰的特殊需求,所以有必要了解⼀下基于Windows API的串⼝编程⽅法,下⾯介绍⼀下API串⼝编程的⼀般步骤及相关串⼝API函数。

串⼝操作⼀般有四步,分别是:1) 打开串⼝2) 配置串⼝3) 读写串⼝4) 关闭串⼝1、打开串⼝在《VC 打开串⼝》⼀⽂中我们已经单独介绍过如果利⽤API打开串⼝的⽅法,打开串⼝是⽤API函数CreateFile来打开或创建的。

该函数的原型为:1HANDLE CreateFile( LPCTSTR lpFileName, 2 DWORD dwDesiredAccess, 3 DWORD dwShareMode, 4 LPSECURITY_ATTRIBUTES lpSecurityAttributes, 5 DWORD dwCreationDistribution,6DWORD dwFlagsAndAttributes, 7HANDLE hT emplateFile); 参数详解:lpFileName:将要打开的串⼝逻辑名,如“COM1”;dwDesiredAccess:指定串⼝访问的类型,可以是读取、写⼊或⼆者并列;dwShareMode:指定共享属性,由于串⼝不能共享,该参数必须置为0;lpSecurityAttributes:引⽤安全性属性结构,缺省值为NULL;dwCreationDistribution:创建标志,对串⼝操作该参数必须置为OPEN_EXISTING;dwFlagsAndAttributes:属性描述,⽤于指定该串⼝是否进⾏异步操作,该值为FILE_FLAG_OVERLAPPED,表⽰使⽤异步的I/O;该值为0,表⽰同步I/O操作;hT emplateFile:对串⼝⽽⾔该参数必须置为NULL;串⼝的操作可以有两种操作⽅式:同步操作⽅式和重叠操作⽅式(也称为异步操作⽅式)。

基于Matlab-GUI的串口通信编程实现

基于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串口通信

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串口读取函数
在MATLAB中,读取串口数据可以使用`serial`对象和`read`函数。

以下是一个简单的示例,展示如何创建一个串口连接,并从串口读取数据:
1. 首先,确保您已经安装了MATLAB的串口工具箱。

如果没有,您可以使用以下命令安装:
```matlab
install_toolbox(' CommunicationsToolbox', 'SerialPort')
```
2. 创建一个串口连接。

这里,我们设定串口地址为COM1,波特率为9600,数据位为8,停止位为1,奇偶校验位为无:
```matlab
serialPort = serial('COM1', '9600', 8, 'ones', 'No');
```
3. 打开串口:
```matlab
serialPort.Open();
```
4. 从串口读取数据。

假设我们要读取10个字节:
```matlab
data = serialPort.Read(10);
```
5. 关闭串口:
```matlab
serialPort.Close();
```
6. 显示读取到的数据:
```matlab
disp(data);
```
以上就是一个简单的MATLAB读取串口数据的示例。

根据实际需求,您可能需要根据实际情况调整串口参数和读取数据的大小。

在实际应用中,还可能需要处理错误和异常情况。

MATLAB串口操作和GUI编程

MATLAB串口操作和GUI编程

MATLAB串⼝操作和GUI编程程序说明MATLAB串⼝操作和GUI编程V1.0 2015/2/08概述本⽂介绍了程序的编程思路和功能。

该程序设计到MATLAB的图像⽤户界⾯编程的基本⽅法和串⼝的基本操作。

程序⽬的在于通过串⼝写控制字对AD9512进⾏配置(AD9512通过SPI写⼊寄存器,本程序只是整个控制程序中的⼀部分)。

修订历史以下表格展⽰了本⽂档的修订过程⽇期版本号修订内容2015/01/15V0.0初始版本,试验版[1]2015/02/06V1.0修正问题,通过验证[2][1]. 试验版本表明该版本应⽤笔记及对应代码没有通过实际验证,同时仿真分析也可能没有进⾏。

试验版对应的版本号为V0.X。

[2]. 写⼊操作时将 'async' 去掉,基本通过验证,同时由于RS232写⼊是LSB的顺序,和FPGA端代码不匹配,因此此处更改了serialwrite程序。

简介本程序基于MATLAB 2014a 编写,本⽂档中提到的"MATLAB"均指该特定版本MATLAB。

本程序想要实现的功能是:上位机控制AD9512,当然AD9512是和FPGA相连的,⽽FPGA通过串⼝和上位机连接。

AD9512的控制⽅法参见其DataSheet,通过SPI配置。

从原理上来说,SPI和UART都是全双⼯的,但是读取过程中也需要写⼊控制头,此处采⽤的是半双⼯⽅式。

本程序的思路在于将FPGA看作是⼀个UART转SPI的器件,直接通过上位机配置AD9512。

FPGA端的处理暂时不考虑,本MATLAB程序按照需要写⼊的控制字⽣成传输程序。

以下是本程序涉及到的相关背景知识。

串⾏通信和RS232略。

(可参考MATLAB帮助 - Data File Management – Serial Port Devices或相关⽂献)MATLAB的串⼝操作串⼝操作和实际上很简单,⼤部分从MATLAB的帮助中就可以找到。

在MATLAB中使用串口

在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串口编程
scom = serial(com_n);
set(scom,'BaudRate',baud_rate,'Parity',parity,'DataBits',...
data_bits,'StopBits',stop_bits,'BytesAvailableFcnCount',10,...
case 3
parity = 'even';
end
data_bits = 9 - get(handles.data_bits,'value');
stop_bits = get(handles.stop_bits,'value');
set(handles.r,'Enable','Off');
set(handles.f,'Enable','Off');
set(handles.t,'Enable','Off');
set(handles.g,'Enable','Off');
set(handles.y,'Enable','Off');
set(hObject,'Value',0);
return;
end
set(handles.light,'BackgroundColor','Red');
set(handles.all_servos,'String','');
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。

调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。

由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。

之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。

前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。

检索对自己有用的信息也是一种能力。

在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。

1,simulink工具箱仿真
2,Instrument control toolbox
3,使用MATLAB变成语言,编写自己的程序控制
在Instrument control toolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。

在工具箱中,可以将你进行的操作实时的转换成m 文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。

simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。

(可能说的太主观,至少我是这样)没什么比编写自己的程序更加能了解自己控制的设备了,其上的两种方式都是在这个方式的基础上实现的,最终控制原理都是一样的,都是通过MATLAB提供的一系列API函数对串口进行操作。

1和2我都尝试过,但是最后还是觉得之间编程比较清晰,当然这只是一个过程,不同的情况使用不同的工具才是正确的。

以上纯属个人观点和理解,仅供参考,有什么好的想法还请不吝赐教,大家一起学习。

下面是我对MATLAB环境下对串口操作的一些理解和操作。

在MATLAB中,串口被抽象成一个结构体,所有的操作均同归相关函数对结构体操作完成,通过serial函数新建一个串口对象,该函数至少需要一个参数,即串口号,其他的可选参数为设置该串口相关参数,可以在新建对象的时候指定也可以在以后用set函数设置。

相对而言,get函数可以得到串口对象的相关参数值或者状态。

一般操作串口步骤为:(保护现场)-》新建串口对象-》设置相关参数-》读写操作-》断开连接,清理现场-》(恢复现场)
新建串口对象:serial函数,以提供各种参数新建串口对象
设置参数:可以在serial函数中指定参数,也可以用set函数改变和设置特定参数。

读写操作:和C语言中文件读写操作很想,以object对象文件描述符进行操作。

主要操作函数为:
fprintf,写函数,以字符方式写
fwrite,写函数,以二进制方式写
fscanf,读函数,以字符方式读,以Terminator为结束符,带有超时返回功能fread,读函数,以而进制方式读,读指定字符数
fgets,读函数,以字符方式读,包括Terminator
fgetl,读函数,以字符方式读,忽略Terminator
辅助操作。

在串口中有四个变量:
InputBufferSize,OutputBufferSize,ValuesSent,ValuesReceived,字面意思很好理解,在MATLAB中,输入输出都是有相应缓冲区的,防止数据丢失,也给数据流提供更灵活的控制。

可是设置适当的缓冲区长度和检测接受或者发送的字符个数来进行相关操作,在我的试验中,需要做FFT,做FFT需要一定的点数,我是检测ValuesReceived的值,到指定的个数时一次性读到程序中处理。

以上函数具体细节参考help文档,注意字符个数和Terminator 字符!
断开连接:
fclose(s) 关闭连接
delete(s) 删除对象
clear s 清除
调试,当然一切事情都不会那么一帆风顺,难免出现状况,这是可以使用一些简单的操作进行调试检查,MATLAB有自己的M文件调试方式,查看串口对象变量disp等函数查看变量是否对,或者最简单的在command窗口键入对象名即可以输出对象所有参数,串口对象是否新建成功,是否重复冲突 Instrument control toolbox也可以使用。

在实验中,使用虚拟串口软件虚拟两个串口内部相连,进行纯软件调试,下面是我制作简单界面的程序,第一次用MATLAB GUI设计。

相关文档
最新文档