IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MATLAB 的串口连接 -> 正文阅读

[嵌入式]MATLAB 的串口连接


前言

本文主要整理了MATLAB2021a文档中对于serialport及相关函数的描述及用法
在验证时采用的虚拟串口来源于https://blog.csdn.net/qq_17351161/article/details/89607458


相关函数

连接函数:serialport
s = serialport(port,baudrate)
s = serialport(port,baudrate,Name,Value) 连接到串行端口,并使用可选的名称-值对组参数设置其他属性。
示例: s = serialport(“COM3”,9600,“Timeout”,5);

对象函数见下表

名称作用
read从串行端口读取数据
readline从串行端口读取ASCII字符串数据行
write将数据写入串行端口
writeline将ASCII数据行写入串行端口
flush清空串行端口设备缓冲区
configureTerminator为与串行端口的ASCII字符串通信设置终止符
configureCallback为与串行端口设备的通信设置回调函数和触发条件
getpinstatus获取串行引脚状态
setRTS设置串行RTS引脚
setDTR为与串行端口设备的通信设置回调函数和触发条件

1. read 从串口读取数据

data = read(device,count,datatype)

说明:从串行端口连接 device 以 datatype 指定的格式读取 count 个值。

  • device: serialport 创建的对象
  • count: 要读取的值的数目
  • datatype: 每个值的大小和格式,指定为字符向量或字符串,有如下类型格式 “uint8” | “int8” | “uint16” | “int16” | “uint32” | “int32” | “uint64” | “int64” | “single” | “double” | “char” | “string”

示例:read(device,5,‘unit32’) 从串行端口连接device读取格式为unit32的5个数据,每个unit32值为4个字节,共读取20个字节。


2. readline 从串行端口读取 ASCII 字符串数据行

data = readline(device)

说明:从串行端口连接读取 ASCII 数据,直到第一次出现终止符,并以不带终止符的字符串形式返回 data。


3. write 将数据写入串行端口

write(device,data,datatype)

说明:将行向量或列向量 data 写入指定的串行端口连接 device。该函数以指定的数据类型 datatype 写入数据,而不考虑 data 中的格式。

  • device: serialport 创建的对象
  • data: 数值或 ASCII 数据,指定为由数值组成的 1×N 向量或文本类型的字符向量或字符串标量
  • datatype: 每个值的大小和格式,指定为字符向量或字符串,有如下类型格式 “uint8” | “int8” | “uint16” | “int16” | “uint32” | “int32” | “uint64” | “int64” | “single” | “double” | “char” | “string”

示例
write(device,1:5,“int16”) 以 int16 数据类型格式写入数据,写入值为1 ,2 ,3 ,4 ,5。
write(device,[20:24],“int16”) 写入值 [20,21,22,23,24]。


4. writeline 将 ASCII 数据行写入串行端口

writeline(device,data)

说明:将 ASCII 文本 data(后跟终止符)写入指定的串行端口。该函数暂停 MATLAB? 的执行,直到写入了数据和终止符。

示例
writeline(device,"*IDN?") 写入 ASCII 字符串 “*IDN?”


5. flush 清空串行端口设备缓冲区

flush(device)
flush(device,“input”)
flush(device,“output”)

说明
flush(device) 刷新指定的串行端口的输入和输出缓冲区中的所有数据。
flush(device,“input”) 仅清空输入缓冲区。
flush(device,“output”) 仅清空输出缓冲区。


6. configureTerminator 为与串行端口的 ASCII 字符串通信设置终止符

configureTerminator(device,terminator)
configureTerminator(device,readterminator,writeterminator)

说明

  1. configureTerminator(device,terminator) 定义与指定的串行端口进行读写通信的终止符。允许的终止符值是 “LF”(默认值)、“CR”、“CR/LF” 以及 0 到 255的整数值。该语法设置 device 的 Terminator 属性。 设置终止符后,使用 writeline 和 readline写入和读取以 ASCII 字符结尾的字符串数据。
  2. configureTerminator(device,readterminator,writeterminator) 为读取和写入通信定义单独的终止符。

示例
configureTerminator(device,“CR”,10) 将读取终止符设为CR,写入终止符设为10

查看终止符:device.Terminator


7. configureCallback 为与串行端口设备的通信设置回调函数和触发条件

configureCallback(device,“terminator”,callbackFcn)
configureCallback(device,“byte”,count,callbackFcn)
configureCallback(device,“off”)

说明

  1. configureCallback(device,“terminator”,callbackFcn) 将回调函数 callbackFcn 设置为每当可从指定的串行端口读取终止符时触发。该语法将 device 的 BytesAvailableFcnMode 属性设置为 “terminator”,将 BytesAvailableFcn 属性设置为 callbackFcn。
  2. configureCallback(device,“byte”,count,callbackFcn) 将回调函数 callbackFcn 设置为每当有新的 count 个字节可供读取时触发。该语法将 device 的 BytesAvailableFcnMode 属性设置为 “byte”,将 BytesAvailableFcnCount 属性设置为 count,将 BytesAvailableFcn 属性设置为 callbackFcn。
  3. configureCallback(device,“off”) 关闭回调。该语法将 device 的 BytesAvailableFcnMode 属性设置为 “off”。

示例
1.configureCallback(device,“byte”,128,@callbackFcn) 将 callbackFcn 回调设置为每当有 128 个字节的新数据可供读取时触发。
2.创建一个回调函数,该函数读取以 ASCII 结尾的字符串数据,并将其保存到 device 的 UserData 属性中。

function readSerialData(src,evt)
    data = readline(src);
    src.UserData = data;
end
// 将回调设置为当终止符可供读取时触发。
configureCallback(device,"terminator",@readSerialData)


8. getpinstatus 获取串行引脚状态

status = getpinstatus(device)

说明:status = getpinstatus(device) 获取串行引脚状态并将其作为结构体返回给 status。


9. setRTS 设置串行 RTS 引脚

setRTS(device,true)
setRTS(device,false)

说明
setRTS(device,true) 设置指定的串行请求发送 (RTS) 引脚。
setRTS(device,false) 重置指定的 RTS 引脚。


10. setDTR 设置串行 DTR 引脚

setDTR(device,true)
setDTR(device,false)

说明
setDTR(device,true) 设置指定的串行数据终端就绪 (DTR) 引脚。
setDTR(device,false) 重置指定的串行 DTR 引脚。


虚拟串口测试

1.首先使用虚拟串口创建COM1,COM2,左边virtual ports部分说明已经成功创建

在这里插入图片描述

2.用XCOM选择COM1,MATLAB连接COM2,各参数需设置相同

// MATLAB串口连接,发送“hi”消息
s1 = serialport('COM2',115200,"Timeout",0.5);   % 虚拟串口测试
writeline(s1,"hi"); 

3.XCOM收到消息并发送“hello”
在这里插入图片描述
4.打开MATLAB工作区中的s1。
可看到串口的各项数据,其中NumBytesAvailable 代表串口输入缓冲区接受的字节数为7,NumBytesWritten 代表串口输出缓冲区发送的字节数为3。在串口发送与接受过程中,每个字符默认为1字节大小,缓冲区大小与发送数据大小不同的原因将在下面进行介绍。

在这里插入图片描述

5.将XCOM中收到的字符转为hex格式
得到 “68 69 0A” ,对照ASCII码,68 69代表hi,而0A代表换行符,发送其他字符试了下,最后都带有一个换行符,因而发送数据时会多一字节。
在这里插入图片描述

6.在MATLAB中用read函数读取数据
数据格式为uint8,read(s1,7,“uint8”),结果为“104 101 108 108 111 13 10”对照ASCII表为“hello+归位键+换行键”,继续尝试发现MATLAB接受的数据末尾都会带上归位键+换行键,因而会产生
接受数据大小增加2字节的情况。


实际串口测试

本次连接的串口波特率为250000,“Timeout”=0.5

// 连接串口
s1 = serialport('COM6',250000,'Timeout',0.5);

串口收到“WAVE”命令后,开始向MATLAB发送数据,在测试中发现发送的WAVE命令实际上还需要加上归位键以及换行键,但在实际发送中难以直接用字符串形式发送。采用char函数嵌套hex2dec函数的方式实现该命令。

hexstr1 = ["57" "41" "56" "45" "0D" "0A"];    % WAVE 信号的16进制表示
start_sig = char(hex2dec(hexstr1));
writeline(s1,start_sig);     % 发送命令,数据开始传输
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:52:49  更:2021-11-14 21:54:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:28:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码