精华内容
下载资源
问答
  • 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串口收发及回调函数编程

    热门讨论 2011-08-20 16:38:27
    matlab创建com对象。并采用中断方式响应回调函数,功能完整,包括创建初始化及关闭销毁。回调函数的格式,实现方法。
  • 一个实用的matlab串口接收程序查询方式接收-matlab_serial_port.rar 运行方式:下载,解压,运行serialcomm函数即可 是最完整的,Matlab实用的串口程序,测试可以运行。 确认你的串口已经接好,要不然会出现...
  • MATLAB串口相关函数.pdf

    2021-10-08 16:12:29
    MATLAB串口相关函数.pdf
  • matlab串口及回调程序

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

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

    经验:

    1. 回调函数的设置需要先fopen串口。
    2. 但是串口的有些参数,比如说串口读取的字节数,读取模式是byte还是终止符,需要在fopen之前设置。
    3. 回调函数的设置有不同的方法,根据参数个数不同,设置方式不同。
    展开全文
  • 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
    展开全文
  • MATLAB用来实现串口通信

    千次阅读 2020-06-28 18:48:50
    1、要实现串口通信,第一步必须要创建一个串口对象,MATLAB中提供了serial函数来创建一个串口对象。具体用法为: object = serial('port'......);%其中object为串口的一个句柄 串口中的参数有很多例如:parity 校验...

    由于MATLAB中提供了仪表仪器通信的功能,所以MATLAB可以用来实现串口通信。

    1、要实现串口通信,第一步必须要创建一个串口对象,MATLAB中提供了serial函数来创建一个串口对象。具体用法为:

    object = serial('port'......);%其中object为串口的一个句柄
    

    串口中的参数有很多例如:parity 校验方式;databits 数据位;stopbits 停止位等。
    MATLAB设置串口对象后,还要对它的属性进行设置:
    object.InputBufferSize = 1024;%设置输入缓冲区的大小
    object.OutputBufferSize = 1024;%设置输出缓冲区的大小
    object.Timeout = 0.5;%设置一次写入或者读入操作完成最大时间为0.5s时间单位为秒。
    object.BytesAvailableFcnMode = ‘byte’;% 设置读入文件的格式为二进制。
    object.BytesAvailableFcn = @fcntion_callback;%设置串口执行的回调函数(这个属性比较重要);
    2、建立好串口的对象后,要使用它需要将串口对象打开。具体操作为:

    fopen(object);% 将串口对象打开
    

    3、将串口打开之后要想与串口进行通讯,这时候就需要发送握手命令给串口,与串口进行连接。具体操作:

    fwrite(object,......);% 握手信号根据协议或者其他信息的差异会不同
    

    由于我选择读取数据的方式为二进制文件的方式,所以使用fwrite函数来发送信息。如果是文本文件时写入串口的函数使用fscanf函数来完成。
    4、当我们与串口建立联系之后就可以向串口读取信息了。具体使用的方法:

    data = fread(object,10);% 向串口读取10个数据,这里的数据根据需求可以进行改动
    

    5、当我们需要关闭工程或者是停止通讯时,需要将串口关闭或者清除串口对象。具体的用法是:

    fclose(object); % 关闭串口对象
    delete(object); % 删除内存中的串口对象
    

    或者你感觉这样很麻烦,这里有一个更加直接的方法:在主工程界面中的关闭函数中使用clear all;语句来关闭所有的缓存,使用close all;关闭所有的窗口,然后在回调函数中调用关闭函数。

    展开全文
  • Matlab串口通信

    千次阅读 2019-11-13 10:14:51
    matlab 2019对串口部分操作函数进行了升级,提升了性能和可靠性 主要替代关系如下 Theserialfunction, its object functions, and its properties are not recommended. Useserialportinstead. serialInterface ...

    matlab 2019对串口部分操作函数进行了升级,提升了性能和可靠性

    主要替代关系如下

    The serial function, its object functions, and its properties are not recommended. Use serialport instead.

    serial Interfaceserialport InterfaceExample
    seriallistserialportlistDiscover Serial Port Devices
    serialserialportConnect to Serial Port Device
    fwrite and freadwrite and readRead and Write
    fprintfwritelineSend a Command
    fscanffgetl, and fgetsreadlineRead a Terminated String
    flushinput and flushoutputflushFlush Data from Memory
    TerminatorconfigureTerminatorSet Terminator
    BytesAvailableFcnCountBytesAvailableFcnMode,BytesAvailableFcn, and BytesAvailableconfigureCallbackSet Up a Callback Function
    PinStatusgetpinstatusRead Serial Pin Status
    DataTerminalReady and RequestToSendsetDTR and setRTSSet Serial DTR and RTS Pin States

     

     

    搜索串口

    2019之前

    显示串行端口的列表
    seriallist 函数显示系统上所有串行端口的列表。

    显示可用的串行端口。

    seriallist
    ans = 

      1×2 string array

      "COM1"    "COM3"
    现在,您可以创建 serial 对象,并通过串行端口通信。

    2019之后推荐的方法

    serialportlist

    serialportlist("all")

    serialportlist("available")

    举例

    识别电脑上的串口

    ports = serialportlist
    ports = 

      1×4 string array

        "COM1"    "COM3"    "COM11"    "COM12"
    识别目前可用的串口

    freeports = serailportlist("available")
    freeports = 

      1×2 string array

        "COM1"    "COM12"

     

     

    使用串口

     

    2019之前

    s = serial("COM1");
    s.BaudRate = 115200;
    fopen(s)

    2019之后推荐的方法

    s = serialport("COM1",115200);

    读写串口

    2019之前

    % s is a serial object
    fwrite(s,1:5,"uint32")
    data = fread(s,5,"uint32")
    % s is a serial object
    command = "start";
    fwrite(s,command,"char")
    % s is a serial object
    length = 5;
    resp = fread(s,length,"char")

    2019之后推荐的方法

    % s is a serialport object
    write(s,1:5,"uint32")
    data = read(s,5,"uint32")
    % s is a serialport object
    command = "start";
    write(s,command,"char")
    % s is a serialport object
    command = "start";
    write(s,command,"string")
    % s is a serialport object
    length = 5;
    resp = read(s,length,"string")

     

    发送SCPI命令

    之前

    % s is a serial object
    s.Terminator = "CR/LF"
    channel = 1;
    level = 3.44;
    fprintf(s,"TRIGGER%d:LEVEL2 %1.2f",[channel,level]);

    现在推荐的方法

    % s is a serialport object
    configureTerminator(s,"CR/LF")
    channel = 1;
    level = 3.44;
    cmd = sprintf("TRIGGER%d:LEVEL2 %1.2f",[channel,level]);
    writeline(s,cmd)

     

    接收SCPI

    % s is a serial object
    fprintf(s,"MEASUREMENT:IMMED:TYPE PK2PK")
    a = fscanf(s,"%e",6)
    % s is a serial object
    fprintf(s,"*IDN?")
    a = fgetl(s)
    % s is a serial object
    fprintf(s,"*IDN?")
    a = fgets(s)

     

    现在推荐的方法

    % s is a serialport object
    writeline(s,"MEASUREMENT:IMMED:TYPE PK2PK")
    a = readline(s)
    sscanf(a,"%e")
    % s is a serialport object
    writeline(s,"*IDN?")
    a = readline(s)

     

    设置结束符

    之前

    % s is a serial object
    s.Terminator = "CR/LF";
    % s is a serial object
    s.Terminator = {"CR/LF" [10]};

    现在推荐的方法

    % s is a serialport object
    configureTerminator(s,"CR/LF")
    % s is a serialport object
    configureTerminator(s,"CR/LF",10)

     

    回调函数

    之前

    s = serial("COM5","BaudRate",115200)
    s.BytesAvailableFcnCount = 5
    s.BytesAvailableFcnMode = "byte"
    s.BytesAvailableFcn = @instrcallback
    
    fopen(s)
    
    function instrcallback(src,evt)
       data = fread(src,src.BytesAvailable)
       disp(evt)
       disp(evt.Data)
    end

    现在推荐的方法

    s = serialport("COM5",115200)
    configureCallback(s,"byte",5,@instrcallback);
    
    function instrcallback(src,evt)
       data = read(src,src.NumBytesAvailable,"uint8")
       disp(evt)
    end

     

    API

    2019之前   https://ww2.mathworks.cn/help/matlab/serial-port-devices.html?s_tid=CRUX_lftnav

    2019  https://ww2.mathworks.cn/help/matlab/serial-port-devices.html?lang=en

    串口api变化  https://ww2.mathworks.cn/help/matlab/matlab_external/transition-your-code-to-serialport-interface.html

     

    Matlab工具箱介绍

    https://ww2.mathworks.cn/help/index.html?s_tid=CRUX_lftnav

     

     

    2019之前通过串口发送十六进制数据

    try
    controller1=serial('com9');
    controller1.BaudRate=9600;
    set(controller1,'Baudrate',9600,'DataBits',8,'Parity','none','StopBits',1);

    fopen(controller1);

    %method 1
    Str = 'FF0101003F';     %string defines the hexadecimal content to be sent
    D = sscanf(Str, '%2x'); %converts a string to hex data
    fwrite(controller1, D, 'uint8') %Send this data to the defined serial port s

    %method 2
    sendbuff=zeros(1,6);
    sendbuff(1)= hex2dec('FF');
    sendbuff(2)= hex2dec('01');
    sendbuff(3)= hex2dec('01');
    sendbuff(4)= hex2dec('00');
     
    fwrite(controller1, sendbuff, 'uint8');


    fclose(controller1);
    catch ME
        fprintf('%s\n',ME.message);
    end

        num = ['FF';'01';'01';'00';'30';'CF'];  
        num = hex2dec(num );
    fwrite(controller1, num, 'uint8');


    test = [164 0 0 14 8 49  2 51 52 164];
    [x,y] = size(test);
    %test_hex = dec2hex(test);
    fwrite(scom1, test, 'uint8');

    val = [170 180 val 85]; 
    fwrite(scom, val, 'uint8', 'async'); %数据写入串口 PC机上位机发送 这是当年做智能车时的Matlab_GUI 串口上位机 自己help fwrite看下就好 我也忘了这什么意思了 这是当时一段的代码 单片机接收的就是16进制数 数值为val 中的4个数 
    PC机接收单片机传来数据:
    n_bytes = get(obj,'BytesAvailable');     %% 数据总数量
       if n_bytes      %% 有效读取 防止Matlab延迟进入或误进入
       Data = fread(obj, n_bytes, 'uchar')';     %% 读走数据并存入Data中 直接为十进制数值形式
     

         num = ['FF';'01';'01';'00';'30';'CF'];  
        num = hex2dec(num );
        fprintf(sr3,num );

    原理就是把16进制转化为10进制,再以十进制发送,串口以十六进制接收的时候就是接受的原始数据, 

     


    最近在做串口通信的实验,串口连接都已经完成,我的仪器需要发送一个16位进制数才能返回一个数据,我需要发送的16进制数为‘4053 0000 0d0a’,我用fwrite来发送,用fread来读取,未能成功,请教罗老师该怎么修改?!书中的串口实例我也用过,不成功,但是我用VC版的串口小精灵能调通,希望罗老师能帮我指引一下,非常感谢!

    fwrite(scom,val,'uint8','async');    %其中val就是我要发送的命令


    已经自己解决了,原来fwrite可以输入数字矩阵,只要把‘4053 0000 0d0a’以一个字节为单位转换为十进制的数字矩阵就可以了,转换后为[64 83 00 00 13 10]就可以了,之前一直以为是把16进制统一转换成10进制。

    fwrite(scom,[64 83 00 00 13 10],'unit8','async')


    out=fread(s,10,'uint8');   %一次读出10个字符  
    fprintf('%3c',out);        %一个字符占三位输出,%c字符,%d整型


     

    展开全文
  • MATLAB串口通讯程序

    千次阅读 2017-09-19 17:43:29
    打开串口,设置波特率,缓存区大小,设定回调函数 clear all s = serial('COM5'); s.BytesAvailableFcnMode = 'byte'; s.InputBufferSize = 10000; s.BytesAvailableFcnCount = 50; s.BaudRate = 9600; s....
  • MATLAB串口操作

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

    2017-12-14 05:08:51
    fzero只适用求解一元函数零点,而fsolve适用于求解多元函数零点(包括一元函数)。当求解一元函数零点时,推荐优先使用fzero x = fzero(fun,x0) [x,fval] = fzero(fun,x0) 复制代码 如果方程有多个零点时,fzero...
  • matlab 回调函数函数的使用方法

    万次阅读 2015-02-05 18:22:43
     当用户将鼠标放到某个对象上,单击鼠标左键时,matlab将调用回调函数  2、GreatFcn  matlab将在创建对象是调用回调函数  3、DeleteFcn  matlab将在删除对象之前调用回调函数  二、图形窗口的回调函数 ...
  • MATLAB 串口通信的实现。。

    万次阅读 2016-04-08 21:58:38
    MATLAB上,对串口进行读取: delete(instrfindall) 这一句是删除所有串口设备。。 有的时候虽然关闭了串口,但是上面仍然显示占用,,这个时候就需要这一句。。  然后是打开串口。设置一些常用的参数。...
  • matlab数据采集——串口操作

    千次阅读 2018-05-08 16:55:33
    实验1:从电脑COM2口读取数据,并将数据保存在TXT文件中,方便数据分析,下面是M脚本:[java] view plain copy%名 称:Matlab串口-Lab1 %描 述:串口读,并写入txt文件中 s=serial('com2'); s....
  • Matlab串口数据接收发送流程和串口速度提高

    万次阅读 多人点赞 2018-09-11 19:28:52
    在进行PID参数整定的工作过程中,我需要将电机的转速、扭矩、母线电压、母线电流、相电压、相电流等参数通过串口传递到电脑上用Matlab来进行BP神经网络算法的PID整定计算,再将计算得到的PID参数传给电机的驱动板,...
  • Matlab上位机开发(五)Matlab串口通信

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

    千次阅读 多人点赞 2020-02-18 22:38:03
    作者:岚膺麒钿 日期:2020.2.18 咨询QQ:2498317094(加QQ时要注明是干什么的) 关于Matlab,很多人只知道它是一个强大的...这里要用到的知识有很多,例如:matlab的GUI编程、定时器,串口通信、回调函数Matlab的...
  • matlab CRC校验代码

    2019-03-28 09:10:09
    matlab CRC校验代码,亲自编写,支持16位校验,参照C代码编写,可用。
  • Matlab与单片机的串口通信-matlab

    万次阅读 多人点赞 2016-12-26 09:57:24
    Matlab提供了对串口进行打开、 关闭、 以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、 设置串口通信参数( 波特率、 数据位、 停止位、 校验位等)、进行中断控制、流控制。从建立串口通信到结束...
  • Matlab串口编程

    千次阅读 2017-08-31 20:29:25
    MATLAB串口通信例子 (一) 直接读取 首先,我们来试试编写一个.m程序,直接读取串口数据。更多技术细节在程序中的注释中说明。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 函数功能: 串口接收...
  • matlab 串口读取设置

    千次阅读 2016-03-14 20:33:52
    本例代码运行于 MATLAB2015b,参照网上的代码修改而成,可以自定义一次读取的数据,并做简单处理,随后绘图。实测可用、实用。 %读串口 % clear;  clc; obj=serial('COM3'); %建立一个串口对象 fopen...
  • Matlab自动识别插入电脑的串口设备及其串口号。函数运行之后返回N×2的单元矩阵,N代表所有活动串口数目。每行的第一列是接入电脑的设备名称(例如'USB-SERIAL CH340'),第二列是其对应的串口号。
  • 基于Matlab串口编程,可以参考,有什么好的建议可以互相交流
  • MATLAB经常用于和单片机的串口进行通信,简单记录下MATLAB串口的打开和关闭。MATLAB版本为比较新的2021a,使用serialport函数进行打开操作,关闭则用delete。 % 定义串口参数 serialComName = 'COM38'; ...
  • Matlab 实现串口助手

    千次阅读 2019-12-06 14:28:53
    使用 matlab 编程实现串口助手,实现串口数据的收发等功能。
  • matlab串口数据出传输

    万次阅读 2019-05-12 11:34:38
    在进行PID参数整定的工作过程中,我需要将电机的转速、扭矩、母线电压、母线电流、相电压、相电流等参数通过串口传递到电脑上用Matlab来进行BP神经网络算法的PID整定计算,再将计算得到的PID参数传给电机的驱动板,...

空空如也

空空如也

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

matlab串口函数

matlab 订阅