Matlab提供了对串口进行 打开关闭、以及 串口参数设置等操作的一系列 函数。利用这些函数可以选择串口号、 设置串口通信参数( 波特率、 数据位、停止位、 校验位等)、进行中断控制、流控制。从建立串口通信到结束串口通信的完整流程包括以下几个步骤:
1、创建串口对象,实现该功能的函数为:
      obj=serial(port,'PropertyName',PropertyValue,....);
    例如:obj= serial(com3,'BaudRate'4800)
    或使用以下默认设置,创建串口对象,在命令串口输入以下代码,第二句是查看其 obj默认状态
      obj = serial('com3');  
      obj
    其中有两个重要设置项
      BaudRate:           9600    % 波特率默认9600
      Terminator:         'LF'      %串口触发字符“换行符”
2、设置或者修改串口通信参数,实现该功能的函数为:
      set(obj,'PropertyName',PropertyValue,);
    例如:set(obj,'BaudRate'4800);
    这样,我们就发现串口的一些基本设置, 可以在创建串口时设置, 也可以创建串口之后再进行设置。
3、打开串口,实现该功能的函数为:
      fopen(obj);
    obj即为前边创建的串口对象。
    其中,步骤 2和3顺序是完全可以颠倒的
4、从串口读写数据,在前面三个步骤正常完成后, 即可以从串口读数据或者向串口写数据, 也就是接
    收或者发送数据。
    这里我介绍几个常用函数,读函数:fread,fscanf;写函数: fwrite, fprintf.
      A = fread(obj,size);   %从串口obj读取size字节长短的二进制数据,以数组形式存于A
      str = fscanf(obj);       %从串口obj读取字符或字符串(ASCII码)形式数据,以字符数组形式存于str
      fwrite(obj,A);             % 以二进制形式向obj写入数据A
      fprintf( obj,str);         %以字符(ASCII码)形式向串口写数据str(字符或字符串)
5、关闭串口以及释放串口对象占用的存储空间。
        fclose(obj);            % 关闭串口
        delete(obj);           % 释放串口对象占用的内存空间,
        clear obj;              % 释放串口对象在Matlab工作区中占用的存储空间
    下一篇讲解着几个函数在实际的应用及不足。

实例1:在51单片机下载串口代码后,在matlab上执行如下代码:
       sr3 = serial('COM3');       % 使用默认设置创建串口sr3fopen(sr3);                 %打开串口fprintf(sr3,'xxx');         % 给串口写入数据str = fscanf(sr3)           %读取串口数据(无分号,可在Matlab工作区实时查看)fclose(sr3);                %关闭串口delete(sr3);clear sr3;

串口中断设置及中断处理函数
要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作; 在串口输出缓存为空的时候, 通知启动串口数据发送函数。
1、触发串口中断的方式
  Matlab检测到串口通信事件,从而触发串口中断。串口读写的事件包括: Bytes available,Outputempty。其中 Bytes available事件有两种: 一种是接收到的字符数达到人工设定的数目时,则系统产生该事件; 另一种是当接收到指定字符时, 系统产生该事件。 Output empty事件是在系统检测到输出缓存区为空时, 产生该事件。
2、中断方式设置
  Bytes available 事件
      set(obj,'BytesAvailableFcnMode','byte'); 
      set(obj,'BytesAvailableFcnCount', 240);              % 串口检测到输入缓存中到达了240个字符数据时,触发串口中断。或 :
      set(obj,'BytesAvailableFcnMode','terminator');
      set(obj,'terminator','H');                                       %当 串口检测到字符H时,则触发串口中断
  Output empty事件
      输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。
3、串口中断处理函数
    串口中断处理函数是 重点中的重点,我查阅过一些文档,串口通信时接收数据一般分两种方式,一种是查询方式,一种是中断处理方式,了解处理器工作的人知道,使用 查询方式需不断查询,耗用内存,效率十分低。所以实际通信过程中都使用中断方式,这就需要设置中断触发方式,中断处理函数。
      很多参考文档都是使用matlab自带回调函数,再添加自己的代码,在最开始我也尝试这种方法,但发现实在太麻烦,还是选择自己写,其实很简单,只要注意几个细节问题,就能得到正常运行的函数。
      串口中断处理函数定义:
obj. BytesAvailableFcn=@ReceiveCallback;
      再自行编写中断处理函数。

实例2:51单片机端依然使用串口代码,matlab执行如下函数:
function SerialFuc()        % 创建函数delete(instrfindall)      % 关闭串口,此句十分重要,下篇再详细解释global s;                 % 全局变量,供串口中断函数使用s = serial('com3');       %使用默认设置创建串口sfopen(s);                 %打开串口set(s,'BytesAvailableFcnMode','Terminator'); %设置中断触发方式set(s,'Terminator','H');s.BytesAvailableFcn =@ReceiveCallback;       % 定义中断响应函数对象for k=1:1:5               % 每两秒发送字符串,循环五次fprintf(s,'ChunyuY19');pause(2);end
end
functionReceiveCallback( obj,event)     %创建中断响应函数global s;a = fscanf(s)       % 接收数据并显示(无分号)I = 'I received'    % 检验是否中断响应函数正常被触发(无分号)
end

以上代码均已实测,51单片机代码查看如下链接: 51单片机串口通信代码
文章意在实现matlab与单片机之间的基本通信,串口函数简单,容易理解。

如有错误,诚望留言指正或ycy_xd19@sina.com

Matlab与单片机的串口通信-matlab…相关推荐

  1. MATLAB与51单片机进行串口通信详解

    目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...

  2. matlab gul介绍及串口通信实现,Matlab - GUl介绍及串口通信实现(转)

    新建Blank GUI. 在新建Blank GUI界面中,包含了一般的界面元素,如菜单.按钮.坐标轴.控件等.添加必要的串口通信参数设置按钮. 2 串口数据发送与接收功能实现 2.1 建立串口通信流程 ...

  3. labVIEW与单片机实现串口通信的设计过程

    1.概述 在现代测控系统中,我们经常会采用上位机和下位机的开发控制模式.下位机主要是用来采集数据,可以通过嵌入式控制器.单片机控制器.PLC等来实现.上位机主要是图形界面,用来实时显示采集数据,并进行 ...

  4. arm linux串口控制led,通信程序设计 - Linux下ARM和单片机的串口通信设计

    3 通信程序设计 ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序.在通信之前必须制定合理的通信协议以保证通信的可靠性 ...

  5. 51单片机stc15w204s串口通信发数据接收数据串口中断发中文字符串完美运行软件延时发送一字节函数全注释

    这里写自定义目录标题 KEIL自己先调试通了然后再说下面的事 51单片机stc15w204s串口通信直接上文件 KEIL自己先调试通了然后再说下面的自己看看就可 KEIL自己先调试通了然后再说下面的事 ...

  6. 51单片机之串口通信

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.串口介绍 二.电路 三.寄存器 四.串口通信操作流程 前言 2022.9.14的学习记录.` 一.串口介绍 串口是 ...

  7. 22.从零开始开发QT软件思路(单片机的串口通信)-- OpenCV从零开始到图像(人脸 + 物体)识别系列

    本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 链接:https://mp.weixin.qq.com/s?__biz=MzU1MTgxNjQyMg==&temp ...

  8. Labview与单片机进行串口通信

    Labview与单片机进行串口通信 做毕业设计时,遇到需要使用Labview作上位机与单片机进行串口通信的情况,在这里与大家分享开发的过程. 一.简介 这里使用基于Labview设计的程序作为上位机, ...

  9. Proteus仿真stm32和51单片机,串口通信调试过程记录

    前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法.        这里要注意的是,在Proteus中 ...

最新文章

  1. H3C ER5200配置***参考
  2. idea findbugs使用_「测试」 - 静态测试 amp; FindBugs
  3. springCloud的注册中心Eureka和Zookeper的区别
  4. 【LeetCode笔记】1. 两数之和(JAVA、哈希表)
  5. Vue.js自定义指令的用法与实例
  6. python--strip()用法-split()方法
  7. Movie Studio插入的素材支持什么格式?
  8. 大学生自学微信小程序云开发教程
  9. 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好
  10. 用互联网大脑模型分析滴滴的战略意图和战术失误
  11. [补集转化 有序化去重] Ural 1212 Battleship
  12. 【阅读摘要】第6章 电子元器件与组件的热设计
  13. 背景差分法《python图像处理篇》
  14. Android车机初体验
  15. sql查询数据库表中重复数值
  16. java毕业设计大连环保公益网Mybatis+系统+数据库+调试部署
  17. 达尔优键盘Mac Command-c和Command-v复制粘贴快捷键失效问题解决方案
  18. 使用elementUI中的date-picker组件年月日显示英文
  19. EMC规划BRS产品线 推动私有云建设
  20. 服务器开机显示其他用户,电脑开机后总是提示可能需要其他登录信息如何取消...

热门文章

  1. 设置组件为圆角的方法
  2. GDB backtrace bt 查看程序crash堆栈信息
  3. 纯java手机通讯录
  4. java编程——吸血鬼数字(四位)
  5. 阅读分享:A Frustratingly Easy Approach for Entity and Relation Extraction-NAACL2021
  6. 4路差分编码器脉冲计数器,转速测量,Modbus RTU模块 WJ67
  7. 【二】数据结构之List
  8. 太阳高度角计算题_太阳高度角的计算与应用答题.ppt
  9. 软件系统测试方法有哪些?
  10. 浅谈用户体验与界面设计