API串口通信实例nhh.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《API串口通信实例nhh.docx》由会员分享,可在线阅读,更多相关《API串口通信实例nhh.docx(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一节 实现现串口通通讯的函函数及串串口编程程简介API函函数不仅仅提供了了打开和和读写通通讯端口口的操作作方法,还还提供了了名目繁繁多的函函数以支支持对串串行通讯讯的各种种操作。常常用函数数及作用用下:函数名 作用用 CreaateFFilee 打开开串口 GetCCommmStaate 检测测串口设设置 SetCCommmStaate 设置置串口 BuillderrCommmDCCB 用字字符串中中的值来来填充设设备控制制块 GetCCommmTimmeouuts 检测测通信超超时设置置 SetCCommmTimmeouuts 设置置通信超超时参数数 SetCCommmMassk 设定定被
2、监控控事件 WaittCommmEvventt 等待待被监控控事件发发生 WaittForrMulltippleOObjeectss 等待待多个被被监测对对象的结结果 WritteFiile 发送送数据 ReaddFille 接收收数据 GetOOverrlapppeddRessultt 返回回最后重重叠(异异步)操操作结果果 PurggeCoomm 清空空串口缓缓冲区,退出所所有相关关操作 CleaarCoommEErroor 更新新串口状状态结构构体,并并清除所所有串口口硬件错错误 ClosseHaandlle 关闭闭串行口口用Winndowws AAPI编编写串口口程序本本身是有有巨大优
3、优点的,因因为控制制能力会会更强,效效率也会会更高。 AAPI编编写串口口,过程程一般是是这样的的: 11、 创创建串口口句柄,用用CreeateeFille; 22、 对对串口的的参数进进行设置置,其中中比较重重要的是是波特率率(BaaudRRatee),数数据宽度度(ByytessBitts),奇奇偶校验验(Paaritty),停停止位(SStoppBitts),当当然,重重要的还还有端口口号(PPortt); 33、 然然后对串串口进行行相应的的读写操操作,这这时候用用到ReeadFFilee和WrriteeFille函数数;4、 读写写结束后后,要关关闭串口口句柄,用用ClooseFF
4、ilee。下面依次次讲述各各个步骤骤的过程程。 第二节 创建建串口句句柄打开开串口从字面上上去理解解,大家家也可以以发现CCreaateFFilee实际上上表明WWinddowss是把串串口当作作一个文文件来处处理的,所所以它也也有文件件那样的的缓冲区区、句柄柄、读写写错误等等,不同同的是,这这个文件件名字只只有固定定的几个个(一般般为四个个),而而且始终终存在(EEXSIITINNG),而而且在调调用CrreatteFiile的的时候请请注意它它的参数数。CrreatteFiile函函数原型型如下: HHANDDLE CreeateeFille(LLPCTTSTRR lppFilleNaam
5、e, DDWORRD ddwDeesirredAAcceess, DDWORRD ddwShhareeModde, LLPSEECURRITYY_ATTTRIIBUTTES lpSSecuurittyAtttriibuttes, DDWORRD ddwCrreattionnDisspossitiion, DDWORRD ddwFllagssAnddAtttribbutees, HHANDDLE hTeempllateeFille );lpFiileNNamee:指向向一个以以NULLL结束束的字符符串,该该串指定定了要创创建、打打开或截截断的文文件、管管道、通通信源、磁磁盘设备备或控制制台的名
6、名字。当当用CrreatteFiile打打开串口口时,这这个参数数可用“CCOM11”指定定串口11,用“CCOM22”指定定串口22,依此此类推。dwDeesirreAcccesss: 指定对对文件访访问的类类型,该该参数可可以为GGENEERICC_REEAD(指定对对该文件件的读访访问权)或GEENERRIC_WRIITE(指指定该文文件的写写访问权权)两个个值之一一或同时时为为这这两个值值。用EENERRIC_REAAD|GGENEERICC_WRRITEE则指定定可对串串口进行行读写;dwShhareeModde:指指定此文文件可以以怎样被被共享。因因为串行行口不支支持任何何共享模模
7、式,所所以dwwShaareMModee必须设设为;lpSeecurrityyAtttribbutees定义义安全属属性,一一般不用用,可设设为NUULL。WWin 9x下下该参数数被忽略略;dwCrreattionnDisstriibuttionn定义文文件创建建方式, 对串口口必须设设为OPPEN_EXIISTIING,表表示打开开已经存存在的文文件;dwFllagssAnddAtttribbutees为该该文件指指定定义义文件属属性和标标志,这这个程序序中设为为FILLE_FFLAGG_OVVERLLAPPPED,表表示异步步通信方方式; hhTemmplaateFFilee指向一一个模
8、板板文件的的句柄,串串口无模模板可言言,设为为NULLL。在在 Wiindoows 9x下下该参数数必须为为NULLL。串口被成成功打开开时,返返回其句句柄,否否则返回回INVVALIID_HHANDDLE_vallue(0XFFFFFFFFFFF)。上面说到到了异步步,那什什么是异异步呢?异步是是相对同同步这个个概念而而言的。异异步,就就是说,在进行串串口读写写操作时时,不用用等到II/O操操作完成成后函数数才返回回,也就就是说,异异步可以以更快得得响应用户户操作;同步,相相反,响响应的II/O操操作必须须完成后后函数才才返回,否否则阻塞塞线程。对对于一些很简简单的通通讯程序序来说,可可以选
9、择择同步,这这样可以以省去很很多错误误检查,但但是对于于复杂一一点的应应用程序序,异步步是最佳佳选择。实例1:/* eexammplee1.ccpp */* llishhaoaan 220099-066-299 */* */#inccludde #inccludde #inccludde booll oppenpportt(chhar *poortnnamee)/打开串串口HANDDLE hCoomm;hCommm = CrreatteFiile(porrtnaame, /串口号号 GGENEERICC_REEAD | GGENEERICC_WRRITEE, /允许许读写 00, /通讯讯设备
10、必必须以独独占方式式打开 00, /无安安全属性性 OOPENN_EXXISTTINGG, /通讯讯设备已已存在 FFILEE_FLLAG_OVEERLAAPPEED, /异异步I/O 00); /通通讯设备备不能用用模板打打开if (hCoomm = INVVALIID_HHANDDLE_VALLUE)ClosseHaandlle(hhCommm);retuurn FALLSE;elseeretuurn truue; voidd mmainn()booll oppen;openn=oppenpportt(ccom22);if(oopenn)prinntf(oppen commporrt ss
11、ucccesss);systtem(paausee) ;/* proograam eend*/实例2:/* eexammplee2.ccpp */* llishhaoaan 220099-066-299 */* */#inccludde #inccludde #inccludde booll oppenpportt(chhar *poortnnamee)/打开串串口HANDDLE hCoomm;hCommm = CrreatteFiile(porrtnaame, /串口号号 GGENEERICC_REEAD | GGENEERICC_WRRITEE, /允许许读写 00, /通讯讯设备必必须以
12、独独占方式式打开 00, /无安安全属性性 OOPENN_EXXISTTINGG, /通讯讯设备已已存在 00, /同步步I/OO 00); /通通讯设备备不能用用模板打打开if (hCoomm = INVVALIID_HHANDDLE_VALLUE)ClosseHaandlle(hhCommm);retuurn FALLSE;elseeretuurn truue; voidd mmainn()booll oppen;openn=oppenpportt(ccom22);if(oopenn)prinntf(oppen commporrt ssucccesss);systtem(paausee)
13、;/* proograam eend*/第三节 设置串串口在打开通通信设备备句柄后后,常常常需要对对串行口口进行一一些初始始化工作作。这需需要通过过一个DDCB结结构来进进行。DDCB结结构包含含了诸如如波特率率、每个个字符的的数据位位数、奇奇偶校验验和停止止位数等等信息。在在查询或或配置串串口的属属性时,都都要用DDCB结结构来作作为缓冲冲区。第一次打打开串口口时,串串口设置置为系统统默认值值,函数数GettCommmSttatee和SeetCoommSStatte可用用于检索索和设定定端口设设置的DDCB(设备控控制块)结构,该该结构中中BauudRaate、BByteeSizze、SSt
14、oppBitts和PPariity字字段含有有串口波波特率、数数据位数数、停止止位和奇奇偶校验验控制等等信息。程序中用用DCBB进行串串口设置置时,应应先调用用APII函数GGetCCommmStaate,来来获得串串口的设设置信息息: GetCCommmStaate()用途:取取得串口口当前状状态 原型:BBOOLL GeetCoommSStatte(HHANDDLE hFiile, LPPDCBB lppDCBB);参数说明明: -hFiile:串口句句柄 -lpDDCB:设备控控制块(Devvicee Coontrrol Bloock)结构地地址。此此结构中中含有和和设备相相关的参参数。
15、此此处是与与串口相相关的参参数。由由于参数数非常多多,当需需要设置置串口参参数时,通通常是先先取得串串口的参参数结构构,修改改部分参参数后再再将参数数结构写写入。然后在需需要设置置的地方方对dccb进行行设置。串串口有很很多的属属性,上上面也已已经介绍绍了一些些最重要要的参数数。这里里介绍数数据结构构DCBB:typeedeff sttrucct _DCBB / dcbb DDWORRD DDCBllenggth; /DCBB结构体体大小 DDWORRD BBauddRatte; /波波特率 DDWORRD ffBinnaryy: 11; /是否是是二进制制,一般般设置为为TRUUE DDWO
16、RRD ffParrityy: 11;/是否进进行奇偶偶校验 DDWORRD ffOuttxCttsFllow:1; /CCTS线线上的硬硬件握手手 DDWORRD ffOuttxDssrFllow:1; /DDSR线线上的硬硬件握手手 DDWORRD ffDtrrConntrool:22; /DTTR控制制 DDWORRD ffDsrrSennsittiviity:1; DDWORRD ffTXCConttinuueOnnXofff:11; DDWORRD ffOuttX: 1; /是否使使用XOON/XXOFFF协议 DDWORRD ffInXX: 11; /是否否使用XXON/XOFFF
17、协议议 DDWORRD ffErrrorCCharr: 11; /发发送错误误协议 DDWORRD ffNulll: 1; DDWORRD ffRtssConntrool:22; DDWORRD ffAboortOOnErrrorr:1; DDWORRD ffDummmy22:177; WWORDD wRReseerveed; WWORDD XoonLiim; /设置置在XOON字符符发送之之前innbuff中允许许的最少少字节数数 WWORDD XooffLLim; /在发发送XOOFF字字符之前前outtbuff中允许许的最多多字节数数 BBYTEE ByyteSSizee; /数据据宽度
18、,一一般为88,有时时候为77 BBYTEE Paaritty; /奇偶偶校验 BBYTEE SttopBBitss; /停停止位数数 ccharr XoonChhar; /设置置表示XXON字字符的字字符,一一般是采采用0xx11这这个数值值 ccharr XooffCCharr; /设置置表示XXOFFF字符的的字符,一般是是采用00x133这个数数值 ccharr ErrrorrChaar; ccharr EoofChhar; ccharr EvvtChhar; WWORDD wRReseerveed1; DCCB; 我我们真正正在串口口编程中中用到的的数据成成员没有有几个,在在此仅介介
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- API 串口 通信 实例 nhh
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内