资源描述:
《第11章+串口编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第11章串口编程11.1串行通信的基本原理11.2基于Win32API串口编程11.3基于控件串口编程11.4第三方类串口编程11.1串行通信的基本原理在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。11.1串行通信的基本原理串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。在Windows环境(WindowsNT、Win98、Windows2000)下,串口是
2、系统资源的一部分。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。11.1串行通信的基本原理串口信号线的接法一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯的主要信号线相同。①主要信号线定义:2脚:发送数据TXD;3脚:接收数据RXD;4脚:请求发送RTS;5脚:清除发送CTS;6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD;1脚:保护地;7脚:信号地。11.1串行通信的基本原理②电气特性:数
3、据传输速率最大可到20Kbps,最大距离仅15m.注:看了微软的MSDN6.0,其WindowsAPI中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256Kbps!也不知道到底是什么串行通讯设备?但不管怎样,一般主机和单片机的串口通讯大多都在9600bps,可以满足通讯需求。11.1串行通信的基本原理③接口的典型应用:大多数计算机应用系统与智能单元之间只需使用3到5根信号线即可工作。这时,除了TXD、RXD以外,还需使用RTS、CTS、DCD、DTR、DSR等信
4、号线。(当然,在程序中也需要对相应的信号线进行设置。)最简单的RS232-C信号线接法11.2基于Win32API串口编程1、API描述在WIN32API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致。打开串口配置串口超时设置事件设置读串口写串口关闭串口11.2基于Win32API串口编程打开串口Win32中用于打开串口的API函数为CreateFile,其原型为:HANDLECreateFile(LPCTSTRlpFileName,//将要打开的串口逻辑名,如COM1或COM2DWORDdwAccess,//指定串
5、口访问的类型,可以是读取、写入或两者并列DWORDdwShareMode,//指定共享属性,由于串口不能共享,该参数必须置为0LPSECURITY_ATTRIBUTESlpsa,//引用安全性属性结构,缺省值为NULLDWORDdwCreate,//创建标志,对串口操作该参数必须置为OPENEXISTINGDWORDdwAttrsAndFlags,//属性描述,用于指定该串口是否可进行异步操作,//FILE_FLAG_OVERLAPPED:可使用异步的I/OHANDLEhTemplateFile//指向模板文件的句柄,对串口而言该参数必须置为
6、NULL);11.2基于Win32API串口编程例如,以下程序用于以同步读写方式打开串口COM1:HANDLEhCom;DWORDdwError;hCon=CreateFile("COM1",GENERIC_READ
7、GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(hCom==(HANDLE)0xFFFFFFFF){dwError=GetLastError();MessageBox(dwError);}11.2基于Win32API串口编程配置串口配置串口是通过改变设备控制块DCB(Devi
8、ceControlBlock)的成员变量值来实现的,接收缓冲区和发送缓冲区的大小可通过SetupComm函数来设置。DCB结构体定义为:typedefstruct_DCB{//dcbDWORDDCBlength;//sizeof(DCB)DWORDBaudRate;//currentbaudrateDWORDfBinary:1;//binarymode,noEOFcheckDWORDfParity:1;//enableparitycheckingDWORDfOutxCtsFlow:1;//CTSoutputflowcontrolDWORDfO
9、utxDsrFlow:1;//DSRoutputflowcontrolDWORDfDtrControl:2;//DTRflowcontroltypeDWORDfDs