打印

MATLAB的串口通信

[复制链接]
2435|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2018-1-22 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gaoyang9992006 于 2018-1-22 22:00 编辑


串行端口设备
对连接到串行端口的设备进行读取和写入
MATLAB 函数
delete (serial)         从内存中删除串行端口对象
fclose (serial)         断开串行端口对象和设备之间的连接
fgetl (serial)         读取设备中的 ASCII 文本行并丢弃终止符
fgets (serial)         读取设备文本行并包含终止符
fopen (serial)         将串行端口对象连接到设备
fprintf (serial)         将文本写入设备
fread (serial)         从设备中读取二进制数据
fscanf (serial)         读取设备中的 ASCII 数据并将格式设置为文本
fwrite (serial)         将二进制数据写入设备
get (serial)        串行端口对象属性
isvalid (serial)        确定串行端口对象是否有效
readasync        从设备中异步读取数据
serial        创建串行端口对象
serialbreak        向连接到串行端口的设备发送中断
seriallist        连接到您的系统的串行端口列表
set (serial)        配置或显示串行端口对象属性
stopasync        停止异步读写操作
clear (serial)        从 MATLAB 工作区中删除串行端口对象
disp (serial)        串行端口对象摘要信息
instrcallback        事件发生时的事件信息
instrfind        将串行端口对象从内存读入到 MATLAB 工作区
instrfindall        查找可见和隐藏的串行端口对象
load (serial)        将串行端口对象和变量加载到 MATLAB 工作区中
length (serial)        Length of serial port object array
record        将数据和事件信息录制到文件中
save (serial)        将串行端口对象和变量保存到文件中
size (serial)        串行端口对象数组的大小

相关帖子

沙发
gaoyang9992006|  楼主 | 2018-1-22 22:00 | 只看该作者
属性
BaudRate        Specify the rate at which bits are transmitted
BreakInterruptFcn        Specify the callback function to execute when a break-interrupt event occurs
ByteOrder        Specify the byte order of the device
BytesAvailable        Number of bytes available in the input buffer
BytesAvailableFcn        Specify the callback function to execute when a specified number of bytes is available in the input buffer, or a terminator is read
BytesAvailableFcnCount        Specify the number of bytes that must be available in the input buffer to generate a bytes-available event
BytesAvailableFcnMode        Specify if the bytes-available event is generated after a specified number of bytes is available in the input buffer, or after a terminator is read
BytesToOutput        Number of bytes currently in the output buffer
DataBits        Number of data bits to transmit
DataTerminalReady        State of the DTR pin
ErrorFcn        Specify the callback function to execute when an error event occurs
FlowControl        Data flow control method to use
InputBufferSize        Size of the input buffer in bytes
Name        Descriptive name for the serial port object
ObjectVisibility        Control access to serial port object
OutputBufferSize        Size of the output buffer in bytes
OutputEmptyFcn        Specify the callback function to execute when the output buffer is empty
Parity        Specify the type of parity checking
PinStatus        State of the CD, CTS, DSR, and RI pins
PinStatusFcn        Specify the callback function to execute when the CD, CTS, DSR, or RI pins change state
Port        Specify the platform-specific serial port name
ReadAsyncMode        Specify whether an asynchronous read operation is continuous or manual
RecordDetail        Specify the amount of information saved to a record file
RecordMode        Specify whether data and event information are saved to one record file or to multiple record files
RecordName        Name of the record file
RecordStatus        Indicate if data and event information are saved to a record file
RequestToSend        State of the RTS pin
Status        Indicate if the serial port object is connected to the device
StopBits        Number of bits used to indicate the end of a byte
Tag        Label to associate with a serial port object
Terminator        Terminator character
Timeout        Waiting time to complete a read or write operation
TimerFcn        Specify the callback function to execute when a predefined period of time passes.
TimerPeriod        Period of time between timer events
TransferStatus        Indicate if an asynchronous read or write operation is in progress
Type        Object type
UserData        Data you want to associate with a serial port object
ValuesReceived        Total number of values read from the device
ValuesSent        Total number of values written to the device

使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2018-1-22 22:02 | 只看该作者
本帖最后由 gaoyang9992006 于 2018-1-22 22:03 编辑

serial
创建串行端口对象



语法
obj = serial('port')
obj = serial('port','PropertyName',PropertyValue,...)



说明
obj = serial('port') 创建一个与 port 指定的串行端口关联的串行端口对象。如果 port 不存在或已被占用,则无法将该串行端口对象连接到设备。
Port 对象名称将取决于该串行端口所在的平台。Instrument Control Toolbox™ 函数 instrhwinfo ('serial') 提供可用串行端口的列表。该列表是不同平台上的串行构造函数示例。

obj = serial('port','PropertyName',PropertyValue,...) 使用指定的属性名称和属性值创建一个串行端口对象。如果指定的属性名称或属性值无效,则返回错误并且不会创建串行端口对象。

示例
此示例创建与 Windows 平台上的串行端口 COM1 关联的串行端口对象 s1。
s1 = serial('COM1');
Type、Name 和 Port 属性将自动进行配置。
get(s1,{'Type','Name','Port'})ans =     'serial'    'Serial-COM1'    'COM1'
在创建对象期间指定属性
s2 = serial('COM2','BaudRate',1200,'DataBits',7);
提示
在创建串行端口对象时,将自动配置以下属性值:
  • Type 属性由 serial 给出。
  • Name 属性通过将 Serial 与 serial 函数中指定的端口串联而给出。
  • Port 属性由 serial 函数中指定的端口给出。


您可以使用 set 函数支持的任何格式指定属性名称和属性值。例如,您可以使用属性名称/属性值元胞数组对组。另外,您还可以指定属性名称而不考虑大小写,并且可以利用属性名称的自动填充功能。例如,以下命令在 Windows 平台上均有效。

s = serial('COM1','BaudRate',4800);
s = serial('COM1','baudrate',4800);


s = serial('COM1','BAUD',4800);

有关可用于 serial 的串行端口对象属性的列表,请参阅配置属性值
能够与设备通信之前,必须使用 fopen 函数将设备连接到 obj。已连接的串行端口对象的 open 属性值为 Status。如果尝试在该对象未连接到设备时执行读取或写入操作,将会返回错误。只能将一个串行端口对象连接到给定的串行端口。

使用特权

评论回复
地板
gaoyang9992006|  楼主 | 2018-1-22 22:04 | 只看该作者
fopen (serial)

将串行端口对象连接到设备
语法
fopen(obj)

说明
fopen(obj) 将串行端口对象 obj 连接到设备。

示例
以下示例创建串行端口对象 s,使用 fopen 将 s 连接到设备,写入和读取文本数据,然后将 s 与设备断开连接。以下示例可在 Windows® 平台上运行。

s = serial('COM1');
fopen(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fclose(s)
提示
执行读取或写入操作之前,必须使用 fopen 函数将 obj 连接到设备。当 obj 已连接到设备时:

将刷新仍位于输入缓冲区或输出缓冲区中的数据。
Status 属性设置为 open。
BytesAvailable、ValuesReceived、ValuesSent 和 BytesToOutput 属性设置为 0。
如果尝试在 obj 未连接到设备时执行读取或写入操作,将会返回错误。您只能将一个串行端口对象连接到给定设备。

某些属性在已打开(已连接)串行端口对象时处于只读状态,必须先配置这些属性,然后才能使用 fopen。例如 InputBufferSize 和 OutputBufferSize。请参阅属性参考页以确定哪些属性具有此约束。

某些属性的值只能在 obj 已连接到设备后进行验证。如果未正确配置这其中的任何属性,当发出 fopen 并且 obj 未连接到设备时,将会返回错误。此类型的属性包括 BaudRate,这些属性与设备设置相关联。

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2018-1-22 22:04 | 只看该作者
fprintf (serial)

将文本写入设备
语法
fprintf(obj,'cmd')
fprintf(obj,'format','cmd')
fprintf(obj,'cmd','mode')
fprintf(obj,'format','cmd','mode')

说明
fprintf(obj,'cmd') 将字符串 cmd 写入到已连接到串行端口对象 obj 的设备。默认格式为 %s\n。写入操作为同步操作,在执行完成之前会屏蔽命令行。

fprintf(obj,'format','cmd') 使用 format 指定的格式写入字符串。

fprintf(obj,'cmd','mode') 使用 mode 指定的命令行访问权限写入字符串。mode 指定是以同步方式还是异步方式写入 cmd。

fprintf(obj,'format','cmd','mode') 使用指定的格式写入字符串。format 是 C 语言转换设定。

执行读取或写入操作之前,需要建立一个从串行端口对象 obj 到设备的连接。

要打开与设备的连接,请使用 fopen 函数。如果 obj 已建立与设备的连接,则其具有 open 的 Status 属性值。对于 fprintf 错误,请参阅常见错误故障排除。

要了解如何使用 fprintf,请参阅使用 fprintf 完成写入操作和写入终止符的规则。

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2018-1-22 22:04 | 只看该作者
fscanf (serial)

读取设备中的 ASCII 数据并将格式设置为文本
语法
A = fscanf(obj)
A = fscanf(obj,'format')
A = fscanf(obj,'format',size)
[A,count] = fscanf(...)
[A,count,msg] = fscanf(...)

说明
A = fscanf(obj) 从与串行端口对象 obj 相连的设备中读取 ASCII 数据并将数据返回到 A。将使用 %c 格式将这些数据转换为文本。对于二进制数据,请使用 fread。

A = fscanf(obj,'format') 读取数据并根据 format 进行转换。format 是 C 语言转换说明。转换设定涉及 % 字符和转换字符 d、i、o、u、x、X、f、e、E、g、G、c 和 s。有关详细信息,请参阅 sscanf 文件 I/O 格式说明或 C 语言手册。

A = fscanf(obj,'format',size) 读取 size 指定的值的数目。size 的有效选项包括:

n
最多将 n 个值读入到列矢量中。
[m,n]
最多读取 m×n 个值并按列顺序填充 m×n 矩阵。
size 不能是 inf,如果指定数目的值无法存储于输入缓冲区中,则会返回错误。如果 size 的格式不为 [m,n] 并且指定了字符转换,则将以行矢量形式返回 A。使用 InputBufferSize 属性指定输入缓冲区的大小(以字节为单位)。ASCII 值为一个字节。

[A,count] = fscanf(...) 返回读取到 count 的值的数目。

如果读取操作未成功完成,[A,count,msg] = fscanf(...) 会将一条警告消息返回到 msg。

示例
创建串行端口对象 s 并将 s 连接到 Tektronix® TDS 210 示波器,示波器上将显示正弦波。以下示例可在 Windows® 平台上运行。

s = serial('COM1');
fopen(s)
使用 fprintf 函数配置作用域以测量正弦波的峰值间电压,返回测量类型并返回峰值间电压。

fprintf(s,'MEASUREMENT:IMMED:TYPE PK2PK')
fprintf(s,'MEASUREMENT:IMMED:TYPE?')
fprintf(s,'MEASUREMENT:IMMED:VALUE?')
因为 ReadAsyncMode 属性的默认值为 continuous,因此与两个查询命令关联的数据将自动返回到输入缓冲区。

s.BytesAvailable
ans =
    21
使用 fscanf 读取测量类型。读取了第一个终止符时,该操作将完成。

meas = fscanf(s)
meas =
PK2PK
使用 fscanf 将峰值间电压作为浮点数读取,并排除终止符。

pk2pk = fscanf(s,'%e',14)
pk2pk =
    2.0200
断开 s 与作用域的连接,并从内存和工作区中删除 s。

fclose(s)
delete(s)
clear s
提示
能够从设备中读取数据之前,必须使用 fopen 函数将设备连接到 obj。已连接的串行端口对象的 open 属性值为 Status。如果尝试在 obj 未连接到设备时执行读取操作,将会返回错误。

如果不包含用作输出参数的 msg 并且读取操作失败,则会向命令行返回一条警告消息。

每次发出 fscanf 时,ValuesReceived 属性值将增加所读取的值的数目(包括终止符)。

使用 fscanf 完成读取操作的规则
使用 fscanf 进行的读取操作会屏蔽对 MATLAB® 命令行的访问,直至出现以下情况为止:

已读取 Terminator 属性指定的终止符。
Timeout 属性指定的时间已过。
已读取 size 指定的数目的值。
将填充输入缓冲区(除非指定了 size)

使用特权

评论回复
7
gaoyang9992006|  楼主 | 2018-1-22 22:05 | 只看该作者
fread (serial)

从设备中读取二进制数据
语法
A = fread(obj)
A = fread(obj,size,'precision')
[A,count] = fread(...)
[A,count,msg] = fread(...)

说明
A = fread(obj) 和 A = fread(obj,size) 从与串行端口对象 obj 相连接的设备中读取二进制数据,并将数据返回到 A。要读取的值的最大数目由 size 指定。如果未指定 size,要读取的值的最大数目由对象的 InputBufferSize 属性确定。size 的有效选项包括:

n
最多将 n 个值读入到列矢量中。
[m,n]
最多读取 m×n 个值并按列顺序填充 m×n 矩阵。
size 不能是 inf,如果指定数目的值无法存储于输入缓冲区中,则会返回错误。使用 InputBufferSize 属性指定输入缓冲区的大小(以字节为单位)。值定义为与 precision 相乘所得的字节(如下所示)。

A = fread(obj,size,'precision') 按照 precision 指定的精度读取二进制数据。

precision 控制为每个值读取的位数以及如何将这些位解释为整数、浮点数或字符值。如果未指定 precision,则使用 uchar(8 位无符号字符)。默认情况下,将以双精度数组形式返回数值。下面的提示中列出了 precision 的支持值。

[A,count] = fread(...) 返回读取到 count 的值的数目。

如果读取操作失败,[A,count,msg] = fread(...) 会将一条警告消息返回到 msg。

提示
能够从设备中读取数据之前,必须使用 fopen 函数将设备连接到 obj。已连接的串行端口对象的 open 属性值为 Status。如果尝试在 obj 未连接到设备时执行读取操作,将会返回错误。

如果不包含用作输出参数的 msg 并且读取操作失败,则会向命令行返回一条警告消息。

每次发出 fread 命令时,ValuesReceived 属性值将增加所读取的值的数目。

完成二进制读取操作的规则
使用 fread 进行的读取操作会屏蔽对 MATLAB® 命令行的访问,直至出现以下情况为止:

已读取指定数目的值。
Timeout 属性指定的时间已过。

使用特权

评论回复
8
gaoyang9992006|  楼主 | 2018-1-22 22:05 | 只看该作者
9
扬逸霄| | 2018-5-6 17:04 | 只看该作者
怎么通过串口保存音频文件的吗?我的串口可以传数据但是保存文件的一直出错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

1974

主题

15994

帖子

210

粉丝