Matlab上位机开发(五)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)

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。

发布了271 篇原创文章 · 获赞 731 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/105102962
今日推荐