收藏 分享(赏)

vc串行通信相关函数列表.doc

上传人:scg750829 文档编号:7229866 上传时间:2019-05-10 格式:DOC 页数:9 大小:36.50KB
下载 相关 举报
vc串行通信相关函数列表.doc_第1页
第1页 / 共9页
vc串行通信相关函数列表.doc_第2页
第2页 / 共9页
vc串行通信相关函数列表.doc_第3页
第3页 / 共9页
vc串行通信相关函数列表.doc_第4页
第4页 / 共9页
vc串行通信相关函数列表.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、vc 串行通信相关函数列表.txt13 母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。函数名 作用 1.CreateFile 打开串口 2.GetCommState 检测串口设置 3.SetCommState 设置串口 BuilderCommDCB 用字符串中的值来填充设备控制块 GetCommTimeouts 检测通信超时设置 SetCommTimeouts 设置通信超时参数 SetCommMask 设定被监控事件 WaitCommEvent 等待被监控事件发生 WaitForMultipleObjects 等待多个被监测对象的结果 4.WriteFil

2、e 发送数据 ReadFile 接收数据 GetOverlappedResult 返回最后重叠(异步)操作结果 5.PurgeComm 清空串口缓冲区 , 退出所有相关操作 6.ClearCommError 更新串口状态结构体 , 并清除所有串口硬件错误 7.CloseHandle 关闭串行口 红颜色标出来的是我用到的一些函数,因为是最简单的应用,所以用到的函数也都是最最简单的一些,都是非常容易理解的。只是通过计算机向 51 发送指令所以连 ReadFile ()都没用到。省了很多事。 。 。 。 。 。 1.CreateFile() 功能:打开串口设备 函数原型 HANDLE CreateF

3、ile ( LPCTSTR lpFileName, / 串口名称字符串;如: “COM1“ 或 “COM2“ DWORD dwDesiredAccess, / 设置读写属性(访问模式 ) ;一般为 GENERIC_READ|GENERIC_WRITE, DWORD dwShareMode, / 共享模式; “ 必须 “ 为 0, 即不能共享 LPSECURITY_ATTRIBUTES lpSecurityAttributes, / 安全属性;一般为 NULL DWORD dwCreationDistribution, / 创建方式,串口设置必须设置此值; 在这里 “ 必须 “ 为 OPEN_E

4、XISTING DWORD dwFlagsAndAttributes, / 文件属性和标志;在这里我们设置成 FILE_FLAG_OVERLAPPED ,实现异步 I/O 关于/Overlapped I/O 模型,自己上网搜了去理解吧,我自己也说不清楚,懵懂的很。 HANDLE hTemplateFile / 临时文件的句柄,通常为 NULL ) ; 说明: 如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回 INVALID_HANDLE_VALUE 。 2.GetCommState () 功能:获得串口状态 BOOL GetCommState ( HANDLE hFile, /

5、 handle of communications device LPDCB lpDCB / address of device-control block structure ) ; 3.SetCommState() 功能:设置串口状态 BOOL SetCommState ( HANDLE hFile, / handle of communications device LPDCB lpDCB / address of device-control block structure ) ; 说明: 在打开通信设备句柄后,常常需要对串行口进行一些初始化工作。这需要通过一个 DCB 结构来进行。

6、DCB 结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置置串行口的属性时,都要用 DCB 结构来作为缓冲区。 调用 GetCommState 函数可以获得串口的配置,该函数把当前配置填充到一个 DCB 结构中。一般在用 CreateFile 打开串行口后,可以调用 GetCommState 函数来获取串行口的初始配置。要修改串行口的配置,应该先修改 DCB 结构,然后再调用 SetCommState 函数用指定的 DCB 结构来设置串行口 For example: DCB dcb; memset( if(!GetCommState(HComm, dcb.Baud

7、Rate = CBR_9600;/ 修改数据传输率。 。 。 。这里还有很多参数可以修改,比如,停止位,有无校验等等,具体参见 dcb 结构。 if(SetCommState(hComm, 说明: ReadFile 函数只要在串行口输入缓冲区中读入指定数量的字符,就算完成操作。 而 WriteFile 函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串行口送出去后才算完成操作。 当 ReadFile 和 WriteFile 返回 FALSE 时,不一定就是操作失败,线程应该调用 GetLastError 函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就

8、返回 FALSE ,而且 GetLastError 函数返回 ERROR_IO_PENDING 。如果 GetLastError 函数返回 ERROR_IO_PENDING ,则说明重叠操作还为完成,线程可以等待操作完成。 有两种等待办法:一种办法是用象 WaitForSingleObject 这样的等待函数来等待 OVERLAPPED 结构的 hEvent 成员,可以规定等待的时间,在等待函数返回后,调用 GetOverlappedResult 。 另一种办法是调用 GetOverlappedResult 函数等待,如果指定该函数的 bWait 参数为 TRUE , 那么该函数将等待 OVE

9、RLAPPED 结构的 hEvent 事件。 GetOverlappedResult 可以返回一个 OVERLAPPED 结构来报告包括实际传输字节在内的重叠操作结果。 如果规定了读 / 写操作的超时,那么当超过规定时间后, hEvent 成员会变成有信号的。因此,在超时发生后, WaitForSingleObject 和 GetOverlappedResult 都会结束等待。 WaitForSingleObject 的 dwMilliseconds 参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意 GetOverlappedResult 不能设置等待的时限,因此如果 hE

10、vent 成员无信号,则该函数将一直等待下去 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: fl

11、ush 写入的 buffer PURGE_TXCLEAR: flush 读取的 buffer 调用 PurgeComm 函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。 6.ClearCommError () 功能: 从字面上的意思看来 , 它是用来清除错误情况用的 , 但是实际上它还可以拿来取得目前通讯设备的一些信息 . 函数原型: BOOL ClearCommError ( HANDLE hFile, / handle to communications device LPDWORD lpErrors, / pointer to variable to receiv

12、e error codes LPCOMSTAT lpStat / pointer to buffer for communications status ) ; 说明: 在调用 ReadFile 和 WriteFile 之前,线程应该调用 ClearCommError 函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。 7CloseHandle(); 功能:关闭串口 BOOL CloseHandle ( HANDLE hObject / handle to object to close ) 下面是我在 bcb 里的一些具体实现: 1. 打开串口 void _fastcall TFo

13、rm1:Button1Click(TObject *Sender) hCom=CreateFile( “COM2“, / 文件名 GENERIC_READ|GENERIC_WRITE,/ 访问模式允许读写 0, / 此项必须是 0 0,/ 无安全参数 OPEN_EXISTING,/ 创建方式 FILE_FLAG_OVERLAPPED,/ 异步工作方式 0); if (hCom=INVALID_HANDLE_VALUE) ShowMessage(“Can not open the port !“); CloseHandle(hCom); hCom = 0; return; else ShowMe

14、ssage(“COM2 open success!“); Button1-Enabled=false; CheckBox1-Enabled=true; CheckBox2-Enabled=true; CheckBox3-Enabled=true; CheckBox4-Enabled=true; CheckBox5-Enabled=true; if(!GetCommState(hCom, if (!SetupComm(hCom,1024,1024) / 设置输入输出缓冲区大小 ShowMessage(“SetupComm failed“); dcb.BaudRate=9600; dcb.fParity=0; dcb.Parity=NOPARITY; dcb.StopBits=ONESTOPBIT; dcb.ByteSize=8; if(!SetCommState(hCom, SetCommMask(hCom,EV_TXEMPTY); /EV_RXCHAR| memset( os.hEvent=CreateEvent(NULL,true,false,NULL);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报