matlab+stm32通讯,matlab与stm32之间利用串口通信记录

1、涉及到的函数

serial,fopen,fclose,

instrfindall,instrhwinfo,

fprintf,fscanf,fwrite,fread,isempty

1.1 串口函数

scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

fopen(scom);

.

fclose(scom);

或者对串口属性单独设置,如下:

scom = serial(com);

scom.BaudRate = 115200;

scom.InputBufferSize = 512;

scom.BytesAvailableFcnMode = 'terminator'; % 'byte'

scom.terminator = CR/LF ;

scom.Timeout = 50; %read or write wait time

fopen(scom);

.

fclose(scom);

通常会在关闭串口后删除串口,在matlab工作空间中清除串口数据:

delete(scom);

clear scom;

问题1.:matlab刚打开后,第一次可以成功打开串口,第二次再打开就会报错如下:

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom)

Error using serial/fopen (line 72)

Open failed: Port: COM6 is not

available. Available ports: COM1.

Use INSTRFIND to determine if other

instrument objects are connected to the

requested device.

处理方法:个人理解是关闭串口后,串口并没有被完全清理,就像有些软件卸载后第二次再安装就会失败,所以需要在重新打开串口之前删除之前对串口的所有设置,如下:

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom);

Error using serial/fopen (line 72)

Open failed: Port: COM6 is not

available. Available ports: COM1.

Use INSTRFIND to determine if other

instrument objects are connected to the

requested device.

>> delete(instrfindall('Type','serial'));

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom);

>> fclose(scom)

>> help instrfindall

instrfindall Find all communication interface objects with specified

property values.

instrfindall函数可以找出所有与matlab通信的接口,也可以找出符合特定参数的接口。

1.2 serial 参数理解

通过>> s=get(scom) 可以过得串口的所有参数以及当前的值,其中主要设置的有:

BaudRate,波特率

ByteOrder,数据大端或者小端模式,默认小段

DataBits,数据位,通常默认8位

Parity,校验位,默认none

StopBits,停止位,默认1

Timeout,matlab串口发送或者读取数据等待时长

ReadAsyncMode,异步读取数据的方式,连续或者手动,默认连续continue

----------

BytesAvailableFcnMode

BytesAvailableFcnCount

BytesAvailableFcn

Terminator

BytesAvailable

表示数据有效的触发方式,相当于c中的中断触发事件:默认值terminator,表示串口接收到特定的终止符时,触发bytes-available event,参数自动加一,并进入由指向的回调函数,相当于c中的中断函数;可选值byte,表示串口收到一个字节时,触发bytes-available event,自动加一,当收到

个字节时进入回调函数。

终止符通常是回车或者换行符,也可以自己设定,根据通信协议自定义,[Windows、Linux和MAC的CR, LF, CR/LF换行符](http://blog.csdn.net/cckit/article/details/41604771)。

matlab搜索可用串口端口函数instrhwinfo :

>> info = instrhwinfo('serial')

info =

HardwareInfo with properties:

AvailableSerialPorts: {2x1 cell}

JarFileVersion: 'Version 3.7'

ObjectConstructorName: {2x1 cell}

SerialPorts: {2x1 cell}

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

>> info.SerialPorts

ans =

'COM1'

'COM6'

>> info.AvailableSerialPorts

ans =

'COM1'

'COM6'

>> str = char(info.SerialPorts(2))

str =

COM6

>> scom=serial(str);

我在电脑设备管理器查看,用的是串口’COM6’, ‘COM1’还不知道时接的是什么,所以这里想用matlab自动选择串口的功能还没有实现。

1.3 数据读写函数

matlab:

fprintf(scom,'%d\n', data,'async' );

data = fscanf(scom,'%d');

c:

scanf("%d",&data);

printf("%d\r\n",data);

note1:c中scanf、printf函数默认从终端打印读取数据,这里需要重定向fputc、fgetc函数。

note2:c中scanf函数在读取到有效数据前会一直运行不退出。

问题2:在stm32的串口中断函数中调用scanf函数,读取matlab发送的数据,matlab中用fprintf(scom,’%d\r\n’, data,’async’ )发送数据,当stm32进入中断读取数据后,总是会再次进入中断并进入scanf函数出不来。

处理方法:matlab中发送数据的格式 '%d\r\n',即回车加换行,个人理解是串口发送完一字节后也把'\r'即 回车符也发送出去,所以stm32的串口接收缓存中scanf函数读取数据后,由回车符又引起接收中断。

将matlab发送函数中数据格式改为'%d\n' 后,stm32可以正常读取数据。

matlab:

fwrite(scom,data,'uint8','async');

cmd_ack = fread(scom,1,'uint8');

c:

rec = USART_ReceiveData( DEBUG_USART );

Usart_SendByte(DEBUG_USART,data);

note1:fwrite和fread是以二进制的格式发送数据,而上面的fprintf和fscanf是以ASCII码的格式发送。

例如:data为十进制数123,其十六进制为0x7b,底层二进制数据流就是0111 1011,以ASCII码发送是0x31,0x32,0x33,底层数据流是0011 0001,0011 0010,0011 0011。

matlab如果用fwrite和fread函数,串口参数也要改为byte。

记录时间:2017.12.10 晚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德勤预测2018年9大科技趋势:AR走进普通用户,直播仍然是王道

来源:腾讯科技编辑:Jennie“我们眼下正处在一个临界点,即机器学习将在企业市场加速普及,从而推动改进企业运营,让企业作出更好的决策,并提供增强或全新的产品和服务。”——德勤副总裁保罗萨罗米据外媒报道…

Tomcat学习笔记(一)

HTTP 请求 一个HTTP请求包括三个组成部分:  方法—统一资源标识符(URI)—协议/版本  请求的头部  主体内容 下面是一个HTTP请求的例子: POST /examples/default.jsp HTTP/1.1 Accept: text/plain; text/html Accept-Language: en-gb Connection: K…

谷歌人工智能检索开普勒望远镜数据后,找到了“迷你太阳系”

“开普勒-90”和太阳系一样拥有八大行星 本文图片均来自 NASA来源:澎湃新闻概要:当地时间12月15日,美国国家航空航天局NASA宣布在“行星猎手”开普勒望远镜的数据库中找到了恒星“开普勒-90”周围的第八颗行星&#xf…

php去除所有标点符号的方法,php如何去除标点符号

php去除标点符号的方法:首先创建一个PHP示例文件;然后通过正则表达式“preg_replace($pattern, , $str);”删除字符串中的中英文标点符号即可。推荐:《PHP视频教程》php正则,删除字符串中的中英文标点符号原理很简单,…

JAVA监听器原理

来源:http://www.cnblogs.com/hulitut/archive/2012/03/27/2420414.html Java 最新的事件处理方法是基于授权事件模型 事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事…

美国的人工智能企业在研发哪些有趣的AI产品?

来源:亿欧概要:本文盘点了美国AI企业的有趣产品,或许能给国内AI创业者和投资人有所启发。同样是AI创业,国内外的打法显然不同。在国内,大部分AI创业公司都在拼主赛道,比如无人驾驶、AI安防、AI医疗、AI教育…

mysql创建反弹函数,MySql创建函数

首先需要查看一下创建函数的功能是否开启:mysql> show variables like %func%;------------------------------------------------| Variable_name | Value |------------------------------------------------| log_bin_trust_funct…

Java技术回顾之JNDI--实例

一、JNDI在Java EE中的应用JNDI 技术是Java EE规范中的一个重要“幕后”角色,它为Java EE容器、组件提供者和应用程序之间提供了桥梁作用:Java EE容器同时扮演JNDI提供者角色,组件提供者将某个服务的具体实现部署到容器上,应用程序…

【观点】智能制造:新时代智能产业革命的基石|王飞跃

来源: 中国科学院自动化研究所概要:以新的理念和新的技术发展新时期的智能制造科技,创新智能产业革命,将是中国从制造大国到制造强国,进而从世界大国到世界强国的必由之道和开路先锋。实体经济,特别是以制造…

matlab连续型随机变量,matlab连续型随机变量的分布.doc

matlab连续型随机变量的分布.doc 连续型随机变量的分布及其数字特征一、基本概念设随机变量X的分布函数为F(x),若存在非负函数f(x),使对任意实数x,有≤X{Pxd}则称X为连续型随机变量,并称f(x)为X的概率密度,它满…

Java技术回顾之JNDI--命名和目录服务基本概念

命名服务的相关概念: Naming Service 命名服务 命名服务将名称和对象进行关联,提供通过名称找到对象的操作。 例如:DNS系统将计算机名和IP地址进行关联。文件系统将文件名和文件句柄进行关联等等。 Name 名称 要在命名系统中查找对象&…

php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com

// search jsonp server v1.2 form seacms by nohacks.cnrequire_once("include/common.php");require_once(sea_INC."/main.class.php");//参数过滤$cbfilter_input(INPUT_GET, cb,FILTER_SANITIZE_STRING);$wd filter_input(INPUT_GET, wd,FILTER_SANITI…

CB Insights发布AI创业公司100榜单 ,7家中国公司上榜,两家二次登榜

来源:36氪概要:近日,硅谷知名数据公司 CB Insights 在美国旧金山发布了第二届全球最强 AI 创业公司榜单AI 100。旷视科技、出门问问、今日头条、英语流利说、优必选、商汤科技以及寒武纪上榜 。近日,硅谷知名数据公司 CB Insights…

Java技术回顾之JNDI--JNDI API

JNDI的用途:1)你可以用jndi来得到object类的属性 Attribute attr directory.getAttributes(personName).get("email"); String email (String)attr.get();2)你可以用jndi来搜索对象foxes directory.search("oWiz,cUS",…

遗传算法pareto matlab,matlab遗传算法三目标优化,出来的pareto前沿图只是二维图...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼三目标不是三维图么?怎么修改啊?啊function fmultidisk(x)global I1 I2 Fr350;u0.5;fai1;W3400;v44.4444;m4; tc6.5; Dh75;WaW*m;g9.8;Dmax300;Tmax260;Ti35; Pmax3;P0max7;J4180;c0.113;rou7.8*10^(-6);EWa…

深度学习发展简要笔记

来源:非正式组织概要:在Yann LeCun、Yoshua Bengio和Geoffrey Hinton三巨头nature深度学习综述《deep learning》文章中提到,这段期间神经网络模型被主流的计算机视觉和学术界所抛弃。一、前言深度学习的发展大致分为这么几个学期&#xff1a…

利用ServiceLocator模式改进JNDI实践

J2EE应用系统是打了“分布式”的标签的,所以客户端需要定位业务层的组件和服务,常见的比如有:EJB Home接口、EJB LocalHome接口、JMS消息列队或主题、JMS消息列队工厂等等,当然还有再普通不过的JAVA对象了,那么对这些分…

数据革命在危机中诞生 援助组织尝试灵活方法拨开战争迷雾

无国界医生组织在安曼为叙利亚提供支持。图片来源:Neil Brandvold来源:科学网概要:每当战争、飓风或其他灾害肆虐时,援助组织面临的最大问题之一就是缺乏可靠的数据。当Issam Salim(化名)讲述他进行的手术时…

德勤2018TMT八大预测:移动互联网迎来二次革命

来源:智东西概要:数万手机AR应用上市,AI芯片打入旗舰手机,数据中心ML芯片多样化,移动数字经济继续开挂。2017年,很多传统TMT巨头面临增长缓趋,于是考虑重资产化追求规模效应,开拓、转…

oracle 中 start tran,The value (30) of MAXTRANS parameter ignored

The value (30) of MAXTRANS parameter ignored在客户的数据库系统中(Oracle 10.2.0.3),当使用expdp备份时就出现如下错误,非常准时。可以看到,这个错误就是由于备份时创建备份主表(Master Table)产生的:Sat Mar 7 02:40:01 2009T…