vc串行通信相关函数列表

2019-01-07 18:29

vc串行通信相关函数列表.txt13母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。

函数名 作用

1.CreateFile 打开串口

2.GetCommState 检测串口设置

3.SetCommState 设置串口

BuilderCommDCB 用字符串中的值来填充设备控制块

GetCommTimeouts 检测通信超时设置

SetCommTimeouts 设置通信超时参数

SetCommMask 设定被监控事件

WaitCommEvent 等待被监控事件发生

WaitForMultipleObjects 等待多个被监测对象的结果

4.WriteFile 发送数据

ReadFile 接收数据

GetOverlappedResult 返回最后重叠(异步)操作结果

5.PurgeComm 清空串口缓冲区 , 退出所有相关操作

6.ClearCommError 更新串口状态结构体 , 并清除所有串口硬件错误

7.CloseHandle 关闭串行口

红颜色标出来的是我用到的一些函数,因为是最简单的应用,所以用到的函数也都是最最简单的一些,都是非常容易理解的。只是通过计算机向 51 发送指令所以连 ReadFile ()都没用到。省了很多事。。。。。。

1.CreateFile()

功能:打开串口设备

函数原型

HANDLE CreateFile ( LPCTSTR lpFileName,

// 串口名称字符串;如: \或 \

DWORD dwDesiredAccess, // 设置读写属性(访问模式 );一般为 GENERIC_READ|GENERIC_WRITE,

DWORD dwCreationDistribution, // 创建方式,串口设置必须设置此值; 在这里 \必须 \为 OPEN_EXISTING

DWORD dwFlagsAndAttributes,

// 文件属性和标志;在这里我们设置成

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性;一般为 NULL DWORD dwShareMode, // 共享模式; \必须 \为 0, 即不能共享

FILE_FLAG_OVERLAPPED ,实现异步 I/O 关于 //Overlapped I/O 模型,自己上网搜了去理解吧,我自己也说不清楚,懵懂的很。

HANDLE hTemplateFile

) ; 说明:

如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回 INVALID_HANDLE_VALUE 。

2.GetCommState ()

功能:获得串口状态

BOOL GetCommState (

HANDLE hFile, // handle of communications device

LPDCB lpDCB // address of device-control block structure ) ;

// 临时文件的句柄,通常为 NULL

3.SetCommState()

功能:设置串口状态

) ;

LPDCB lpDCB // address of device-control block structure BOOL SetCommState (

HANDLE hFile, // handle of communications device

说明:

在打开通信设备句柄后,常常需要对串行口进行一些初始化工作。这需要通过一个 DCB 结构来进行。 DCB 结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置置串行口的属性时,都要用 DCB 结构来作为缓冲区。

调用 GetCommState 函数可以获得串口的配置,该函数把当前配置填充到一个 DCB 结构中。一般在用 CreateFile 打开串行口后,可以调用 GetCommState 函数来获取串行口的初始配置。要修改串行口的配置,应该先修改 DCB 结构,然后再调用 SetCommState 函数用指定的 DCB 结构来设置串行口

For example:

DCB dcb;

memset(&dec,0,sizeof(dcb));

if(!GetCommState(HComm,&dcb))// 获取当前 DCB 配置

return FALSE;

dcb.BaudRate = CBR_9600;// 修改数据传输率。。。。这里还有很多参数可以修改,比如,停止位,有无校验等等,具体参见 dcb 结构。

............

if(SetCommState(hComm,&dcb))// 设置新参数

...... // 错误处理

4.WriteFile ()

功能:来将资料写入 Serial port.

函数原型:

BOOL WriteFile (

HANDLE hFile, // handle to file to write to

LPCVOID lpBuffer, // 写如字符串的首地址

DWORD nNumberOfBytesToWrite, // 要写如字符的个数

LPDWORD lpNumberOfBytesWritten, // 实际写入字节数,为一个 int 型指针

LPOVERLAPPED lpOverlapped // i/o 重构结构,我讲不清楚, sorry

) ;

说明:

ReadFile 函数只要在串行口输入缓冲区中读入指定数量的字符,就算完成操作。

而 WriteFile 函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串行口送出去后才算完成操作。

当 ReadFile 和 WriteFile 返回 FALSE 时,不一定就是操作失败,线程应该调用 GetLastError 函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回 FALSE ,而且 GetLastError 函数返回 ERROR_IO_PENDING 。如果 GetLastError 函数返回 ERROR_IO_PENDING ,则说明重叠操作还为完成,线程可以等待操作完成。

有两种等待办法:一种办法是用象 WaitForSingleObject 这样的等待函数来等待 OVERLAPPED 结构的 hEvent 成员,可以规定等待的时间,在等待函数返回后,调用 GetOverlappedResult 。

另一种办法是调用 GetOverlappedResult 函数等待,如果指定该函数的 bWait 参数为 TRUE ,

那么该函数将等待 OVERLAPPED 结构的 hEvent 事件。 GetOverlappedResult 可以返回一个 OVERLAPPED 结构来报告包括实际传输字节在内的重叠操作结果。

如果规定了读 / 写操作的超时,那么当超过规定时间后, hEvent 成员会变成有信号的。因此,在超时发生后, WaitForSingleObject 和 GetOverlappedResult 都会结束等待。 WaitForSingleObject 的 dwMilliseconds 参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意 GetOverlappedResult 不能设置等待的时限,因此如果 hEvent 成员无信号,则该函数将一直等待下去

5.PurgeComm ()

功能:终止目前正在进行的读或写的动作

函数原型:

BOOL PurgeComm (

HANDLE hFile, // handle of communications resource

DWORD dwFlags // action to perform

) ;

参数说明:

HANDLE hFile,// 串口名称字符串

dwFlags 共有四种 flags:

PURGE_TXABORT: 终止目前正在进行的(背景)写入动作

PURGE_RXABORT: 终正目前正在进行的(背景)读取动作

PURGE_TXCLEAR: flush 写入的 buffer

PURGE_TXCLEAR: flush 读取的 buffer

调用 PurgeComm 函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。

6.ClearCommError ()


vc串行通信相关函数列表.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2022年中国精甲醇行业前景研究与市场年度调研报告(目录)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: