VC串口通讯(Windows API)

本文介绍如何使用Windows API接口而非MSComm32控件进行串口通讯,重点讲述异步通讯的实现。包括打开串口、设置串口、写串口、读串口以及关闭串口的操作,涉及CreateFile、SetCommMask、WriteFile、ReadFile等关键函数。还提供了一个串口操作实例的下载链接。
摘要由CSDN通过智能技术生成

接上一篇文章使用VC2010实现基于MSComm32控件的串口通讯,本篇文章介绍一下如何使用Windows API接口来实现串口通讯的功能。

注:串口通讯可以实现同步和异步两种方式,这里本人主要介绍的是串口的异步通讯。

和直接MSComm32控件的接口不同,若使用Windows API接口来实现串口通讯的话,若想深刻的认识其中的道理,则我们需要了解我们所需要的API接口的功能。读者除了借鉴本篇文章的介绍之外,还需要不断地百度和MSDN一下相关的知识,因为只有这样才能明白其中的奥秘。当然,若读者只是图个使用的话,那就没那个必要了。

 

在此,本人介绍一下实现串口通讯功能需要用到的一些API接口。

一、打开串口操作及设置串口

1、CreateFile() 该函是一个多功能的函数,除了可以打开和创建我们常用的文件之外,还可以用于对I/O设备的操作,在对串口进行操作之前,就需要先用该函数来打开串口。

volatile HANDLE m_hCom;
m_hCom = ::CreateFile(strCom, GENERIC_READ | GENERIC_WRITE, 
						0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

这里值得注意的是必须使用“OPEN_EXISTING”来打开,因为串口是已经存在的设备;

由于我们要实现异步操作串口,所以得加上“FILE_FLAG_OVERLAPPED”参数。

2、SetCommMask() 该函数用于设置我们要在串口上监听的事件,一般要设置“EV_RXCHAR|EV_TXEMPTY”,这个参数组合表示在串口 “输入缓冲区中已收到数据,即接收到一个字节并放入输入缓冲区”和“输出缓冲区中的数据已被完全送出”这两种情况下会触发串口事件。当然你也可以不使用此函数来设置串口监听事件,而在你觉得必要的时候再进行串口操作。

::SetCommMask(m_hCom, EV_RXCHAR|EV_TXEMPTY)


 

3、SetupComm() 该函数可以设置串口的输入和输出缓冲区的大小。

4、PurgeComm()  该函数可以用于终止当前的串口操作并清空串口缓冲区。

::SetupComm(m_hCom, MAX_BUFFER, MAX_BUFFER);
	::PurgeComm(m_hCom, 
		PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_RXABORT|PURGE_TXABORT);

 

5、SetCommTimeouts() 该函数用于设置串口操作超时,涉及到的参数为主要有结构体COMMTIMEOUTS

typedef struct _COMMTIMEOUTS {
    DWORD ReadIntervalTimeout;          /* Maximum time between read chars. */
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值