各位前辈,我在做matlab与单片机的串口通信实验,要求用plot函数时时显示串口数据,中断函数有问题。。

各位前辈,我在做matlab与单片机的串口通信实验,要求用plot函数时时显示串口数据,中断函数有问题。。,第1张

新版的matlab中instrcallback函数路径如下:toolbox\shared\instrument\@instrument\instrcallbackm

2014b亲测。直接在最后面添加自己的代码就行。

首先MSP430发送数据,这个“串行通讯”就可以解决。你的部分的话就是把matlab作为串口接收端,这个比较简单,就是用matlab实现跟串口助手一样的功能。首先,确定使用matlab中自带的工具箱Test&Measurement Tool。调用路径为Start---toolboxes---Instrument control---tmtool。选择Serial中的COM1,然后在configure中设置波特率、数据位、奇偶校验位、停止位。在选定完毕后,点击connect,即可进行发送和接收。比如我的发送和接收都是ASCII码,在communicate中选择ASCII码,在Data format中选择c%。在发送了一个命令之后,就可以在Session log中找到具体的m文件,对m文件进行一定的改动之后,以后就可以直接在m文件中发送。

如果还是不清楚的话,我把我这个m文件写在下面:

obj1 = instrfind('Type', 'serial', 'Port', 'COM1', 'Tag', '');

if isempty(obj1)

obj1 = serial('COM1');//使用com1

else

fclose(obj1);//关闭com1

obj1=obj1(1)

end

fopen(obj1);//打开com1

data7= query(obj1, '7', '%c');//发送命令7,获取遥测信号

datanum=str2num(data7);//把string型转换成number

i=datanum(1:32); //采集了32个点

fclose(obj1);

% Disconnect from instrument object, obj1

fclose(obj1);

% Communicating with instrument object, obj1

data7 = query(obj1, '7', '%c');

% Clean up all objects

delete(obj1);

Amax=max(i)

Amin=min(i)

Arms=(Amax-Amin)/(2sqrt(2))

X=fft(i); //FFT分析

stem(50(0:length(X)-1),abs(X));

axis([0 5013 min(abs(X)) max(abs(X))])

最近看到有人讨论matlab 串口通信的话题,结合以往的VB串口通信,做了这么个小实验。

需要用到的软件:matlab 7,VB 6,还有一个就是虚拟串口 Virtual Serial Port Driver!

前面2个软件就不用解释了,虚拟串口 Virtual Serial Port Driver 就是生成一对虚拟串口2和3,

本实验中一个matlab来存取COM2,另一个COM3就用VB编程打开,而且这2个串口是连接在一起的,一个输出数据,就可以从另外一个得到数据!

VB程序

放一个MSComm 控件在form上,在 Form_Load里设置相关属性,当然还包括串口通信参数字符串:

Private Sub Form_Load()

MSComm1CommPort = 3

MSComm1InputMode= comInputModeBinary

MSComm1RThreshold = 1

MSComm1Settings = "9600,e,8,1"

MSComm1PortOpen = True

End Sub

再在MSComm1的OnComm事件里加入数据生成代码:

Private Sub MSComm1_OnComm()

Dim i%

Dim Data(1024) As Byte

Randomize

Select Case MSComm1CommEvent

Case comEvCD

Case comEvCTS

Case comEvDSR

Case comEvRing

Case comEvReceive

For i = 0 To 100

Data(i) = CByte(255 Rnd())

Next i

MSComm1Output = Data

Case comEvSend

End Select

End Sub

当收到对方一个数据时,触发此事件。这里用随机函数来生成100个数,赋值给Data数组,然后用串口输出!

运行VB程序,串口3就出在打开状态,当收到一个字符,就会发送出生成的100个byte型随机数据!

Matlab程序

clear

u=uint8(zeros(1024,1));

ser_port1=serial('COM2')

ser_port1InputBufferSize=4096;

ser_port1OutputBufferSize=4096;

ser_port1Timeout=10;

ser_port1BaudRate=9600;

ser_port1Parity='even';

ser_port1StopBits=1;

fopen(ser_port1);

fwrite(ser_port1,'S');

u=fread(ser_port1,100,'uint8');

fclose(ser_port1)

delete(ser_port1)

clear ser_port1

plot(u)

grid

程序运行时,先初始化u,然后设置串口通信的相关数据,打开串口2,发送一个字符S,对方收到后会发出100个数据,matlab 接收这100个数据,存放在u中,关闭串口,清楚变量,图示变量u 中的数据!

以上是用虚拟串口软件来模拟串口通信环境,实践中用2台电脑的串口建立真实的串口通信环境也可以。当然,连接时采用的是交叉线,即A机的发送Tx连B机的接收Rx,A机的接收Rx连B机的发送Rx,信号地相连。

本实验仅起抛砖引玉的作用,如果朋友们有兴趣还可以深入,比如建立握手过程、每次指定数据个数,或者PC串口连接单片机的通信环境等等。

另外,需要虚拟串口软件可以去官方网站去下载,也可以联系索取。

以上就是关于各位前辈,我在做matlab与单片机的串口通信实验,要求用plot函数时时显示串口数据,中断函数有问题。。全部的内容,包括:各位前辈,我在做matlab与单片机的串口通信实验,要求用plot函数时时显示串口数据,中断函数有问题。。、MATLAB如何采集MSP430的数据我们小组要做一个使用光电传感器测量火车速...、你好,我也正打算用matlab读串口数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10095268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存