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
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。
上一篇:STM32组合设备实现USB转双串口
下一篇:STM32串口通信(基于缓冲区)编程及遇到的问题总结
推荐阅读
史海拾趣
随着物联网市场的快速发展,Telit作为全球领先的物联网模组和平台提供商,开始寻求通过并购来增强自身在低功耗WiFi技术领域的实力。2017年,Telit宣布收购GainSpan,这一举措不仅丰富了Telit的无线模组产品线,还进一步巩固了其在物联网市场的领先地位。GainSpan的技术与Telit的平台和服务相结合,为客户提供了更加全面的物联网解决方案。
作为一家半导体公司,技术突破和创新是ELANTEC发展的核心动力。在移动通信领域,ELANTEC不断推出具有创新性的产品和技术,如低功耗、高性能的移动通信芯片等。此外,在汽车电子、工业控制等领域,ELANTEC也取得了多项技术突破,为客户提供了更加优质的产品和服务。
自1989年成立以来,CUI Inc.一直站在电源设计的前沿。公司不断投资于研发,致力于开发出更高效、更环保的电源产品。通过引入先进的电源管理技术和创新的设计方法,CUI成功地帮助客户提高了应用的能效,减少了能源消耗。这种对电源技术的专注和创新,使CUI在竞争激烈的电子行业中脱颖而出,赢得了众多客户的信赖和好评。
在20世纪90年代初,一家名为“海曼电子”(虚构名称,类似HEIMANN发音)的初创公司在德国慕尼黑成立。创始人海曼博士凭借其在半导体材料领域的深厚研究背景,带领团队成功研发出了一种新型高效能传感器芯片。这种芯片在温度测量领域表现出色,迅速获得了市场的认可。随着技术的不断迭代,海曼电子逐渐在传感器市场占据了一席之地,并通过持续的技术创新,将产品线扩展至光电子、汽车电子等多个领域。
随着技术的不断进步和市场的逐步打开,弘凯光电开始将业务拓展至全球范围。公司的客户群迅速扩大,遍布60多个国家和地区,同时在欧洲、北美、南美、东南亚和中东地区均设立了经销网点。此外,弘凯光电还积极寻求国际认证,以证明其产品的品质和可靠性。通过取得ISO9001质量保证体系、ISO14001国际环境管理体系认证等一系列认证,公司进一步提升了品牌形象和市场竞争力。
单触型传感器与划擦型传感器是两种新型固态指纹传感器,都是通过在触摸过程中电容的变化来进行信息采集。本文对两类传感器的工作原理和特点进行了详细分析,并介绍在互联网安全认证、汽车无钥匙进入系统等的应用。 前市场上有两种固态指纹传 ...… 查看全部问答∨ |
|
对于process,有一个很疑惑的地方。 书上说,仿真器对进程中的各语句自上至下地进行处理。当进程所有语句执行完毕,或者中途碰到WAIT语句时,该进程执行结束,信号代入过程最后被执行。代入同样应该按顺序自上至下地执行。 接着给出来一个这样的 ...… 查看全部问答∨ |
我的机子装不了eVC4,在配置wince platform manager 4.0 时,就死机了 重启后就出现未识别的硬件和硬件安装向导,只要安装也就卡机了 这是怎么回事?和硬件有关吗》怎么解决?急 请高手帮忙 … 查看全部问答∨ |
我最近开始学习s3c 2410的数据手册 但是是英文的,翻译起来有点痛苦,翻译不正确就更加得不偿失了. 想问问大家是否有 2410的中文版的 数据手册. 如果有的话能否共享一份给我? 谢谢~~~ 赵辉… 查看全部问答∨ |
|
关于startup.asm的问题?这段代码的功用?怎么有时不用也行?何时一定需要? 小弟这几天在Keil C51环境下做些小case。 发现带void main(void)的代码可以直接编译、链接生成hex,一般在main的开始也调用自己编的对板上MCU内部RAM、串口、LCD等资源的初始化工作,看keil提供的模版startup.asm,也只是清0上述几个资源,于是不 ...… 查看全部问答∨ |