基于vc++开发串口通信地方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于vc开发串口通信地方法

基于VC++开发串口通信的方法 串行通信中的关键是串行通信设备的初始化、数据的发送和接收及其实现方式。        在Dos环境下,用户可以直接对通信设备编程,可以通过查询中断的方式使用通信设备。但是Windows不提倡应用程序直接控制硬件,而是通过Windows所提供的设备驱动程序来进行数据传递。在Windows环境中,通信支持中断功能,当通信设备接收到一个输入字符的时候就产生一个硬件中断,该中断暂停应用程序的执行,并把接收到的字符存入到一个叫接收数据队列的内存缓冲区中。而待发数据也先存入到一个叫发送数据队列的内存缓冲区中,再由Windows系统负责在后台进行发送。因此,在Windows下接收和发送数据的关键就是如何从接收队列取数据和如何向发送数据队列发数据。Windows提供了相应的API函数来实现这些功能。        串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作。在Win32环境下,可以把串口看作由文件系统访问的设备。使用标准的CreateFile()函数打开端口,再使用ReadFile()和WriteFile()函数读写数据,就如同端口只是一个文件对象一样。对于串行通信,Win 32提供了相应的文件I/O函数与通信函数,使用这些函数,可以编制出符合不同需要的通信程序。        通常实现串行通信的步骤如下:        1 ) 按协议的设置初始化并打开串行口,这样做就是通知Windows本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。        2) 配置这个串行口。        3) 在串口上往返地传输数据,并在传输过程中进行校验。        4) 不需要此串口时,关闭串口,即释放串口以供其它应用程序使用。        在这四个步骤中,主要的程序代码集中在第3步。        本文就Win32环境下基于VC++开发串口通信三种方式的编程问题展开讨论。        1采用MFC串口通信编程        Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮件槽、磁盘还是控制台都被看作是文件。因此,可以用MFC中的CFile类来实现对串口的操作,并且Win32中的文件I/O函数支持重叠式输入输出,这使得线程从费时的I/O操作中解放出来。Win32 API包含了一系列访问通信资源的通信函数。        通常采用MFC的串口通信编程主要步骤如下:        1)在MainFrmcpp中定义全局变量        HANDLE hCom;//准备打开的串口的句柄        2)打开串口        Windows通信会话以调用CreateFile()函数打开串行口开始。通信程序从CreateFile处指定串口设备及相关的操作属性,并返回一个句柄,该句柄将被用于后续的通信操作。        3)串口初始化(设置串口参数及进行串口超时设置)        在打开通信设备句柄后,通常要对串口进行初始化工作(即配置参数如波特率、数据位数、停止位数、奇偶校验以及握手和流控协议等),配置串口通过改变数据结构——设备控制块DCB(Device Control Block)来实现。结构DCB有近30个数据成员,对于采用3线方式的串行通信来说,只要设置好波特率、数据位、停止位、校验位等几个关键参数就可以。        调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。要修改串口配置,应该先修改串口的DCB结构,然后调用SetCommState函数用指定的DCB结构来设置串口。        除了在结构DCB中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。超时设置是为了避免当通信过程中由于数据传输突然中断时而造成对串口的读写操作进入无限期的等待状态。超时设置过程分为两步,首先设置超时结构COMMTIMEOUTS中的五个成员,然后调用SetCommTimeouts()函数设置超时值。        这里介绍一种简捷的方法可以做到不了解DCB的详细内容也可以设置好串行通信参数:即利用BuildCommDCB函数来设置DCB,然后用函数SetCommState()配置串行通信口。        DCB dcb;//定义数据控制块结构        GetCommState(hCom,&dcb);//读串口原来的参数设置        BuildCommDCB(“COM2:9600,N,8,1”,& dcb);//创建数据控制块DCB结构        SetCommState(hCom,&dcb);//将结构DCB的主要参数设置到串口COM2        其中的BuildCommDCB(“C

文档评论(0)

vshoulrengb3 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档