认识MATLAB 串口
串口对象的属性
使用Serial函数为指定串口创建一个串口对象。调用格式为:
obj = serial('port');
采用默认属性,创建一个与指定串口相关联的串口对象,并返回该串口对象的句柄。若串口port不存在或正在使用,该串口对象将不能与串口设备连接。
obj = serial('port','P1',V1,'P2',V2,...);
创建一个属性对为P1/V1和P2/V2的串口对象,其他属性采用默认值,端口名由port指定,并返回该串口对象的句柄。若串口port不存在或正在使用,该串口对象将不能与串口设备连接。
串口属性
查看串口属性命令:instrhelp serial
串口属性:
- BaudRate:数据位传输的速率;如9600,115200等;
- DataBIts:指定传输数据的位数,可取5,6,7或8,默认为8.
- Parity:奇偶校验位。奇偶校验只能检查一次错误。可配置串口的奇偶校验属性为none、odd、even、mark或space。
- StopBits:停止位的位数,取值可为1、1.5或2,默认为1。
- Terminator:指定结束符,取值为0~127之间的整数,或等价的ASCII字符。
以上5个串口的通讯属性。下面简介与读写操作相关的属性:
-
InputBufferSize:输入缓冲区的大小;
-
OutputBufferSIze:输出缓冲区的大小。
这两个属性仅当串口对象与设备断开时才能配置,一旦串口对象连接到设备,他们只能只读。 -
BytesAvailable:表示输入缓冲区可获得的字节数;
-
BytesToOutput:表述输出缓冲区的字节数。
这两个值默认都是0,最大值分别为输入缓冲区、输出缓冲区的大小。 -
ReadAsyncMode:指定异步读模式为连续(continuous)或手动(manual),默认为连续模式。连续模式时,串口对象连续地向设备请求数据,一旦有数据可获得,他会自动读取并存入输入缓冲区,而readasync函数会自动忽略;手动模式时,串口对象不向设备请求数据,此时必须使用readasync函数执行异步读操作。建议选择连续模式!
-
Timeout:完成一次读写操作最大等待时间,默认为10s。若读写超时,读写操作将终止。若超时发生在异步读写期间,将产生一个error事件,并执行ErrorFcn属性指定的回调函数。
-
TransferStatus:只读,只是读写操作是否在进程中。
下面几个属性为与回调函数相关的属性:
-
BytesAvailableFcn、BytesAvailableFcnCount、BytesAvailableFcnMode和Terminator:
当BytesAvailableFcnMode为***terminator***时,若读取到Terminator属性指定的终止符,则产生bytes-available事件,并执行回调函数BytesAvailableFcn;
当BytesAvailableFcnMode为***byte***时,若读取到BytesAvailableFcnCoun属性指定的字节数时,则产生bytes-available事件,并执行回调函数BytesAvailableFcn。 -
BreakInterruptFcn:break-interrupt事件产生时执行的回调函数。
-
ErrorFcn:error事件产生时执行的回调函数。
-
OutputEmptyFcn:output-empty事件产生时执行的回调函数。
-
TimerFcn和TimePeriod:每隔TimerPeriod指定的时段,产生一个timer事件,并执行回调函数TimerFcn。
**
串口的基本操作
**
操作步骤:
- 创建串口对象并配置串口属性
在创建一个串口对象的同时,下列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');
- 连接串口对象与外围设备
用fopen函数打开串口,连接串口对象到外围设备。
fopen(scom);
串口读写数据前,必须使用fopen函数连接到串口设备。当串口对象连接到设备时:当串口对象连接到设备时:
(1)输入缓冲区和输出缓冲区的数据将清空;
(2)Status属性设置为open。
(3)BytesAvailable、ValuesReceived、ValuesSent和BytesToOutput属性设置为0。
-
串口读写数据
用fprintf或fwrite函数写数据到设备中,用fgetl、fgets、fread、fscanf或readasync函数从设备读数据到串口。 -
断开串口连接和清除串口对象
当不再使用串口对象时,应该首先使用fclose函数断开它与设备的连接。
fclose(scom);
检查串口对象是否与设备断开连接,可查看其Status属性:
scom.Stauts
然后使用delete函数将其从内存中清除,此时串口对象无效。要检查串口对象是否有效,使用isvalid函数。
delete(scom);
isvalid(scom);
最后可使用clear函数从MATLAB工作空间将其删除。
实例
根据上述原理,设计了简单的串口数据接收测试程序,界面如下所示。
完整的资源见:
MATLAB GUI 串口数据接收