基于MATLAB GUI的上位机软件设计学习---串口数据接收

认识MATLAB 串口

串口对象的属性
使用Serial函数为指定串口创建一个串口对象。调用格式为:

obj = serial('port');

采用默认属性,创建一个与指定串口相关联的串口对象,并返回该串口对象的句柄。若串口port不存在或正在使用,该串口对象将不能与串口设备连接。

obj = serial('port','P1',V1,'P2',V2,...);

创建一个属性对为P1/V1和P2/V2的串口对象,其他属性采用默认值,端口名由port指定,并返回该串口对象的句柄。若串口port不存在或正在使用,该串口对象将不能与串口设备连接。
串口属性
查看串口属性命令:instrhelp serial
串口属性:

  1. BaudRate:数据位传输的速率;如9600,115200等;
  2. DataBIts:指定传输数据的位数,可取5,6,7或8,默认为8.
  3. Parity:奇偶校验位。奇偶校验只能检查一次错误。可配置串口的奇偶校验属性为none、odd、even、mark或space。
  4. StopBits:停止位的位数,取值可为1、1.5或2,默认为1。
  5. Terminator:指定结束符,取值为0~127之间的整数,或等价的ASCII字符。

以上5个串口的通讯属性。下面简介与读写操作相关的属性:

  1. InputBufferSize:输入缓冲区的大小;

  2. OutputBufferSIze:输出缓冲区的大小。
    这两个属性仅当串口对象与设备断开时才能配置,一旦串口对象连接到设备,他们只能只读。

  3. BytesAvailable:表示输入缓冲区可获得的字节数;

  4. BytesToOutput:表述输出缓冲区的字节数。
    这两个值默认都是0,最大值分别为输入缓冲区、输出缓冲区的大小。

  5. ReadAsyncMode:指定异步读模式为连续(continuous)或手动(manual),默认为连续模式。连续模式时,串口对象连续地向设备请求数据,一旦有数据可获得,他会自动读取并存入输入缓冲区,而readasync函数会自动忽略;手动模式时,串口对象不向设备请求数据,此时必须使用readasync函数执行异步读操作。建议选择连续模式!

  6. Timeout:完成一次读写操作最大等待时间,默认为10s。若读写超时,读写操作将终止。若超时发生在异步读写期间,将产生一个error事件,并执行ErrorFcn属性指定的回调函数。

  7. TransferStatus:只读,只是读写操作是否在进程中。

下面几个属性为与回调函数相关的属性:

  1. BytesAvailableFcn、BytesAvailableFcnCount、BytesAvailableFcnMode和Terminator:
    当BytesAvailableFcnMode为***terminator***时,若读取到Terminator属性指定的终止符,则产生bytes-available事件,并执行回调函数BytesAvailableFcn;
    当BytesAvailableFcnMode为***byte***时,若读取到BytesAvailableFcnCoun属性指定的字节数时,则产生bytes-available事件,并执行回调函数BytesAvailableFcn。

  2. BreakInterruptFcn:break-interrupt事件产生时执行的回调函数。

  3. ErrorFcn:error事件产生时执行的回调函数。

  4. OutputEmptyFcn:output-empty事件产生时执行的回调函数。

  5. TimerFcn和TimePeriod:每隔TimerPeriod指定的时段,产生一个timer事件,并执行回调函数TimerFcn。

**

串口的基本操作

**
操作步骤:

  1. 创建串口对象并配置串口属性
    在创建一个串口对象的同时,下列3个属性会自动配置:
    (1)Type为serial
    (2)Name由Serial和打开的端口port决定
    (3)Port为打开的端口名,一般为大写如COM1.
    在创建串口对象时可以配置其属性,如波特率、数据位、停止位等;
    e.g.
scom=serial('COM1','Parity','even','BaudRate','115200');

也可以使用set函数配置串口属性或点标记(.)标记来设置其属性值

set(scom,'BaudRate',Baud_rates,'Parity',jiaoyan,'DataBits',...
         data_bits,'StopBits',stop_bits,'BytesAvailableFcnCount',10,...
         'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...
         'timeout',0.05,'timerfcn',{@dataDisp,handles});
scom.Baud_rates = 115200
set(scom,'Port','COM1');
  1. 连接串口对象与外围设备
    用fopen函数打开串口,连接串口对象到外围设备。
fopen(scom);

串口读写数据前,必须使用fopen函数连接到串口设备。当串口对象连接到设备时:当串口对象连接到设备时:
(1)输入缓冲区和输出缓冲区的数据将清空;
(2)Status属性设置为open。
(3)BytesAvailable、ValuesReceived、ValuesSent和BytesToOutput属性设置为0。

  1. 串口读写数据
    用fprintf或fwrite函数写数据到设备中,用fgetl、fgets、fread、fscanf或readasync函数从设备读数据到串口。

  2. 断开串口连接和清除串口对象
    当不再使用串口对象时,应该首先使用fclose函数断开它与设备的连接。

fclose(scom);

检查串口对象是否与设备断开连接,可查看其Status属性:

scom.Stauts

然后使用delete函数将其从内存中清除,此时串口对象无效。要检查串口对象是否有效,使用isvalid函数。

delete(scom);
isvalid(scom);

最后可使用clear函数从MATLAB工作空间将其删除。

实例

根据上述原理,设计了简单的串口数据接收测试程序,界面如下所示。
在这里插入图片描述
完整的资源见:
MATLAB GUI 串口数据接收

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值