关于串口通讯函数的详解.doc_第1页
关于串口通讯函数的详解.doc_第2页
关于串口通讯函数的详解.doc_第3页
关于串口通讯函数的详解.doc_第4页
关于串口通讯函数的详解.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

串口通讯API详解一:函数列表1:CreateFile打开串口函数2:SetupComm缓冲区分配函数3:GetCommState获取当前串口配置函数4:SetCommState设置当前串口配置函数5:GetCommProperties获取串口属性函数6:BuildCommDCB/DCB填充函数7:BuildCommDCBAndTimeouts/DCB和Timeouts填充函数8:GetCommTimeouts/获取超时函数9:SetCommTimeouts设置超时函数10:ReadFile/ReadFileEx串口读取数据函数11:WriteFile/WriteFileEx串口写数据函数12:ClearCommError清除错误标志函数13:PurgeComm终止读写/清空缓冲区函数14:FlushFileBuffer清空缓冲区函数15:GetOverlappedResult获取异步IO操作结果获取函数16:WaitforSingleObject等到事件函数17:SetCommMask设置串口监视通讯事件18:GetCommMask获取串口当前设置的通讯事件19:WaitCommEvent通讯事件监测函数20:CreateEvent创建事件函数21:EscapeCommFunction握手信号设置函数22:SetCommBreak通讯设备挂起函数23:ClearCommBreak通讯设备恢复函数二:结构接收1:DCB结构DCB结构有几个经常用到的成员变量,分别为BaudRate-通讯波特率大小,一般为CBR_9600,CBR_19200,CBR_38400等。FParity-是否运行奇偶校验FOutxCtsFlow指定CTS信号是否检测输出流控制,该值为TRUE且CTS为OFF时,发生被暂停,直到CTS回复为ON状态。FOutX设置在发送时是否应用XON/XOFF流控制FInX设置在接收是是否应用XON/XOFF流控制fRtsControl是否允许RTS控制ByteSize设置数据位Parity设置奇偶校验方式StopBits设置停止位】2:COMMTIMEOUTS结构超时结构有一下几个重要的成员变量ReadIntervalTimeout:以毫秒为单位设置通讯线路上两个字符到达之间的最大时间间隔。ReadTotalTimeoutMultiplier:以毫秒为单位设置一个用来计算读操作总超时时间的时间系数。ReadTotalTimeoutConstant:以毫秒为单位设置一个用来计算读操作总超时时间的时间常量ReadTotalTimeoutMultiplier:以毫秒为单位设置一个用来计算写操作总超时时间的时间系数ReadTotalTimeoutConstant:以毫秒为单位设置一个用来计算读操作总超时时间的时间常量 即:读操作总超时时间=读时间系数 * 要求读取的字节数 + 读时间常量写操作总超时时间=写时间系数 * 要求读取的字节数 + 写时间常量3:OVERLAPPED结构Typedef struct _OVERLAPPEDDWORD Internal;/系统内部使用DWORD InternalHigh;/系统内部使用DWORD OffSet;/指定开始传输数据的位置DWORD offSetHigh;/定义OffSet的高字节HANDLE hEvent;/数据传输完成时候的句柄其中最重要的是hEvent函数,hEvent是一个事件对象句柄,线程应该用CreateEvent为hEvent创建一个手工重置事件。作为同步对象使用。如果异步函数操作完成(包括超时完成),则会置hEvent为有信号状态,如果操作未完成操作就返回,则为无信号状态。每次异步函数操作的时候,根据异步操作的结果会重置hEvent状态。可以用WaitforSingleObject或者GetOverlappedResult来等待hEvent信号。4:COMMSTAT结构在串口通讯过程中,如果奇偶校验,终端等错误,I/O操作就会停止,如果要进一步进行I/O操作,则必须调研ClearCommError清除错误标志。其中关键字段为cbInQue和cbOutQue。分别为串行设备接收到的字节数和设备发生缓冲区还没有发送出去的用户数据字节数,但这些字节并不已经全部由ReadFile读出。三:详细介绍1:CreateFile创建串口函数打开串口函数,第一个参数为文件名或者串口名,比如”COM1,baud=9600,parity=0,data=8,stop=1”或者“c:temp.txt”等。第二个参数为访问模式,一般为GENERIC_READ|GENERIC_WRITE。第三个参数为0表示不共享。第四个为安全属性,一般设置为NULL,第五个参数为创建方式,一般为OPEN_EXISTING,如果是文件,可以为OPEN_EXISTING。第六个参数很重要,如果是异步操作,设置为FILE_FLAG_OVERLAPPED,否则为FILE_ARRIBUTE_NORMAL。第七个函数一般为0.2:SetupComm缓冲区分配函数第一个参数为通信设备句柄,CreateFile返回的有效句柄,第二个参数为输入缓冲区大小,第三个参数为输出缓冲区函数。3:GetCommState获取当前系统配置函数第一个参数为通讯设备句柄,第二个参数为指向DCB结构的指针。4:SetCommState设置系统配置函数参数同GetCommState5:GetCommProperties获取串口属性函数第一个参数为通讯设备句柄,第二个参数为指向COMMPROP结构的指针。6:BuildCommDCB设备控制块填充函数第一个参数为指向设备控制字符串的字符串,第二个为指向DCB结构。第一个参数格式示例如下:baud=%d parity=%c data=%d stop=%d。而DCB结构在前面有所叙述。第一个参数有三种格式,分别为无后缀,带字符x后缀,带字符p后缀。7:BuildCommDCBAndTimeouts设备控制块DCB和超时Timeouts填充函数第一个参数为指向设备控制字符串指针,第二个为指向DCB结构的指针,第三个为指向COMMTIMEOUTS结构的指针。8:GetCommTimeouts超时结构获取函数。第一个参数是由CreateFile得到的句柄,第二个参数指向超时结构的指针。9:SetCommTimeouts超时设置函数参数同GetCommTimeouts。10:ReadFile/ReadFileEx读串口函数ReadFile函数:第一个参数为通讯设备句柄,第二个参数为指向接收缓冲区的指针,第三个参数为要从串口接收的数据字节数,第四个参数指向DWORD变量的指针,该地址存储实际从串口设备读出的字节数。第五个参数为指向OVERLAPPED结构。ReadFileEx函数:前三个参数同ReadFile,第四个参数指向OVERLAPPED结构,第五个参数为指向OVERLAPPED_COMPLETION_ROUTINE的指针。指向一个IO完成例程。11:WriteFile/WriteFileEx函数用于写串口操作,第一个参数为通讯设备句柄,第二个参数为指向发送缓冲区的指针,第三个参数为要向串口写入的缓冲区字节数,第四个参数返回实际写入的字节数。第五个参数为指向OVERLAPPED结构的指针。WriteFileEx函数的参数同ReadFileEx函数12:ClearCommError清除错误标志函数第一个参数为通讯设备句柄,第一个参数指向DWORD结构的指针,第三个参数最重要,指向COMSTAT结构的指针,该结构返回设备状态信息。13:PurgeComm终止读写/清空缓冲区函数该函数终止正在进行的读写操作,并且清空输入和输出缓冲区的内容。第一个参数为通讯设备句柄,第二个参数为DWORD类型的操作代码。可以为PRGE_TXABORT, PRGE_RXABORT, PRGE_TXCLEAR和PRGE_RXCLEAR操作。14:FlushFileBuffer清空缓冲区函数该函数先将发送缓冲区所有内容发生完毕之后,才进行缓冲区的清空操作。只有一个通讯设备句柄参数。15:GetOverlappedResult异步IO操作结果获取函数第一个参数为通讯设备句柄,第二个参数指向OVERLAPPED结构的指针,第三个参数为指向DWORD的指针,该地址存储读写操作实际传输的字节数。第四个参数类型为BOLL,指明函数是否等待被挂起的异步IO完成。16:WaitForSingleObject异步IO操作事件获取函数第一个参数为IO操作的事件句柄,第二个参数为等待超时时间上限。对于WaitForMultipleObject第一个参数为事件句柄数目,第二个参数为指向事件数组的指针,第三个参数指明是否等待全部事件才返回,第四个参数为等待超时时间限。17:SetCommMask通讯事件设置函数第一个参数为通讯设备句柄,第二个参数为检测通讯设备事件的掩码,DWORD类型,可以为EV_RXFLAG,EV_RXCHAR等。18:GetCommMask函数获取当前通讯设备正在发生的通讯事件,第一个参数为通讯设备句柄,第二个参数为指向DWORD结构的指针,用于获取当前通讯设备设置的检测事件类型。19:WaitCommEvent通讯事件监测函数第一个参数为通讯设备句柄,第二个函数为指向DWORD的指针,用于返回当前正在发生的通讯事件掩码,第三个为指向OVERLAPPED结构的指针,必须要通讯设备句柄创建时为OVERLAPPED方式才有效。那么该函数以异步方式执行,如果通讯设备句柄不是以OVERLAPPED结构创建,则以同步方式进行。成功返回非零值,否则返回0,可以用GetLastError获取进一步消息。注意:一旦设置了OVERLAPPED结构的hEvent成员,那么当异步IO操作完成后才会触发该消息,那么可以用WaitForSingelObject或者GetOverlappedResults函数等待操作的完成。20:CreateEvent函数第一个参数为默认事件安全属性,一般为NULL,第二个参数指定是否为手工重置事件,第三个参数指明初始状态事件是否有效,第四个参数为事件的名称。21:EscapeCommFunction函数该函数可以将硬件握手信号置为ON或者OFF.也可以设置软件模拟XON和XOFF字符的发送和接收。同时该函数还可以清除终止条件,这与SetCommBreak和CleraCommBreak函数功能相同。22:SetCommBreak通讯设备挂起函数该函数将使指定的通讯设备暂停字符传输,处于挂起状态。并使传输线除以BREAK状态。23:CleraCommBreak通讯设备恢复函数功能与Set

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论