您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > matlab串口编程
matlab串口编程在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。检索对自己有用的信息也是一种能力。在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。1,simulink工具箱仿真2,Instrumentcontroltoolbox3,使用MATLAB变成语言,编写自己的程序控制在Instrumentcontroltoolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。在工具箱中,可以将你进行的操作实时的转换成m文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。(可能说的太主观,至少我是这样)没什么比编写自己的程序更加能了解自己控制的设备了,其上的两种方式都是在这个方式的基础上实现的,最终控制原理都是一样的,都是通过MATLAB提供的一系列API函数对串口进行操作。1和2我都尝试过,但是最后还是觉得之间编程比较清晰,当然这只是一个过程,不同的情况使用不同的工具才是正确的。以上纯属个人观点和理解,仅供参考,有什么好的想法还请不吝赐教,大家一起学习。下面是我对MATLAB环境下对串口操作的一些理解和操作。在MATLAB中,串口被抽象成一个结构体,所有的操作均同归相关函数对结构体操作完成,通过serial函数新建一个串口对象,该函数至少需要一个参数,即串口号,其他的可选参数为设置该串口相关参数,可以在新建对象的时候指定也可以在以后用set函数设置。相对而言,get函数可以得到串口对象的相关参数值或者状态。串口对象参数如下:CommunicationsPropertiesBaudRateRateatwhichbitsaretransmittedDataBitsNumberofdatabitstotransmitCommunicationsPropertiesParityTypeofparitycheckingStopBitsNumberofbitsusedtoindicatetheendofabyteTerminatorTerminatorcharacterWritePropertiesBytesToOutputNumberofbytescurrentlyintheoutputbufferOutputBufferSizeSizeoftheoutputbufferinbytesTimeoutWaitingtimetocompleteareadorwriteoperationTransferStatusIndicateifanasynchronousreadorwriteoperationisinprogressValuesSentTotalnumberofvalueswrittentothedeviceReadPropertiesBytesAvailableNumberofbytesavailableintheinputbufferInputBufferSizeSizeoftheinputbufferinbytesReadAsyncModeSpecifywhetheranasynchronousreadoperationiscontinuousormanualTimeoutWaitingtimetocompleteareadorwriteoperationTransferStatusIndicateifanasynchronousreadorwriteoperationisinprogressValuesReceivedTotalnumberofvaluesreadfromthedeviceCallbackPropertiesBreakInterruptFcnM-filecallbackfunctiontoexecutewhenabreak-interrupteventoccursBytesAvailableFcnM-filecallbackfunctiontoexecutewhenaspecifiednumberofbytesisavailableintheinputbuffer,oraterminatorisreadBytesAvailableFcnCountNumberofbytesthatmustbeavailableintheinputbuffertogenerateabytes-availableeventBytesAvailableFcnModeSpecifyifthebytes-availableeventisgeneratedafteraspecifiednumberofbytesisavailableintheinputbuffer,orafteraterminatorisreadCallbackPropertiesErrorFcnM-filecallbackfunctiontoexecutewhenanerroreventoccursOutputEmptyFcnM-filecallbackfunctiontoexecutewhentheoutputbufferisemptyPinStatusFcnM-filecallbackfunctiontoexecutewhentheCD,CTS,DSR,orRIpinschangestateTimerFcnM-filecallbackfunctiontoexecutewhenapredefinedperiodoftimepassesTimerPeriodPeriodoftimebetweentimereventsControlPinPropertiesDataTerminalReadyStateoftheDTRpinFlowControlDataflowcontrolmethodtousePinStatusStateoftheCD,CTS,DSR,andRIpinsRequestToSendStateoftheRTSpinRecordingPropertiesRecordDetailAmountofinformationsavedtoarecordfileRecordModeSpecifywhetherdataandeventinformationaresavedtoonerecordfileortomultiplerecordfilesRecordNameNameoftherecordfileRecordStatusIndicateifdataandeventinformationaresavedtoarecordfileGeneralPurposePropertiesByteOrderOrderinwhichthedevicestoresbytesNameDescriptivenamefortheserialportobjectPortPlatform-specificserialportnameStatusIndicateiftheserialportobjectisconnectedtothedeviceTagLabeltoassociatewithaserialportobjectTypeObjecttypeGeneralPurposePropertiesUserDataDatayouwanttoassociatewithaserialportobject一般操作串口步骤为:(保护现场)-》新建串口对象-》设置相关参数-》读写操作-》断开连接,清理现场-》(恢复现场)新建串口对象:serial函数,以提供各种参数新建串口对象设置参数:可以在serial函数中指定参数,也可以用set函数改变和设置特定参数。读写操作:和C语言中文件读写操作很想,以object对象文件描述符进行操作。主要操作函数为:fprintf,写函数,以字符方式写fwrite,写函数,以二进制方式写fscanf,读函数,以字符方式读,以Terminator为结束符,带有超时返回功能fread,读函数,以而进制方式读,读指定字符数fgets,读函数,以字符方式读,包括Terminatorfgetl,读函数,以字符方式读,忽略Terminator辅助操作。在串口中有四个变量:InputBufferSize,OutputBufferSize,ValuesSent,ValuesReceived,字面意思很好理解,在MATLAB中,输入输出都是有相应缓冲区的,防止数据丢失,也给数据流提供更灵活的控制。可是设置适当的缓冲区长度和检测接受或者发送的字符个数来进行相关操作,在我的试验中,需要做FFT,做FFT需要一定的点数,我是检测ValuesReceived的值,到指定的个数时一次性读到程序中处理。以上函数具体细节参考help文档,注意字符个数和Terminator字符!断开连接:fclose(s)关闭连接delete(s)删除对象clears清除调试,当然一切事情都不会那么一帆风顺,难免出现状况,这是可以使用一些简单的操作进行调试检查,MATLAB有自己的M文件调试方式,查看串口对象变量disp等函数查看变量是否对,或者最简单的在command窗口键入对象名即可以输出对象所有参数,串口对象是否新建成功,是否重复冲突Instrumentcontroltoolbox也可以使用。在实验中,使用虚拟串口软件虚拟两个串口内部相连,进行纯软件调试,下面是我制作简单界面的程序,第一次用MATLABGUI设计。
本文标题:matlab串口编程
链接地址:https://www.777doc.com/doc-6730717 .html