Matlab上位机系列(五):串口通信开发

1. Matlab串口通信

Matlab提供了串口通信的功能,串口通信的流程如下:

1.1. 创建串口对象

创建一个串口对象的API如下:


scom = serial('<串口号>');

串口号为COM8的形式,这个API有个缺点:不能自动检测目前电脑中存在中的串口。

创建之后设置该串口对象的属性:

  • InputBufferSize:输入缓冲区大小(单位字节)
  • OutputBufferSize:输出缓冲区大小(单位字节)
  • ReadAsyncMode:数据读取模式
  • BaudRate:波特率
  • Parity:校验位
  • StopBits:停止位
  • DataBits :数据位
  • Terminator:触发中断的字符(一般是换行符)
  • FlowControl:流控
  • timeout:一次操作超时时间
  • BytesAvailableFcnMode:设置数据读入格式
  • BytesAvailableFcnCount:触发中断的数据数量
  • BytesAvailableFcn:串口接收中断回调函数

常用设置如下:


scom.InputBufferSize =512;
scom.OutputBufferSize =512;
scom.ReadAsyncMode='continuous';
scom.BaudRate =115200;
scom.Parity ='none';
scom.StopBits =1;
scom.DataBits =8;
scom.Terminator ='CR';
scom.FlowControl ='none';
scom.timeout =1;
scom.BytesAvailableFcnMode = 'byte';
scom.BytesAvailableFcnCount = 1024;
scom.BytesAvailableFcn = @callback;

1.2. 打开串口

打开串口的API为:


fopen(scom);

打开串口可能会发生异常,所以此函数建议放在try..catch..end中执行:


try
	fopen(scom);
catch
	<捕获到异常时需要打印或者显示的信息>
end

1.3. 写入数据

向串口写入数据的API有两个:


fwrite(scom,A); % 以二进制形式向串口对象写入数据A
fprintf(scom,str); %以字符(ASCII码)形式向串口写数据str(字符或字符串)

如果BytesAvailableFcnMode设置的为byte,则使用 fwrite 。

1.4. 读取数据

从串口读取数据的API也有两个:


A = fread(scom,size); %从串口对象中读取size字节长短的二进制数据,以数组形式存于A
str = fscanf(scom); %从串口对象中读取字符或字符串(ASCII码)形式数据,以字符数组形式存于str

如果BytesAvailableFcnMode设置的为byte,则使用 fread。

1.5. 关闭串口

在不使用串口或者关闭界面之前,必须要关闭串口,否则下次将无法打开该串口:


close(scom)

2. 串口中断

上面讲述了使用fread手动读取数据的方式,但是实际应用中,需要使用串口中断自动接收并处理数据。

2.1. 触发中断的条件

触发串口Bytes available事件有两种条件:

  • 当接收到的字符数达到指定的数目时(BytesAvailableFcnCount 属性);
  • 当接收到指定字符时(Terminator 属性);

2.2. 串口中断处理回调函数

在上一节设置属性的最后有这样一行代码:


scom.BytesAvailableFcn = @callback;

这行代码就是设置串口中断处理回调函数,如果是纯m文件可以这样设置,但是在GUI界面中还要传入handles调用控件,如下:


scom.BytesAvailableFcn = {@calllback,handles};

这里我设置的函数名为callbcak,回调函数自己实现即可:


function callback(s,event,handles)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空