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

发布者:Qingfang最新更新时间:2010-07-12 来源: 现代电子技术关键字:Matlab  GUI  串口通信  IMU  软件编译 手机看文章 扫描二维码
随时随地手机看文章

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等。

    (4)从串口读写数据。在前面三个步骤正常完成后,即可以从串口读数据或者向串口写数据,也就是接收或者发送数据。实现读串口功能的函数有多个。其区别在于根据到达串口数据的类型选择合适的读函数。主要包括:fgetl,fgets,fread,fscanf。这里主要介绍fread,fread函数实现从串口读入二进制数据。fread的实现形式为:

    A=fread(obj,size)

    A为读入的数据,以数组的形式存储,存储数据形式为字节;obj即为使用创建串口对象函数的返回值;size指定一次读操作读入字节的个数。实现写串口的函数有两个,分别为fwrite和fprintf。fwrite以二进制形式向串口写入数据,实现形式为:

    fwrite(obj,A)

    obj即为使用创建串口对象函数的返回值;A为写入的数据,以数组形式存储。fwrite以文本形式向串口写入数据,即以ASCII码的形式向串口写数据,实现形式为:

    fprintf(obj,'cmd')

    obj即为使用创建串口对象函数的返回值;cmd为写入的文本数据,以数组形式存储。

    (5)关闭串口以及释放串口对象占用的存储空间。关闭串口函数为:fclose(obj)。释放串口对象占用的内存空间,函数为:delete(obj)。释放串口对象在Matlab工作区中占用的存储空间,函数为:clear obj。

    以上5步是建立串口通信过程到关闭串口,释放串口占用资源的基本步骤。基本步骤可以实现手动收发数据。其例程如下:
   
    运行以上语句后,显示的结果如下:
   

    串口数据接收完毕后,需要关闭串口,并释放串口对象占用的资源,使用的命令如下:
   
2.2 串口中断设置及中断处理函数

    要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义串口中断处理函数也就是定义串口数据接收或者发送函数。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作;在串口输出缓存为空的时候,通知启动串口数据发送函数。

    (1)触发串口中断的方式。在Matlab串口通信编程中,Matlab通过检测到串口通信事件,从而触发串口中断。涉及到串口读写的事件包括:Bytes available,Output empty。其中Bytes available事件有两种:一种是接收到的字符数达到人工设定的数目时,则系统产生该事件;另一种是当接收到指定字符时,系统产生该事件。Output erupty事件是在系统检测到输出缓存区为空时,产生该事件。

    Bytes available事件需要事先设置。可以使用函数:set(obj,'By tesAvailableFcnMode','byte');set(obj,'BytesAvailableFcn-Count',240);以上两个函数设置当串口检测到输入缓存中到达了240个字符的数据时,则触发串口中断。另外,也可以设置为当系统检测到某个字符达到串口,则触发串口中断。其设置函数为:set(obj,'BytesAvailableFcnMode','terminator');set(obj,'terminator',  'H')。以上两个函数设置当串口检测到字符H时,则触发串口中断。

    输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。

    (2)串口中断处理函数。串口中断处理函数可以根据用户需要自行定义。如串口读中断处理函数可以这样定义:obj.BytesAvailableF-cn=@reeeiveData。receiveData即为串口读中断处理函数。在读中断处理函数中可以进行串口读操作。即将输入缓存区中的数据读到用户自定义的存储变量中,以备后续的数据处理与分析。类似可以定义输出缓存为空时触发的串口中断处理函数:obj.OutputEmptyFcn=@write-Data。

    本文开发的串口通信程序用于接收采集IMU(Inertial Measurement Unit)输出的加速度计和陀螺的测量数据。通过定义串口读中断事件和串口中断处理函数,实现了数据的自动采集,并以Matlab图形方式实时显示数据。

3 串口通信程序的编译发布

3.1 编译程序

    为了对代码进行保密,以及方便用户发布可以在不同平台运行的可执行程序,Matlab提供了Matlab程序编译与发布功能。在进行Matlab程序编译之前,需要设置编译工具。在Matlab命令窗口中,输入运行mbuild-setup,进行编译工具设置。如图4所示。


    mbuild-setup命令运行后,Matlab会检测已经安装在本机上的编译器,用户可以自行选择任意一个编译器,选择完毕后,运行编译命令,Matlab将使用用户选定的编译器对程序进行编译。

    设置完毕编译工具后,即可以在命令窗口中运行编译命令,将Matlab程序编译成可执行程序。命令格式为:

    mcc[-options]mifilel[mfile2…mfileN];
    options为编译参数;mfilel为待编译的Matlab文件,如果包含多个Matlab文件,可以直接列在mfilel后面。

    如将一个文件名为myfun.m的Matlab文件编译成一个独立可执行程序,可以使用mcc命令:
    mcc-m myfun:
    mcc命令可以用使用多个编译参数,相应参数的含义可以参见Matlab帮助文档。

3.2 发布程序

    Matlab文件编译完毕后,生成的可执行程序还需要.Matlab环境的支持,要发布到没有安装Matlab的机器上运行,还需要进行最后一项工作,即打包Matlab组件运行环境(Matlab Component Runtime,MCR)。将MCR与可执行程序一起打包,拷贝到其他没有安装Matlab的机器上,在该机器上安装MCR,安装完毕即可以直接在该机器上运行编译的Matlab可执行程序。MCR安装文件位于:

    Matlab Root\toolbox\compiler\deploy\win32

    在2008版Matlab中,已经内置了Matlab编译发布工具箱,在Matlab命令窗口中运行deploytool命令,即可以调出该工具窗口,通过该工具可以方便、快捷地编译发布Matlab程序。

4 结语

    Matlab具有强大的科学计算功能和图形显示功能,选用Matlab作为数据处理与分析工具是合适的,但其界面开发和数据采集功能相对较弱,不如VisualC++或者LabView强大。不过,对于一般的界面开发,和普通功能的串口通信开发,Matlab是足以胜任的,同时也可以直接利用其强大的数据分析与处理功能。本文基于Matlab GUI的串口通信功能的编程实现表明利用Matlab GUI可以进行包含一般界面元素的界面开发,在此基础上,加入串口通信功能,实现数据的实时采集与分析处理,并进行图形化显示。

关键字:Matlab  GUI  串口通信  IMU  软件编译 引用地址:基于Matlab GUI的串口通信编程实现

上一篇:基于FPGA的嵌入式以太网与Matlab通信系统设计
下一篇:TMS320C6201 处理器与FLASH存储器接口设计

推荐阅读最新更新时间:2024-05-02 21:05

基于MATLAB/SIMULINK的心电信号源系统设计
  心电信号主要频率范围为0.05“100Hz,幅度约为0”4mV,信号十分微弱。由于心电信号中通常混杂有其它生物信号,加之体外以500Hz工频为主的电磁场干扰,使得心电噪声背景较强, 测量 条件比较复杂,为医学研究、救治和教学带来一定困难。本文通过对心电信号的特征分析,提出了基于MATLAB/SIMULINK的心电信号仿真方法,采用快速原型技术通过输入/输出卡,将虚拟仿真信号转化生成实际的物理电信号,并与实际硬件电路连接起来,构成心电信号的半实物仿真模型。   基本原理   心电信号   一个典型的心电信号如图1示,它由P波、Q波、R波、S波和T波组成,在诊断过程中可以根据这些特征波的间隔幅值以及P-R间隔、S-T间隔
[医疗电子]
基于<font color='red'>MATLAB</font>/S<font color='red'>IMU</font>LINK的心电信号源系统设计
PC机与单片机之间的串口通信程序的设计与实现
  1.引言   在众多集成可视化开发环境中,VisualC++是编程环境的最佳选择,VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种是MFC方式,传统的WIN API方式比较繁琐,而MFC是对WIN API再次封装,MFC相对于WIN API开发更具备效率优势,开发者只要在局部做简单地修改,即可处理大部分窗口事物。MFC封装了200多个类并且提供了友好的界面环境,具有类管理灵活方便、代码编写和界面设计集成交互操作、可移植性强等优点,与各种数学手段和数据处理、分析算法相结合还可以实现海量数据分析,智能、快速、灵活数据处理,使便携现场检测仪器功能强,灵活度高,速度快,扩展性好。   串口通信具有连续简单、使
[单片机]
PC机与单片机之间的<font color='red'>串口通信</font>程序的设计与实现
USB串口通信产品的发展
本文首先简单回顾了国内USB产品开发的历史,然后详细介绍了以波仕电子产品为代表的四代USB串口通信产品的性能及特点,第一代是USB/RS-232转换器,第二代是USB/RS-485/RS-422转换器,第三代是光电隔离的USB/ RS-232/485/422通用转换器,第四代是USB/串口光纤转换器。最后文章对USB虚拟的串口与传统串口的差别进行了评论。 关键词:USB 串口通信 RS-232 RS-485 目前计算机的USB接口已经大量使用,一般每台计算机都有2到4个USB口。USB口已经开始逐步取代传统的PS/2鼠标口、PS/2键盘口、CENTRONICS打印口、RS-232串口等。USB将是未来重要的PC机工业通信接口之一,
[嵌入式]
TQ210_裸机编程(三)——串口通信
由于我们所使用的TQ210板的L0部分已经写死 ,而且L0部分有时钟的初始化, 所以我们现在做串口通信 ,就不用再初始化时钟了。我们将会直接把程序放在SRAM里运行。 S5PV210 包含 4 个异步收发器(UART),提供 4 个独立的异步串行输入/输出(I/O)端口。所有端口可工作于中断模式或 DMA 模式。提供高达 3Mbps的位速率。每个 UART 包含 2 个 FIFO 用于接收和发送数据。具有可编程的波特率、红外收发、1 位或 2 位停止位、5~8 位数据位、校验。 数据发送:要发送的数据帧是可编程的。它包含 1 位起始位,5~8 位数据位,1 个可选校验位,1或2位停止位,这些都通过ULCONn寄存器来设置
[单片机]
TQ210_裸机编程(三)——<font color='red'>串口通信</font>
一种基于d-q变换的谐波电流检测方法
0 引言   目前,谐波抑制的一个重要趋势是采用有源电力滤波器(Active Power Filter—APF)。而该滤波器性能的好坏与它所采用的谐波电流检测方法有很大关系。因此,如何实时准确地检测出非线性负载电流中的谐波及无功电流是有源电力滤波器(APF)的关键技术。瞬时功率理论是最适合有源电力滤波器对谐波进行实时检测的方法,目前基本上采用低通滤波器滤波(LPF)方式得出基波电流分量,然后与被检测电流相减,最终得出谐波电流分量。本文则给出另一种方法,即直接使用高通滤波器(HPF)来得到谐波电流分量,而不再需要与被检测电流相减,从而使检测装置得到进一步简化。 1 基本原理   以三相电路瞬时无功功率理论为基础,采用同步旋转park
[测试测量]
一种基于d-q变换的谐波电流检测方法
基于嵌入式图形系统μc/GUI的应用研究
在任何一款嵌入式操作系统中都需要定时器的心脏跳动作用,支持OS的μc/GUI可以通过定时器的设置达到嵌入式操作系统和图形系统的实时和同步操作。在GUI_X_uCos.c中通过μc/os中的延时程序同μc/GUI挂接实现整合。 图2 μc/GUI软件结构图 (5) 经过移植之后,GUI应用程序开发通过μc/GUI而变得非常容易,在调用GUI_Init()后,用户可以根据需要正确配制μc/GUI后,可使用其强大的库函数和丰富的GUI资源进行编程。在GUI编程过程中,可以打开抗锯齿功能减小图形失真,得到高质量的图形和字体效果。采用内存设备能有效克服闪烁现象,获得更快的显示速度,但它和抗锯齿功能一样需要额外的内
[应用]
ZLG发布开源GUI引擎AWTK
AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎,并支持跨平台同步开发,一次编程,终生使用。 主要特色: 开源免费,使用无拘束; 支持纯 C 语言编程,使用无门槛; 支持跨多种操作系统,甚至是无操作系统平台,同步开发调试,使用无界限; 小巧高效,最小仅需 8K RAM+32K FLASH,可运行在 Cortex-M3 等小资源平台; 拥有完善的动画系统,半透明填充和贴图,支持硬件加速,轻松做出炫酷流畅的界面效果; 丰富的 GUI 控件,提供窗口、对话框
[物联网]
ZLG发布开源<font color='red'>GUI</font>引擎AWTK
msp432快速入门第十三节之串口通信
(一)MSP432串口介绍   MSP432P401R并没有专用的串口设备,要使用EUSC模块配置成UART模式,串口通信非常便捷易用,它在嵌入式设备中是最为常见的一种接口,在这里我们把MSP432的串口配置成8in1的模式,8位数据,1位停止位,没有流控选择,波特率为9600,发送方式是直接发送,接收方式是中断接收。 需要注意的是仅仅有EUSCA支持被配置成串口模式。 (二)配置串口   首先打开TI的串口回环(call back)例程,然后参照其进行配置,之后进行测试即可: (1)初始化串口 需要注意的是串口时钟选择了SMCLK,之前的例子中SMCLK已经被配置成12MHz,那么我们需要获取特定波特率的分频数等等,
[单片机]
msp432快速入门第十三节之<font color='red'>串口通信</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved