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串口通信(基于缓冲区)编程及遇到的问题总结
推荐阅读
史海拾趣
ADL Embedded Solutions Inc. 是一家专注于嵌入式计算解决方案的公司,以下是该公司发展的五个相关故事:
公司创立与早期发展: ADL Embedded Solutions Inc. 成立于1994年,总部位于美国科罗拉多州科罗拉多斯普林斯市。公司初期致力于为工业、军事、航空航天等领域提供嵌入式计算解决方案。其产品包括工业级嵌入式计算板卡、系统、模块等。
技术创新与产品推出: ADL 在嵌入式计算领域不断进行技术创新,并推出了多款具有竞争力的产品。公司的产品具有高性能、低功耗、高可靠性等特点,得到了客户的广泛认可。其产品广泛应用于军事航空、医疗、交通、工业自动化等领域。
客户合作与项目案例: ADL 与各行业的领先企业建立了长期稳定的合作关系,并参与了众多重要项目。例如,公司为航空航天领域的客户提供了符合严格标准的嵌入式计算解决方案,为医疗设备制造商提供了可靠的嵌入式计算板卡等。
全球市场拓展与国际化发展: ADL 通过不断拓展国内外市场,实现了全球化发展。公司在美国、欧洲和亚洲等地设有销售办事处和服务中心,为客户提供本地化的技术支持和服务。同时,ADL 的产品远销全球各地,深受国际客户的青睐。
未来展望与持续发展: ADL 将继续致力于技术创新和产品开发,满足客户不断变化的需求。公司将不断扩大在工业、军事、医疗等领域的市场份额,加强与客户的合作,保持行业领先地位,实现业务的持续增长和发展。
在电子产品日益复杂化的背景下,E-Z-HOOK公司不断追求技术创新。他们投入大量资源研发新型测试工具,以提高测试效率和准确性。其中一项重要的创新是开发出了可重复使用的测试钩。这种测试钩具有极高的耐用性和可靠性,可以大大降低测试成本。此外,公司还推出了一系列智能化测试解决方案,通过集成先进的传感器和软件技术,实现了对测试过程的实时监控和数据分析。
在电子产品日益复杂化的背景下,E-Z-HOOK公司不断追求技术创新。他们投入大量资源研发新型测试工具,以提高测试效率和准确性。其中一项重要的创新是开发出了可重复使用的测试钩。这种测试钩具有极高的耐用性和可靠性,可以大大降低测试成本。此外,公司还推出了一系列智能化测试解决方案,通过集成先进的传感器和软件技术,实现了对测试过程的实时监控和数据分析。
EPSON公司,原名精工爱普生,成立于1942年,最初以制造手表起家。然而,随着技术的不断进步和市场需求的变化,EPSON逐渐将业务扩展到电子领域。在创始人及其团队的带领下,EPSON凭借其卓越的技术创新能力,成功研发出了一系列具有划时代意义的电子产品,如世界上第一台微型打印机和喷墨打印机,奠定了其在电子行业的领先地位。
进入21世纪,美高测持续加大在技术研发上的投入,成功研发出具有自主知识产权的VLF(超低频)测试技术,并应用于变电站设备、中高压电力电缆等关键领域的测试。这项技术不仅提高了测试的准确性和效率,还降低了操作风险,迅速获得了市场的广泛认可。公司借此机会,在全球范围内建立了多个销售和服务中心,进一步巩固了其在高压半导体测试市场的领先地位。
DATATRONICS深知产品质量是企业生存和发展的基石。因此,公司投入大量资源用于建立和完善质量管理体系,确保每一款产品都符合国际标准和客户要求。同时,DATATRONICS还注重品牌形象的塑造,通过一系列营销活动和公益活动,提高了品牌知名度和美誉度。
1。调频发射模块FM1 19元一个 调频发射模块FM1的体积只有10X36X6毫米(其中高度仅指器件中的最高点),大小和小手指差不多,工作电压为3~8伏,最佳工作电压为6伏,对应的工作电流4~50毫安,发 ...… 查看全部问答∨ |
1、 应用Web和MATLAB的信号与系统基础(第二版) 作者:(美)Edward Kamen, Bonnie Heck, Ed Kamen 2、CMOS 射频集成电路设计(英文版) 作者:美Lee,T.H.著 3、MATLAB原理与工程应用 作者:(美)Edward B.Magrab ...… 查看全部问答∨ |
结合继电保护装置对相住测试的需要, 介绍) ~ MS P 4 3 0 单片机产生多路可控制相位的正弦信号来模拟测试继电保护装置的实际动作。 该系统利用了MS P 4 3 0 单 片机的片内资源, 既简化了系统设计, 又提高了系统的可靠性。 [ 本帖最后由 ...… 查看全部问答∨ |
上拉电阻: 1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 2、OC门电路必须加上拉电阻,才能使用。 3、为加大输出引脚的驱动能力, ...… 查看全部问答∨ |
昨中午加上今早上,学习总算完成,学习过程跟踪帖子: https://bbs.eeworld.com.cn/thread-355463-1-3.html 考试通过80分 继续努力! … 查看全部问答∨ |
1.我想问下ADCTRIG这个应该怎么使能?我没在ADC的头文件里找到这一位。具体附图。2.我想问下ADCINT·~9这9个位置都有什么区别,难道只是提供了九个中断? 3.我想问下INTSEL9N10这些位是干嘛的啊~ 拜托各位啦,我最近自己学这个真是好烦恼啊,唉唉 ...… 查看全部问答∨ |