matlab串口学习

用matlab编写串口程序了。

函数serial语法:

	s = serial('port');
	s = serial('port', Name,Value) %使用指定的属性名称和属性值创建一个串行端口对象。

serial 函数需要一个与你设备相连的串口号作为输入,另外你可以在创建对象的时候配置属性。
上面的语句创建了一个与“port”指定的串行端口关联的串行端口对象。如果’port’不存在,或者它在使用中,你不能连接到设备。'port’对象的名字取决于串口所在的平台。

seriallist函数可以返回系统中所有串口的列表。该列表包括USB到串行设备和蓝牙串行端口配置文件设备提供的虚拟串行端口,这提供了您可以在计算机上访问的串行端口列表,可用于串行端口通信。

注意:第一次尝试使用s = serial(‘port’)调用访问MATLAB中的串行端口时,请确保该端口是空闲的,并且尚未在任何其他应用程序中打开。如果端口在另一个应用程序中打开,则MATLAB无法访问它。在MATLAB中访问后,您可以在其他应用程序中打开相同的端口,MATLAB将继续使用它以及任何其它应用程序打开它。

一旦串行端口对象被创建了,将自动为以下属性分配值。这些通用属性根据对象类型和串行端口提供有关串行端口对象的描述性信息。

在这里插入图片描述
在对象创建时配置属性

你可以在串口对象被创建时配置其属性。serial包括了属性名和属性值,和set函数差不多。如:s = serial('port','BaudRate',4800,'Parity','even');

如果指定无效的属性名称,则不会创建该对象。然而,如果你为某些属性制定了无效值,对象仍然可能被创建,而且在使用fopen函数将对象连接到设备之前,不会通知您无效值。

上面是创建一个串行端口对象。

名称-值对组参数

‘BaudRate’ - 位传输速率
9600 (默认) | 双精度值

%这个参数代表了通信协议中多长时间传一个点

‘ByteOrder’ - 设备的字节顺序
littleEndian (默认) | bigEndian

%设备的字节顺序,以逗号分隔的对组形式指定,其中包含 ‘ByteOrder’ 以及 littleEndian 或 bigEndian。如果 ByteOrder 是 littleEndian,则设备将第一个字节存储在第一个内存地址中。如果 ByteOrder 是 bigEndian,则设备将最后一个字节存储在第一个内存地址中。
例如,假设十六进制值 4F52 将存储在设备内存中。因为该值由两个字节 4F 和 52 组成,所以使用两个内存位置。使用 big-endian 格式时,4F 首先存储在较低的存储地址中。使用 little-endian 格式时,52 首先存储在较低的存储地址中。
littleEndian 的字节顺序是默认值,如果未指定属性,则在读取和写入操作中使用该默认值。您只需指定属性即可将字节顺序更改为 bigEndian。
使用以下语法创建串行对象后,还可以设置 ByteOrder 属性:s.ByteOrder = ‘bigEndian’;

‘DataBits’ - 要传输的数据位数
8 (默认) | 5 | 6 | 7

%要传输的数据位数,指定为以逗号分隔的对组,其中包括 ‘DataBits’ 和 5、6、7 或 8,这是默认设置。数据以包含五、六、七或八个位的一个系列进行传输,最低有效位先发送。传输 ASCII 字符至少需要 7 个数据位。传输二进制数据需要 8 个位。五位和六位数据格式用于专用通信设备。

除数据位外,串行数据格式还包括一个开始位、一个或两个停止位以及可能存在的一个奇偶校验位。使用 StopBits 属性指定停止位数,并使用 Parity 属性指定奇偶校验检查的类型。
使用以下语法创建串行对象后,还可以设置 DataBits 属性:s.DataBits = 7;

‘Parity’ - 奇偶校验检查的类型
none (默认) | 奇数 | 偶数 | 传号 | 空格

%奇偶校验检查的类型,以逗号分隔的对组形式指定,其中包含 ‘Parity’ 以及 none、odd、even、mark 或 space。

‘StopBits’ - 用于指示字节结尾的位数
1 (默认) | 1.5 | 2

%用于指示字节结束的位数,以逗号分隔的对组形式指定,包括 ‘StopBits’ 和 1、1.5 或 2。如果 StopBits 是 1,则使用一个停止位来指示数据传输的结束。如果 StopBits 是 2,则使用两个停止位来指示数据传输的结束。如果 StopBits 是 1.5,则传输停止位的时间是正常传输一个位所需时间的 150%。

‘Terminator’ - 终止符字符
字符串

%终止符字符,指定为逗号分隔的对组,其中包含 ‘Terminator’ 和一个字符串。可以将 Terminator 配置为 0 到 127 之间的整数值,表示字符的 ASCII 代码,也可以将 Terminator 配置为 ASCII 字符。例如,要将 Terminator 配置为回车符,请将值指定为 CR 或 13。要将 Terminator 配置为换行符,请将值指定为 LF 或 10。也可以将 Terminator 设置为 CR/LF 或 LF/CR。如果 Terminator 是 CR/LF,则终止符是回车符后跟换行符。如果 Terminator 是 LF/CR,则终止符是换行符后跟回车符。请注意,这两个值没有对应的整数值。
此外,还可以将 Terminator 设置为 1×2 元胞数组。元胞的第一个元素是读取终止符,第二个元素是写入终止符。
使用 fprintf 函数执行写入操作时,出现的所有 \n 都将替换为 Terminator 属性值。请注意,%s\n 是 fprintf 的默认格式。使用 fgetl、fgets 或 fscanf 的读取操作在读取到 Terminator 值时即结束。二进制操作将忽略终止符。
当 BytesAvailableFcnMode 设置为 terminator 时,您还可以使用终止符生成字节可用事件。
使用以下语法创建串行对象后,还可以设置 Terminator 属性:s.Terminator = ‘CR’;

串口通信是最常见的低级别协议通信,用matlab与设备通信最先的工作就是创建一个串行端口对象,上面的内容教会了我们如何创建串口对象,那创建完之后呢?上述提到的属性值对于数据传输的影响是什么呢?

那么我们有必要了解一下在写入或者读取之前,串行端口对象是如何与设备之间沟通的。串行通信协议是啥呢?

串行通信:是指数据的各位在同一根数据线上逐位发送和接收。

其又分为同步和异步通信。

我主要接触到的是异步串行通信,所以只查找了异步的信息。

异步串行通信方式:是指通信双方以一个自读(包括特定附加位)作为数据传输单位且发送方传送字符的间隔时间是不定的,具有不规则数据段传输特性。

起始位:在没有数据传送时(空闲状态),此时通信线上为逻辑“1”。当发送端要发送一个数据时,首先发送一个逻辑“0”,这个低电平就是帧格式的起始位。作用是告诉接收端要开始发送一帧数据。接收端检测到这个低电平之后,就准备接收数据信号。

数据位:在起始位之后,发送端发出的就是数据位,数据位的位数没有严格限制(5-8位都可以)。低位在前,高位在后。由低位向高位逐位发送。

校验位:数据位发送完成之后,可以发送以为用来校验数据在传送过程中是否出错。校验位是收发双方预先约定好的有限制差错检验的方式之一(可用可不用)。

停止位:字符帧格式的最后部分是停止位,逻辑“1”有效,它的占位有1/2位、1位或者2位。停止位表示传送一帧信息的结束,也作为发送下一帧数据信息做准备。

所以上面创建serial对象时的属性值就是设定这些了,我们知道了目标机协议的信息之后就可以设定主机的值,就可以完成通信了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值