MFC简单的串口使用

其实这里也不算是MFC的串口,c++应该都可以用。

头文件

#pragma once
class Serial
{
public:
	Serial(void);
	~Serial(void);

private:
	HANDLE hCom;  //全局变量,串口句柄

public:
	/*
		创建一个串口对象
		参数,端口,波特率
		作者:HES

	*/
	BOOL Create_Serial(CString port,int bt);
		/*
		关闭端口
		
		作者:HES

	*/
	void Close_COM();
	
	/*
		接收一个字节
		参数 数据
		作者:HES

	*/

	BOOL Read_Byte(char &ch);
	/*
		发送一个字节
		参数 数据
		作者:HES

	*/
	BOOL Write_Byte(char ch);

		/*
		接收一个字符串
		参数 数据 长度
		作者:HES

	*/

	BOOL Read_Buf(char *ch, DWORD len);

};


c文件

#include "stdafx.h"
#include "Serial.h"


Serial::Serial(void)
{
}


Serial::~Serial(void)
{
}
	/*
		创建一个串口对象
		参数,端口,波特率
		作者:HES

	*/
BOOL Serial::Create_Serial(CString port,int bt)
{
	hCom=CreateFile( port,
      GENERIC_READ|GENERIC_WRITE,
      0,
      NULL,
      OPEN_EXISTING,
      0,
      NULL);
 if(hCom==(HANDLE)-1)
 {
  //MessageBox(L"打开COM 失败!");
  return false;
 }
 else
 {
	
 }
			 SetupComm(hCom,100,100);//输入缓冲区和输出缓冲区的大小都是1024
			 COMMTIMEOUTS TimeOuts;
			 //设定读超时
			 TimeOuts.ReadIntervalTimeout=MAXDWORD;
			 TimeOuts.ReadTotalTimeoutMultiplier=0;
			 TimeOuts.ReadTotalTimeoutConstant=0;
			 //在读一次输入缓冲区的内容后读操作就立即返回,
			 //而不管是否读入了要求的字符.
			 //设定写超时
			 TimeOuts.WriteTotalTimeoutMultiplier=100;
			 TimeOuts.WriteTotalTimeoutConstant=500;
			 SetCommTimeouts(hCom,&TimeOuts);//设置超时
			 DCB dcb;
			 GetCommState(hCom,&dcb);
			 dcb.BaudRate=bt;//波特率
			 dcb.ByteSize=8;//每个字节有8 位
			 dcb.Parity=NOPARITY;//无奇偶校验位
			 dcb.StopBits= ONE5STOPBITS;//1个停止位
			 SetCommState(hCom,&dcb);
			 PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); 
	return true;
}
	/*
		接收一个字节
		参数 数据
		作者:HES

	*/
BOOL Serial::Read_Byte(char &ch)
{
	
 DWORD wCount=0;//读取的字节数
 BOOL bReadStat;
 bReadStat=ReadFile(hCom,&ch,1,&wCount,NULL);
 
 if(!bReadStat)
 {
	//MessageBox(_T("读串口失败!"));
	 return false;
 }
	return true;
}
	/*
		发送一个字节
		参数 数据
		作者:HES

	*/
BOOL Serial::Write_Byte(char ch)
{
	 DWORD dwBytesWrite=0;
	 COMSTAT ComStat;
	 DWORD dwErrorFlags;
	 BOOL bWriteStat;
	 ClearCommError(hCom,&dwErrorFlags,&ComStat);
	 bWriteStat=WriteFile(hCom,&ch,1,&dwBytesWrite,NULL);
	 if(!bWriteStat)
	 {
	  //MessageBox(_T("写串口失败!"));
		 return false;
	 } 
	return true;
}
		/*
		关闭端口
		
		作者:HES

	*/
void Serial::Close_COM()
{

	 CloseHandle( hCom ); 

}

		/*
		接收一个字符串
		参数 数据 长度
		作者:HES

	*/

BOOL Serial::Read_Buf(char *ch, DWORD len)
{
	 memset(ch,'\0',len);
	 DWORD dwBytesWrite=len;
	 COMSTAT ComStat;
	 DWORD dwErrorFlags;
	 BOOL bWriteStat;
	 ClearCommError(hCom,&dwErrorFlags,&ComStat);
	 bWriteStat=WriteFile(hCom,ch,len,&len,NULL);
	 if(!bWriteStat)
	 {
	  //MessageBox(_T("写串口失败!"));
		  PurgeComm(hCom,PURGE_TXABORT|
			PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
		 return false;
	 } 
	  PurgeComm(hCom,PURGE_TXABORT|
	  PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
	return true;

}

初始化串口

void CMFC串口Dlg::OnBnClickedInit()
{
	if(!COM3.Create_Serial(L"COM3",115200))
	{
		MessageBox(_T("打开串口失败!"));
	}

}

读写这里就不写了,看函数说明使用吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值