本文具体介绍app设计的过程,该app接收的数据格式是16位整形数,分byte以字符方式打印。打印U16变量var,打印格式为

printf("%c%c\n",U8(var>>8),U8(var));

app设计如下


文章目录

  • 1. 选择串口
  • 2. 选择波特率
  • 3. 串口状态控制


1. 选择串口

使用下拉框控件




android 串口测试demo Android 串口测试APP功能_mlapp



android 串口测试demo Android 串口测试APP功能_R2016a_02


也可以选中控件后,通过右下角的属性修改。这里我们修改一下控件的name “DropDown”,修改为“COM”

android 串口测试demo Android 串口测试APP功能_mlapp_03


这里可以添加多个串口,如“COM2,COM3…… ”,也可以通过读取电脑识别到的串口,赋值给app.COM.Items

try
	 fclose(instrfind);
  catch          
  end           
  Ports = instrhwinfo('serial');           
  app.COM.Items=flipud(Ports.SerialPorts);%COM1一般为电脑自己的串口,这里把串口数从大到小排列赋值给COM

该段代码我们我们在启动函数startupFcn()中实现

android 串口测试demo Android 串口测试APP功能_Serial_04


startupFcn函数内可以添加其他初始化操作,当然你也可以把这些初始化封装起来。如下定义 函数COMInitialFun(),并在startupFcn()中调用

android 串口测试demo Android 串口测试APP功能_串口_05

2. 选择波特率

操作类似 选择串口同样使用下拉框控件,这里勾选了“允许用户键入文本”,防止可选波特率无法覆盖实际需求

android 串口测试demo Android 串口测试APP功能_android 串口测试demo_06

3. 串口状态控制

先在app属性中添加名为“SERIAL”的串口对象

android 串口测试demo Android 串口测试APP功能_串口_07


选用Button控件进行串口状态控制,将控件名改为“SerialSts”和标签修改为“Open”;选用TextArea控件监控串口状态,将控件名改为“SampleSts”

android 串口测试demo Android 串口测试APP功能_R2016a_08

右键Open 控件或者在右下的属性里增加回调函数SerialStsButtonPushed()

android 串口测试demo Android 串口测试APP功能_mlapp_09

回调函数SerialStsButtonPushed(app)

try           
 fclose(instrfind);            
catch            
end                             
if strcmp(app.SerialSts.Text,'Close')              
	 try                
	 	fclose(app.SERIAL);                
	 	app.SerialSts.Text='Open';                
	 	app.SampleSts.Value=[app.SampleSts.Value(2:end);['关闭',app.COM.Value,'成功']];                    
                      
	 catch                 
	 	app.SampleSts.Value=[app.SampleSts.Value(2:end);['关闭',app.COM.Value,'失败']];
	 	app.SerialSts.Text='Close';              
	 end             
 	delete(app.SERIAL);            
else                 
	  try                        
		   app.SERIAL=serial(app.COM.Value,'baudrate',str2num(app.Baud.Value));                    
		   app.SERIAL.BytesAvailableFcnCount = 3;                    
		   set(app.SERIAL,'BytesAvailableFcnMode','byte'); %设置中断触发方式terminator                   
		   set(app.SERIAL,'BytesAvailableFcn',{@app.ReceiveSerial});                       
		   fopen(app.SERIAL);                 %打开串口                      
		   app.SerialSts.Text='Close';     
		   app.SampleSts.Value=[app.SampleSts.Value(2:end);['打开',app.COM.Value,'成功']];                    
	   catch                     
		    app.SampleSts.Value=[app.SampleSts.Value(2:end);['打开',app.COM.Value,'失败']]; 
		    app.SerialSts.Text='Open';                   
		    fclose(app.SERIAL);                    
		    delete(app.SERIAL);                 
	   end                            
  end

定义串口中断函数ReceiveSerial,其中中断函数需要添加形参src和event

android 串口测试demo Android 串口测试APP功能_Serial_10

function ReceiveSerial(app,src,event)
	data = fread(app.SERIAL,3);                                    
	if data(3) == 10      %10——换行符对应的ASICII码                                
		dataPrint = data(1)*256+data(2);                    
		app.SampleSts.Value=[app.SampleSts.Value(2:end);num2str(dataPrint )];                                     
	else                
		app.WaitCount=app.WaitCount+1;                
		app.WaitCount=mod(app.WaitCount,100);                
		app.SampleSts.Value=[app.SampleSts.Value(2:end);['Waiting',num2str(app.WaitCount)]];                
		pause(1);       
	end
end

这里我们给app.SampleSts.Value进行初始化并在启动函数中调用,定义打印数据的长度,同时新增等待计数变量WaitCount,在初始化函数中初始化,

app.SampleSts.Value={'';'';'';'';'Initial'};
app.WaitCount=0;

android 串口测试demo Android 串口测试APP功能_Serial_11


源码在我的上传资源中SerialApp.mlapp