串口操作之API

来源:互联网 发布:java声明多维数组 编辑:程序博客网 时间:2024/05/20 20:47

串口操作之API

                                

1. CreateFile

功能:

主要用来打开和创建文件,也可以用来打开和创建管道、邮槽、通信服务、设备以及控制台缓冲区。

函数原型:

HANDLE CreateFile(

LPCTSTR lpFileName,    // 指向文件名的指针

DWORD dwDesiredAccess, // 访问模式(写/读)

DWORD dwShareMode,     // 共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针

DWORD dwCreationDisposition, // 如何创建

DWORD dwFlagsAndAttributes,  // 文件属性

HANDLE hTemplateFile         // 用于复制文件句柄

);

说明:

 

dwDesiredAccess 

GENERIC_READ

允许对设备进行读访问

GENERIC_WRITE

允许对设备进行写访问

0

只允许获取与一个设备有关的信息

 

dwShareMode 

FILE_SHARE_READ

允许对文件进行共享访问

FILE_SHARE_WRITE

允许对文件进行共享访问

0

不共享

 

 

dwCreationDisposition 

CREATE_NEW

创建文件;如文件存在则会出错

CREATE_ALWAY

创建文件,会改写前一个文件

OPEN_EXISTING

文件必须已经存在

OPEN_ALWAYS

如文件不存在则创建它

TRUNCATE_EXISTING

现有文件缩短为零长度

 

 

 

 

 

 

dwFlagsAndAttributes

FILE_ATTRIBUTE_ARCHIVE

标记归档属性

FILE_ATTRIBUTE_COMPRESSED 

将文件标记为已压缩

FILE_ATTRIBUTE_NORMAL

默认属性

FILE_ATTRIBUTE_HIDDEN 

隐藏文件或目录

FILE_ATTRIBUTE_READONLY

文件为只读

FILE_ATTRIBUTE_SYSTEM 

文件为系统文件

FILE_FLAG_WRITE_THROUGH 

系统不得推迟对文件的写操作

FILE_FLAG_OVERLAPPED 

允许对文件进行重叠操作

FILE_FLAG_NO_BUFFERING

禁止对文件进行缓冲处理

FILE_FLAG_RANDOM_ACCESS 

针对随机访问对文件缓冲进行优化

FILE_FLAG_SEQUENTIAL_SCAN 

针对连续访问对文件缓冲进行优化

FILE_FLAG_DELETE_ON_CLOSE 

关闭了上一次打开的句柄后,将文件删除

 

返回文件句柄为INVALID_HANDLE_VALUE表示出错,会设置GetLastError。即使函数成功,但若文件存在,且指定了CREATE_ALWAYS  OPEN_ALWAYSGetLastError也会设为ERROR_ALREADY_EXISTS

 

用法举例:

HANDLE hCom;

hCom = CreateFile("COM1",

GENERIC_READ|GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,

NULL);

if(hCom == INVALID_HANDLE_VALUE)

{

     MessageBox("打开端口失败。");

}

  

2. GetCommState

功能:

主要用于获取串行口的当前配置。

函数原型:

BOOL GetCommState

HANDLE hFile, // 文件句柄

LPDCB  lpDCB  // 指向设备控制块DCB

;

3. SetCommState

功能:

主要用于设置串行口的配置。

函数原型:

BOOL SetCommState

HANDLE hFile, // 文件句柄

LPDCB  lpDCB  // 指向设备控制块DCB

;

 

用法举例:

HANDLE hCom;

hCom = CreateFile(…);

DCB dcb;

GetCommState(hCom, &dcb);

dcb.BaudRate = 9600;

SetCommState(hCom, &dcb);

  

 

4. SetupComm

功能:

主要用于配置串口接收和发送缓冲区。

函数原型:

BOOL SetupComm

HANDLE hFile,    // 文件句柄

DWORD dwInQueue, // 接收缓冲区大小

DWORD dwOutQueue // 发送缓冲区大小

;

5. PurgeComm

功能:

主要用于清空串口接收和发送缓冲区。

函数原型:

BOOL PurgeComm

HANDLE  hFile,   // 文件句柄

DWORD   dwFlages // 执行的动作

;

说明:

 

dwFlages

PURGE_TXABORT

中断所有写操作并立即返回,即使写操作还没有完成

PURGE_RXABORT

中断所有读操作并立即返回,即使读操作还没有完成

PURGE_TXCLEAR

清空发送缓冲区

PURGE_RXCLEAR

清空接收缓冲区

 

  

6. GetCommTimeouts

功能:

读取TimeOut的值。

函数原型:

BOOL GetCommTimeouts

HANDLE hFile, // 文件句柄

LPCOMMTIMEOUTS lpCommTimeouts // COMMTIMEOUTS结构指针

;

7. SetCommTimeouts

功能:

设置TimeOut的值。

函数原型:

BOOL SetCommTimeouts

HANDLE hFile, // 文件句柄

LPCOMMTIMEOUTS lpCommTimeouts // COMMTIMEOUTS结构指针

;

 

COMMTIMEOUTS结构:

typedef struct _COMMTIMEOUTS { 

DWORD ReadIntervalTimeout;        // 读间隔超时

DWORD ReadTotalTimeoutMultiplier; // 读时间系数

DWORD ReadTotalTimeoutConstant;   // 读时间常量

DWORD WriteTotalTimeoutMultiplier;// 写时间系数

DWORD WriteTotalTimeoutConstant;  // 写时间常量

}COMMTIMEOUTS,*LPCOMMTIMEOUTS;

COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:

总超时 = 时间系数 × 要求读/写的字符数 + 时间常量

 

8. GetCommMask

功能:

得到设置的通信事件的掩码。

函数原型:

BOOL GetCommMask

HANDLE hFile,     // 文件句柄

LPDWORD lpEvtMask // 事件掩码

;

9. SetCommMask

功能:

设置想要得到的通信事件的掩码。

函数原型:

BOOL SetCommMask

HANDLE hFile,   // 文件句柄

DWORD dwEvtMask // 事件掩码

;

说明:

可设置的通信事件标志(即SetCommMask()函数所设置的掩码),可以有EV_BREAKEV_CTSEV_DSR EV_ERREV_RINGEV_RLSDEV_RXCHAREV_RXFLAGEV_TXEMPTY

注:若对端口数据的响应时间要求较严格,可采用事件驱动I/O读写,Windows定义了9种串口通信事件,较常用的有:

EV_RXCHAR: 接收到一个字节,并放入输入缓冲区。

EV_TXEMPTY: 输出缓冲区中的最后一个字符发送出去。

EV_RXFLAG: 接收到事件字符(DCB结构中EvtChar成员),放入输入缓冲区。

 

 

10. WaitCommEvent

功能:

等待设定的通讯事件的发生,阻塞方式。

函数原型:

BOOL WaitCommEvent

HANDLE hFile,      // 文件句柄

LPDWORD lpEvtMask, // 事件掩码

LPOVERLAPPED lpOverlapped, //

;

 

11. ClearCommError

功能:

清除错误情况, 但是实际上它还可以拿来取得目前通讯设备的一些信息.

函数原型:

BOOL ClearCommError

HANDLE hFile,     // 文件句柄

LPDWORD lpErrors, // 接收时的错误码

LPCOMSTAT lpStat  // 通信状态

;

 

 12. ReadFile

功能:

读取串口数据。

函数原型:

BOOL ReadFile

HANDLE hFile,    // 文件句柄

LPVOID lpBuffer, // 读缓冲区

DWORD nNumberOfBytesToRead, // 要求读入的字节数

LPDWORD lpNumberOfBytesRead, // 实际读入的字节数

LPOVERLAPPED lpOverlapped    // 指向一个OVERLAPPED结构

; //若返回TRUE则表明操作成功

 

13. WriteFile

功能:

向串口发送数据。

函数原型:

BOOL WriteFile

HANDLE hFile,     // 文件句柄

LPCVOID lpBuffer, // 写缓冲区

DWORD nNumberOfBytesToWrite,   // 要求写入的字节数

LPDWORD lpNumberOfBytesWritten,// 实际写入的字节数

LPOVERLAPPED lpOverlapped      // 指向一个OVERLAPPED结构

;

  

14. CloseHandle

功能:

关闭串口。

函数原型:

BOOL CloseHandle

HANDLE hObject // 文件句柄

 

原创粉丝点击