精华内容
下载资源
问答
  • Matlab串口函数

    2013-06-08 20:53:02
    Matlab串口函数函数 说明 _____________________________________________________ serial 创建一个串口对象,格式:s = serial('coml' ) fopen 打开串口对象,格式:fope n( s) fread 读取串口数据,格式: fread(s) ...
  • Matlab串口函数[借鉴].pdf
  • Matlab自带的函数Ports=instrhwinfo('serial')可以获取当前的串口,但是返回值是一个十分复杂的元胞数组,无法直接使用,不利于下边的编程操作。因此自己写了一个寻找当前串口函数,且可以把串口名称直接输出,...
  • matlab串口调试,回调函数

    千次阅读 2020-06-27 11:18:32
    回调函数的设置需要先fopen串口。 但是串口的有些参数,比如说串口读取的字节数,读取模式是byte还是终止符,需要在fopen之前设置。 回调函数的设置有不同的方法,根据参数个数不同,设置方式不同。 ...

    经验:

    1. 回调函数的设置需要先fopen串口。
    2. 但是串口的有些参数,比如说串口读取的字节数,读取模式是byte还是终止符,需要在fopen之前设置。
    3. 回调函数的设置有不同的方法,根据参数个数不同,设置方式不同。
    展开全文
  • MATLAB串口发送数据

    2021-01-12 19:05:12
    可以实时串口发送数据
  • matlab串口收发及回调函数编程

    热门讨论 2011-08-20 16:38:27
    matlab创建com对象。并采用中断方式响应回调函数,功能完整,包括创建初始化及关闭销毁。回调函数的格式,实现方法。
  • MATLAB串口操作

    2021-07-24 17:51:09
    建立串口对象–使用serial创建函数对一个特定的串口创建对象(可能要配置一些属性,如波特率、数据位数等) 对设备进行连接–使用fopen函数来实现串口对象与设备的连接。 配置属性–使用set或者 . 符号来建立想要的...

    本篇文章主要介绍MATLAB对串口的操作

    串口操作的整个流程:

    1. 建立串口对象–使用serial创建函数对一个特定的串口创建对象(可能要配置一些属性,如波特率、数据位数等)
    2. 对设备进行连接–使用fopen函数来实现串口对象与设备的连接。
    3. 配置属性–使用set或者 . 符号来建立想要的串口对象的行为属性值,可以再创建对象时或者是建立对象以后都可以堆属性进行配置
    4. 发送和接收数据–发送数据是通过函数fprintf和fwrite来实现的,接收数据是通过fgetl,fgets,fread,fscanf和readasync来实现的,串口对象此时的行为都是基于前面的属性配置的
    5. 断开连接和清空—使用fclose使串口断开连接,清空内存用delete函数,从MATLAB工作区删除,使用clear命令

    配置和返回属性值

    通过set函数和 . 符号来对属性值进行配置,使用get函数来获得属性值
    首先通过

    s=serial(‘端口号’)              例如:s=serial('COM1')
    

    来创建一个串口对象

    返回属性的值

    通过get(s)来获取当前对象的串口属性值

    get(s)
        ByteOrder = littleEndian
        BytesAvailable = 0
        BytesAvailableFcn = 
        BytesAvailableFcnCount = 48
        BytesAvailableFcnMode = terminator
        BytesToOutput = 0
        ErrorFcn = 
        InputBufferSize = 512
        Name = Serial-COM1
        ObjectVisibility = on
        OutputBufferSize = 512
        OutputEmptyFcn = 
        RecordDetail = compact
        RecordMode = overwrite
        RecordName = record.txt
        RecordStatus = off
        Status = closed
        Tag = 
        Timeout = 10
        TimerFcn = 
        TimerPeriod = 1
        TransferStatus = idle
        Type = serial
        UserData = []
        ValuesReceived = 0
        ValuesSent = 0
    
        SERIAL specific properties:
        BaudRate = 9600
        BreakInterruptFcn = 
        DataBits = 8
        DataTerminalReady = on
        FlowControl = none
        Parity = none
        PinStatus = [1x1 struct]
        PinStatusFcn = 
        Port = COM1
        ReadAsyncMode = continuous
        RequestToSend = on
        StopBits = 1
        Terminator = LF
    

    获取单个属性的值,要把属性的名字提供给get函数:

     get(s,'Outputbuffersize')
    
    ans =
    
    	512
    

    获取多个属性的值

    get(s,{'Parity','Transferstatus'})
    
    ans =
    
    1×2 cell array
    
    	'none'    'idle'
    

    设置属性的值

    通过使用set函数来设置属性的值:

    set(s,'BaudRate',115200)
    

    通过使用 . 符号来设置属性的值:

     s.BaudRate = 115200
    

    通过使用set函数来

    set(s,'BaudRate',115200,'Inputbuffersize',1024)
    

    创建串口对象

    使用下列语句创建串口对象

    s = serial('端口号')
    

    如果端口号在使用中,或者不存在,则不能将端口号对应的设备连接到电脑上

    也可以在创建对象的时候,配置对象的属性值

    s = serial('port','BaudRate','9600','Parity','even')
    

    如果分配了非法的属性名,这个对象不会被创建。如果分配了非法的值给某个属性,那么这个对象将会被创建,但是在使用fopen进行连接时,将会出现问题

    连接设备

    在开始使用串口对象来写和读数据之前,必须要使用serial函数中分配的串口来连接到设备。

    使用fopen函数来创建对象

    fopen(s)
    

    串口属性在连接后就不能进行修改了,必须要使用fopen函数来连接之前就设置好

    可以通过检查Status来确认这个串口对象是不是连接在设备上:

    s.Status
    
    ans =
    
    	'open'
    

    如下图所示,在设备和串口对象连接时,数据是可以被读写的:
    在这里插入图片描述

    配置通讯参数

    在使用串口读写数据之前,串口对象和设备必须要有一致的通信设置。配置串口通信包含控制波特率和串口数据格式的一些特殊的属性值:

    BaudRate:波特率
    DataBits:数据位数
    Parity:奇偶校验位
    StopBits:停止位
    Terminator:终结字符
    

    读写数据

    对MATLAB命令行的访问控制

    通过指定读写操作是同步的还是异步的,可以控制对MATLAB命令行的访问。

    如果是同步操作,就会阻碍对MATLAB命令行的访问,直到写数据操作完成。异步操作的不会阻碍命令行,在读写函数的执行过程中,可以执行附加的命令

    由于串口有不同的读写引脚,因此可以同时读写数据,如下图所示
    在这里插入图片描述

    写数据

    写数据涉及到的函数:

    fprintf:写文字到设备
    fwrite:写数据到设备
    stopasync:停止异步读写操作
    

    写数据所涉及的属性:

    ByteToOutput:当前数据缓存中的字节数
    OutputBufferSize:输出缓存的大小(按字节算)
    Timeout:完成一个读写操作的等待时间
    TransferStatus:异步读取或写入操作的状态
    ValuesSent:发送到设备上总的字节数
    

    输出缓存和数据流

    输出缓存时分配给串口对象的计算机内存,用来存储要写入设备的数据。当输出数据写入设备时,数据流分为以下两步:

    1. 通过写函数将指定的数据发送到输出数据缓存区
    2. 输出缓存内的数据发送到设备

    OutputBufferSize属性指定了要存放在输出缓冲中的数据的最大字节数
    BytesToOutput属性表明了现存在output buffer中数据的字节数

    如果超过了output buffer的大小限制,就不能写入数据,错误发生
    在这里插入图片描述

    写文字数据

    fprintf函数用来把文字数据写入到设备中

    用法:

    fprintf(s,'send data')
    

    在默认情况下fprintf函数是同步写入,并且阻碍命令行访问,直到执行完毕。要想异步写入设备,可以在fprintf的字符串中的最后位指定为async:

    fprintf(s,'send data','async')
    

    异步操作不会阻碍对MATLAB命令行的访问,并且,当一个异步写操作在进行时:

    1. 可以执行一个异步读操作,因为串口有不同的针脚来完成读和写
    2. 可以使用所有支持的回调属性

    fprintf写操作在下面条件之一发生时,就完成:

    1. 数据写入完成
    2. Timeout属性指定的时间过了

    写二进制数据

    使用fwrite函数来写入二进制数据到设备中,写入二进制数据就是指写入数字值

    在默认时,fwrite函数是同步操作。如果要使用异步,也需要在fwrite末尾部分添加async参数

    读数据

    读数据相关的函数:

    fgetl:从设备中读取一行数据并丢弃终止符
    fgets:从设备中读取一行数据并包括终止符
    fread:从设备中读取二进制数据
    fscanf:从设备中读取数据并格式化为文本
    readasync:从设备中异步读取数据
    stopasync:停止异步读和写操作
    

    读数据相关的属性:

    BytesAvailable:输入缓冲区中可用的字节数
    InputBufferSize:输入缓冲区的大小,按字节算
    ReadAsyncMode:指定异步读取操作为连续操作还是手动操作
    Timeout:完成一个读写操作的等待时间
    TransferStatus:异步读取或写入操作的状态
    ValuesReceived:从设备中读取的值的总数量
    

    输入缓存和数据流

    输入缓存(Input Buffer)是串口对象分配的计算机内存,用来存储从设备读到的数据。当从设备读取数据时,数据流遵循以下两步:

    1. 从设备中读取的数据要存放到输入缓存中
    2. 输入缓存中的数据通过读操作函数将数据返回到MATLAB变量中

    InputBufferSize属性指定了可以存放在输入缓存中的数据的最大字节数
    BytesAvailable属性指定了存放在输入缓存中的,可以使用的数据的大小

    在这里插入图片描述
    对于读操作,并不知道从设备返回上来的数据的字节数。因此,需要在连接串口对象之前先给InputBufferSize属性配置一个足够大的值。

    读文字数据

    可以使用fgetl,fgets和fscanf函数来从设备上读取数据,并把数据按文字格式对待

    在默认时,fscanf使用%c的格式来读取数据,因为许多串口设备返回的数据是基于文字格式的

    可以用ValuesReceived属性来查看读到了多大的数据

    同步和异步读操作:通过ReadAsyncMode属性,可以指定读操作采用同步或异步的方式。ReadAsyncMode属性值有continuous和manual。如果ReadAsyncMode是continuous(默认),串口对象连续查询设备,看数据是否可读。如果数据可用,就被异步地输入到缓存中。要把输入缓存中的数据送到MATLAB中,用同步(阻塞)读函数来操作(fgetl或fscanf)。如果数据在输入缓存中可用,这些函数就可以将输入缓存中的值返回。如果ReadAsyncMode的值为manual,串口对象不连续查询设备。要异步读取数据,使用readasync函数。要把输入缓存中的数据送到MATLAB中,使用读函数来操作。

    异步操作不阻塞命令行,在异步读取数据时,可以:

    1. 执行一个异步写操作,因为串口有不同的针脚来完成读和写
    2. 可以使用所有支持的回调属性

    fscanf函数操作完成的规则:一个fscanf函数在读操作是将要阻塞对MATLAB命令行访问,直到:

    • 使用Terminator属性指定的停止字
    • Timeout属性指定的超时时间到
    • 达到了指定的读取数据的个数
    • 输入缓存满了

    读二进制数据

    用fread函数来从设备读入二进制数据,这就代表这将传递数值给MATLAB

    如果使用的是fgetl,fgets或fscanf函数,需要调用两次,因为每个值的后面都跟随了一个停止字,输入缓存中有两个停止字。如果使用了fread,只需要调用一次就可以把所有数据读取MATLAB中

    断开连接

    当不再使用串口对象时,要断开它和设备的连接,清空内存(delete(s)),并移除工作区(clear s)

    fclose(s)
    delete(s)
    clear s
    
    展开全文
  • 一个实用的matlab串口接收程序查询方式接收-matlab_serial_port.rar 运行方式:下载,解压,运行serialcomm函数即可 是最完整的,Matlab实用的串口程序,测试可以运行。 确认你的串口已经接好,要不然会出现...
  • matlab串口数据采集

    2021-04-24 16:28:08
    获取数据位个数 data_bits = 5 + get(handles.data_bits, '... %% 创建串口......MATLAB串口相关函数_信息与通信_工程科技_专业资料。选填,简要介绍文档的主...matlab 串口通信基础讲义 ①支持基于串行接口(RS-23...

    获取数据位个数 data_bits = 5 + get(handles.data_bits, 'value'); %% 获取停止位个数 stop_bits = get(handles.stop_bits, 'value'); %% 创建串口......

    MATLAB串口相关函数_信息与通信_工程科技_专业资料。选填,简要介绍文档的主...

    matlab 串口通信基础讲义 ①支持基于串行接口(RS-232、RS-422、RS-485) 、GPIB 总线(IEEE2488、HPIB 标准) 、 VISA 总线的通信; ②通信数据支持二进制和文本(......

    5 进行串口设置 参看如下图中的 MATLAB 帮助 进行串口设置,参看如下图中的 串口初始化(主要在打开串口按钮的回调函数中),包括 COM 端口,BaudRate,DataBits,Stop......

    数据采集系 统结构框图如图 1 所示。PC 机串口与单片机 USART 口通过 MAX232 电平转换芯片相连,系统工作 时,Matlab 通过调用设备控制工具箱中 serial 类及相关......

    matlab串口实时波形显示_工学_高等教育_教育专区。作者:GG 功能:实现 matalb 与 PC 外设通讯 本例:串口 232 与外设单片机 51 通讯。实时监控 51 数据并且实时......

    送入 FSR,用间接寻址方式 75 freeserial ( obj) ,释放所有或指定的串口 ; delete ( obj) , 清除串口 对象 ; clear ( obj) ,从 MATLAB 中清除对象 。 …......

    由于其长时间的使用,相关技术和程序也比 较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb 等,串口监视 和调试助 手等也随处可以得到,相对于其嵌入式......

    非常好的Matlab串口发送图像的程序,并附带GUI界面操作,实测100K以内大小的图像均...global value % 串口的 TimerFcn 回调函数 % 串口数据显示 %% 获取参数 hasData......

    获取数据位个数 data_bits = 5 + get(handles.data_bits, 'value'); %% 获取停止位个数 stop_bits = get(handles.stop_bits, 'value'); %% 创建串口......

    MATLAB串口示波器_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载 | 举报文档 MATLAB串口示波器_计算机软件及应用_IT/计算机_专业资料。%*** %......

    取数据存放单元首地址 ; 送入 FSR, 用间接寻址方式 75 freeseriai obj) 释放所有或指定的串口; (, deiete obj) 清除串口 (, 对象; ( obj) 从 MATLAB 中......

    (完整版)MATLAB串口通信设计源码_信息与通信_工程科技_专业资料。func...

    本文利用 Matlab GUI 设计通过串口进行数据发送和接收的界面, 并利用内置于 Matlab 的串口通信 API 实现串口数据发送与接收功能。 1 Matlab GUl 介绍 启动 Matlab ......

    Matlab 串口函数 2009-09-25 21:22 Matlab 是数学计算的强大工具,它以矩阵作为数据操作的基本单位,广泛应用在以矩阵运 算为主要工作方式的数理统计、自动控制、......

    数据采集系统的结构框图如图1所示。PC 机串口与单片机 USART 口通过 MAX232 电平转换芯片相连,系统工作时,Matlab 通过调用设备控制工具箱中的 serial 类及相关函 ......

    利用Matlab的GUI工具和内 置的串口通信API,设计开发一个可视化的串口通信例程,实现IMU原始数据的接收采集,并利用Matlab强大的科学计算 功能,对数据进行实时处理,图形......

    数据采集系统的结构框图如图 1所 示。 PC 机串口与单片机 USART 口通过 MAX232 电平转 换芯片相连,系统工作时,Matlab通过调用设备控制工 具箱中的 serial类及......

    matlab串口实时波形显示_工学_高等教育_教育专区。作者:GG 功能:实现matalb与PC外设通讯本例:串口232与外设单片机51通讯。实时监控51数据并且实时图形显示时间:2011—......

    通俗易懂!单片机与Matlab的串口通信_信息与通信_工程科技_专业资料。通俗易懂!单片机与 Matlab 的串口通信 Matlab 提供了对串口进行打开、关闭、以及串口参数设置等......

    展开全文
  • matlab串口及回调程序

    2015-03-14 12:21:56
    matlab串口及回调程序,用于接受单片机数据同时显示波形和存储
  • MATLAB串口相关函数.pdf

    2021-10-08 16:12:29
    MATLAB串口相关函数.pdf
  • matlab 串口数据采集

    2018-05-10 20:23:57
    MATLAB的按钮以及各种控件事件响应是依靠一种叫做回调函数(Callback Function)来实现的,自动生成的M文件中已经自动做好回调函数的名称和参数了,目前代码已经完成,可以使用。
  • MATLAB串口通信

    万次阅读 多人点赞 2015-05-20 16:28:36
    Matlab并不具备直接访问硬件的能力,但是支持面向对象技术,通过调用Instrument Control Toolbox中的serial类函数来创建串口对象,对串口对象操作就是对串口操作,使用起非常方便。同时,Matlab封装的串口对象支持对...
     Matlab并不具备直接访问硬件的能力,但是支持面向对象技术,通过调用Instrument Control Toolbox中的serial类函数来创建串口对象,对串口对象操作就是对串口操作,使用起非常方便。同时,Matlab封装的串口对象支持对串口的异步读写操作,使得计算机在读写串口时能同时进行其他处理工作,因而能大大提高计算机执行效率。Matlab用多线程技术实现这种异步操作,通过异步读写设置,计算机在执行读写串口函数时能立即返回不必等待串口把数据传输完毕,当指定的数据传输结束时就触发事件,执行事件回调函数,可以在事件回调函数中编程,进行数据处理,这样就不会造成因等待串口传输数据引起的时间浪费。
    

    MATLAB的Instrument Control Toolbox提供了 MATLAB与仪器仪表通信的功能 ,它支持 GPIB 通用接口总线 、VISA、TCP/ IP、UDP、RS2232等多个协议 ,具有同步和异步读写功能以及事件处理和回调操作功能,可读写和记录二进制和ASCII文本数据。与串口有关的主要函数如下[3]:

    1)建立串口对象函数:obj=seril(’port’,’property name’,propertyvalue……),其中主要的属性有:baudrate(波特率),databits(数据位),parity(校验方式),stopbits(终止位)等,可以在初始化时进行赋值或者使用set函数。
    (2)打开串口设备对象:fopen(obj)
    (3)串口读写操作:当matlab通信数据采用二进制格式时,读写串口设备的命令为fread()和fwrite();当通行数据采用文本(ASCII)格式时,读写串口设备的命令为fscanf()和fprintf()。
    (4)关闭并清除设备对象:
    Fclose(obj);%关闭串口设备对象
    Delete(obj);%删除内存中的串口设备对象

    基于本系统串口通信协议,对串口对象的读写部分程序如下(简单例程),查询方式

    Obj=serial(’com1’,’baudrate’,9600,’parity’,’none’,’databits’,8,’stopbits’,1);%初始化串口
    Fopen(obj);%打开串口对象
    Fwrite(obj,256);%向串口发送握手信号0xff
    TMP=fread(obj,3,’unit8’);%从串口读取3字节数据,后2个即是16bit温度数据
    If TMP(1)= =256   %判断第一个字节受否是握手信号
    For i = 13
    Dat(i)=TMP(i+1);%剔除第一个握手信号字节
    End
    End
    Fclose(obj);%关闭串口设备对象
    Delete(obj);%删除内存中的串口设备对象 

    2.中断方式通信
    参考:http://blog.sina.com.cn/s/blog_62de76a90100fhbw.html
    从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口通信正式支持。利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。为此,笔者充分结合单片机和Matlab优点,基于事件驱动中断通信机制,提出了一种Matlab环境下PC机与单片机实时串行通信数据处理方法,极大地简化开发流程,提高了系统开发效率。另外,与目前普遍采用基于Matlab查询方式下非实时串行通信技术相比,这种方法实用性也大大增强了
    在Matlab6.0中新增设备控制工具条(instrument control toolbox)用来负责上、下位机之间通信。该设备控制工具箱特色如下:

    ①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线通信;

    ②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言;

    ③支持异步通信和同步通信;

    ④支持基于事件驱动通信。

    从以上Matlab设备控制工具箱特点可以看到,Matlab完全可以满足我们实现串行通信要求。

    3.1 Matlab对串行口控制基础知识

    Matlab对串行口编程控制主要分为四个步骤。

    ①创建串口设备对象并设置其属性。

    scom=serial(‘com1’);%创建串口1设备对象scom

    scom.Terminator=’CR’;%设置终止符为CR(回车符),缺省为LF(换行符)

    scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B

    scom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512B

    scom.Timeout=0.5;%Y设置一次读或写操作最大完成时间为0.5s,缺省值为10s

    s.ReadAsyncMode=’continuous’(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)缺省方式,那么下位机返回数据会自动地存入输入缓冲区中.

    注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置串口设置对象属性值与缺省值属性值相同,用户可以不用另行设置。

    另外,设置串口设置对象属性也可以用一条指令完成,如:scom=serial(‘COM1’,’BaudRate’,38400,’Parity’,’none’,’DataBits’,8,’StopBits’,1)。也可以用set命令,如set(scom,’BaudRate’,19200,’Parity’,’even’)。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部属性,可以用get(scom)命令。

    ②打开串口设备对象。

    fopen(scom);

    ③读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备命令分别是fread、fwrite。下面以文本方式读写串口为例:

    a.读串口。A=fscanf(scom,’%d’,[10,100];%从串口设备对象scom中读入10*100个数据填充到数组A[10,100]中,并以整型数据格式存放。PCbfans.cn提示请看下图:Matlab环境下PC与单片机的串行通信及数据处理 - huzoy - mylearning

    h.写串口。Fprintf(scom,’%s’,’RS232’,’async’);%将字符串‘RS232?’以字符数据格式写入到串口设备scom,写操作以异步方式进行。

    ④关闭并清除设备对象。

    fclose(scom);%关闭串口设备对象

    delete(scom);%删除内存中串口设备对象

    clear scom; %清除工作空间中串口设备对象

    当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建串口对象对象清除,以免占用系统资源。

    可以看出,在Matlab中进行串行通信是十分方便,编程较为简单。而且,在Matlab中串行通信失误率很低,通信较为可靠,也可以采用增加握手信号以及数据校验等方式进一步增加通信可靠性。

    3.2 Matlab实现串行通信软件设计

    在Matlab环境下,读取串口数据方式可以分为两种—查询和中断。以查询方式进行串行通信时,如下位单片机有大量数据分时分批传送给PC机,就需要不停查询串行口缓冲区,有数据就读取;虽然编程容易,但这样做不能对数据进行实时处理,系统实时性不高,而且会极大地占用系统资源。以中断方式对串口进行控制实现串行通信,就可以实时处理下位机传送数据;但编程相对复杂一些,需要采用Matlab事件和回调函数机制。

    (1)基于Matlab查询方式异步串行通信编程

    Matlab查询方式串行通信编程虽然简单,但这种方法在实际应用中实用价值不高,下面只作简单介绍。通信源程序如下:

    clc;%初始化串口设备对象,设置串口属性为:PC机com2口,输入缓冲区为1024,读写最大完成时间为0.6s,波特率为115 200b/s,1位停止位,遇到换行符中止,硬件流控制

    g=serial(‘com2’);

    g.InputBufferSize=4096;

    g.timeout=0.6;

    g.BaudRate=115200;

    g.Parity=’none’;

    g.StopBits=1;

    g.Terminator=’LF’;

    g.FlowControl=’hardware’;

    fopen(g);%打开串口设备对象s

    fwrite(g,255);%以二进制方式发送握手信号0xFF,缺省为异步通信方式

    out=fread(g,33,’uint8’)%接收单片机发送33个数据(8位),并存入out数组中

    %释放串口设备对象

    fclose(g);

    delete(g);

    clear g;

    (2)基于Matlab中断方式实时串行通信编程

    在Matlab环境下以中断方式进行串行通信,实际上是采用事件驱动方法实现。Matlab提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体串行通信事件。Matlab常用串行口通信中断事件有:缓冲区有指定字节数目数据可用事件(bytes-available event)、串口接收到数据长时间处于非激活状态事件(break-interrupt event)、串行口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)等。当串口上有监视事件发生时,Matlab会自动调用回调函数进行通信事件处理。因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。Matlab端实时串行通信程序流程如图4所示。以下是具体编程步骤。

    ①建立一个串行通信主程序:serial.m文件,在主程序中进行串口设备初始化操作,并指定回调函数中串行通信事件。

    程序主要源代码如下(创建串口设备对象、设备串口设备属性及打开串口等初始化操作代码与前述查询方式下初始化代码相同):

    %设置回调函数触发事件—当串口缓冲区中有33字节数据时,触发中断事件,此后主程序自动调用instrcallback(obj,event)回调函数

    g.BytesAvaibleFcnMode=’byte’;%中断触发事件为‘bytes-available Event’

    g.BytesAvailableFcnCount=33;%接收缓冲区每收到33个字节时,触发回调函数

    g.BytesAvailableFcn=@instrcallback;%得到回调函数句柄

    fopen(g);%连接串口设备对象

    fwrite(g,255);%写串口,发送握手信号0xFF(等价于十进制下数值255)

    ②修改instrcallback(obj,event)回调函数,对所发生串口通信事件进行处理。

    Matlab缺省回调函数instrcallback(obj,event)存在于instrcallback.m文件中。该文件实际上是一个有待于用户修改程序模块。其中只有一些最基本程序代码,能够显示导致串口中断发生是哪一类事件,中断事件所发生时间以及导致事件发生对象名等信息(修改回调函数文件时,注意要取消文件中相应信息后分号,才能够在Matlab命令窗口(command window)中将这些信息显示出来)。中断发生后通信事件处理以及通信数据分析处理任务,需要用户自行添加相应服务程序代码。

    PCbfans.cn提示请看下图:Matlab环境下PC与单片机的串行通信及数据处理 - huzoy - mylearning

    Matlab安装目标下有两个instrcallback.m文件,我们只需要修改@instrument目录下instrcallback.m文件即可。当然,在修改instrcallback.m文件之前,最好对其做一个备份。另外,需要注意是:程序调试过程中如果再次修改了该回调函数,要重新启动Matlab配置该文件,才能使得新回调函数文件生效。

    修改后instrcallback.m文件见网站www.dpj.com.cn。该修改后回调函数能够完成如下任务:

    ①实时接收单片机实时5ms发送33个串行通信数据,其中包括1个握手信号和32个A/D转换数据(这些数据是PIC单片机系统采集到传感器信号,每个数据占1字节),并存储在out数组中;

    ②对接收到数据进行处理,由于PIC单片机A/D转换值为10位,占2字节,而单片机每次只能传送1个字节数据,故将收到每两个通信数据整合成为1个真实A/D转换数据,共16个A/D转换数据,并存储在Dataout数组中;

    ③将接收到串口数据存储到serialdata.txt文件中,将整合后单片机A/D转换数据存储到一个以中断事件发生时间为文件名txt文件中;

    ④根据A/D转换数据,利用Matlab求其最大值、最小值和平均值,并利用FIR滤波器对传感器信号A/D转换值作FIR滤波处理,得到窗格为5滑动滤波平均值;

    ⑤利用Matlab中plot()函数实时绘制单片机采集到传感器信号原始波形图和FIR滤波后波形图,如图5所示,可以看到经过FIR滤波后传感器动态信号值较为稳定,精度大幅提高。

    实验证明,基于Matlab中断方式PC机与单片机实时串行通信稳定可靠,处理数据方便,编程简单,开发效率大大提高。

    4 结论

    本文介绍基于Matlab环境下PC机与PIC单片机串行通信实现方法,利用MatlabInstrument Control Tollboxserial类及instrcallback()回调函数,实现基于事件驱动实时中断通信。使开发人员可以充分利用Matlab工具箱中现有函数,方便地实现串行通信、数据分析处理和图形显示,大大简化系统上位机软件编程工作量。

    1. matlab串口GUI实现
      参考:http://blog.sina.com.cn/s/blog_4b94ff130100e7wt.html
      http://blog.sina.com.cn/s/blog_62de76a90100fhbz.html
    展开全文
  • 可以改成下面这样/* UART in mode Receiver -------------------------------------------------*/if ((__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_RXNE) != RESET) &&(__HAL_UART_GET_IT_...
  • 通过调用MATLAB串口,实现MATLAB数据输出,与单片机通信
  • 1、函数功能fprintf函数可以将数据按指定格式写入到文本文件中。2、调用格式数据的格式化输出:fprintf(fid, format, variables)按指定的格式将变量的值输出到屏幕或指定文件,fid为文件句柄,若缺省,则输出到屏幕。...
  • MATLAB经常用于和单片机的串口进行通信,简单记录下MATLAB串口的打开和关闭。MATLAB版本为比较新的2021a,使用serialport函数进行打开操作,关闭则用delete。 % 定义串口参数 serialComName = 'COM38'; ...
  • 为了能够很好的调节PID,我现学了matlab gui界面的设计,及实时曲线的绘制,能够很方便的调节PID。单片机可以把设定值和返回值通过232串口传输到上位机,上位机通过修改P I D 的参数也可以实时的传输给下位机。界面图...
  • 看起来您正在尝试存储鼠标单击位置的值,然后将这些值用作resize函数的一部分(稍后将调用它).我会做一些改变.首先,使用另一个回调来捕获鼠标单击,而不是while循环.例如,您可以使用图形ButtonDownFcn回调来触发一个...
  • 三天了,终于把串口...About Software……刚开始接触的时候,大脑一片空白,不知从何下手,就在MATLAB的help文档中search—>serial,一搜,东西一大堆一下子把我吓到了,没办法,一点一点慢慢看,边看我就边实...
  • matlab常用函数集锦

    2017-12-14 05:08:51
    fzero只适用求解一元函数零点,而fsolve适用于求解多元函数零点(包括一元函数)。当求解一元函数零点时,推荐优先使用fzero x = fzero(fun,x0) [x,fval] = fzero(fun,x0) 复制代码 如果方程有多个零点时,fzero...
  • 基于MATLAB串口通信的数据采集系统的设计.pdf
  • matlab串口发送指令代码珀尔修斯 推式电子继电器,用于智能警报,以提高最终用户的态势意识 德里克·默克(Derek Merck) 小林利奥 概述 旧的一切又都是新的。 将未联网的生命监护仪转换为已连接的智能警报。 原始...
  • 在进行PID参数整定的工作过程中,我需要将电机的转速、扭矩、母线电压、母线电流、相电压、相电流等参数通过串口传递到电脑上用Matlab来进行BP神经网络算法的PID整定计算,再将计算得到的PID参数传给电机的驱动板,...
  • 串口得到的数据读进matlab中,然后由matlab进行绘图处理
  • fid=fopen('file.dat','w+');%创建并打开file.dat文件A=[1:10];%创建数组A,1~10count=fwrite(fid,A);%将数组A写入文件fseek(fid,3,'bof');%指针移入第四个元素count=f...
  • MATLAB有一个常用的系统辨识工具箱,能够根据输入输出数据计算得到系统的传递函数,或是状态空间模型,下面给出具体的实施方法。 1、准备 将输入输出数据保存存到MATLAB的工作空间中; Matlab命令行窗口输入:...
  • Matlab串口通信

    千次阅读 2019-11-13 10:14:51
    matlab 2019对串口部分操作函数进行了升级,提升了性能和可靠性 主要替代关系如下 Theserialfunction, its object functions, and its properties are not recommended. Useserialportinstead. serialInterface ...
  • 【实例简介】译者重现当年(2012版)经典,加入了对于MATLAB串口操作新的理解,修正了老版本教程中的疏漏,分享串口操作视频实例链接,以飨读者。Serial Port devicesMATLABR2012b目录:教程和实例Examples and how ...
  • Matlab上位机开发(五)Matlab串口通信

    千次阅读 多人点赞 2020-03-26 12:53:26
    1. Matlab串口通信 Matlab提供了串口通信的功能,串口通信的流程如下: 1.1. 创建串口对象 创建一个串口对象的API如下: scom = serial('<串口号>'); 串口号为COM8的形式,这个API有个缺点:不能自动检测目前...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,099
精华内容 1,239
关键字:

matlab串口函数

matlab 订阅