set(s,'BaudRate',9600,'StopBits',1,'Parity','none','DataBits',8,'InputBufferSize',255)
//串口的一些设置,注意,'none'有引号,有些值如InputBufferSize只能在串口关闭时才能设置,
//所以不建议先打开串口
fopen(s)//打开串口
fwrite(s,100)//打100(十进制)写入串口也可以是一维数组,可以用示波器测伍大庆com的第3个引脚
a=fread(s)
//读出串口数据,由于matlab是顺序执行的,所以这里读不到100,
//程序会卡腔握在这里直到读到数据为止,好像是存完buffer吧,这里忘了。
//仿液自己从com的第2个引脚给数据试试看就清楚了
fclose(s)//关闭串口
串口读取/读取数据一般分为三步:打开串口,设置串口(波特率,串口数据传送方式薯带等),然后是串口读取数据或者发送数据void
OpenComm()
{
hCom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL)
}
void
SetComm()
{
SetupComm(hCom,1024,1024)
DCB
dcb
dcb.BaudRate=115200
...展开串口读取/读取数据一般分为三步:打开串口,设置串口(波特率,串口数据传送方式等),然后是串口读取数据或者发送数据
void
OpenComm()
{
hCom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL)
}
void
SetComm()
{
SetupComm(hCom,1024,1024)
DCB
dcb
dcb.BaudRate=115200
dcb.fParity=NOPARITY
dcb.ByteSize=8
dcb.StopBits=ONESTOPBIT
GetCommState(hCom,&dcb)
if(!GetCommState(hCom,&dcb)){
std::cerr<<"串口被占用"<<std::endl
return
}
if(!SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY)){
std::cerr<<"掩码设置失败"<<std::endl
}
}
void
SendMessageOut(const
BYTE
snd[],int
len)
{
DWORD
factdata=100
DWORD
res=0
wOverLapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL)
//创建事件
BOOL
tempflag
=
WriteFile(hCom,snd,len,&factdata,&wOverLapped)//在数据缓冲Ipbuffer不知道是否有问题
if(tempflag!=0)
{
std::cerr<<"等待岩手胡信号"<<std::endl
res=WaitForSingleObject(wOverLapped.hEvent,5000)
WriteFile(hCom,snd,len,&factdata,&wOverLapped)
}
if(res!=WAIT_OBJECT_0)
std::cout<<"数据发送失败"<<std::endl
}
这是发送数据的设置
接受数据很类似
你可以根据自己情况修改,然后你就可以根粗拦据MATLAB的数据读取以及数据传送方式来写你的程序了收起
最新版matlab,现在推荐使用serialport *** 作,相较于原函数serial()更加简单,创建速度誉扒更快。
官族镇方链接为:
https://ww2.mathworks.cn/help/matlab/ref/serialport.html
其中,port为端口号,baudrate为波特率,Name可选read、readline、write等等,具体参考链接。
按照我的理解,兆虚粗matlab中创建的串口为虚拟串口,退出即会抹除串口使用痕迹
通俗理解就是,matlab的.m程序运行结束后,这个串口发生过的事情不会在串口中留存
传统的串口调试助手退出时会保留串口状态
所以matlab中使用串口时,要在.m文件运行过程中进行一切 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)