⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialportcontrol.cpp

📁 这是本人所编的串口传数据的程序
💻 CPP
字号:
#include "StdAfx.h"
#include "SerialPortControl.h"
HANDLE hCom; //全局变量,串口句柄
HANDLE hCommThread; //全局变量,串口线程
DWORD WINAPI SerialPort1ThreadProcess(HWND hWnd);
volatile bool hEventRun;
HWND hWnd;
DWORD swThreadID;
OVERLAPPED Eol={0};
OVERLAPPED Wol={0};
OVERLAPPED Rol={0};
volatile bool fStopMsg;


//打开并设置COM1 
BOOL OpenSerialPort1()
{
	hCom=CreateFile(
		"COM1", 
		GENERIC_READ | GENERIC_WRITE,
		0,
		NULL, 
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
		NULL);

	if (hCom!=INVALID_HANDLE_VALUE)
	{   
		SetupComm(hCom,1024,512);
		DCB wdcb;
		GetCommState (hCom, &wdcb);
		wdcb.BaudRate=CBR_115200;//波特率:115200,其他:不变
		wdcb.fBinary=true;
		wdcb.fParity=true;
		wdcb.ByteSize=8;
		wdcb.Parity=ODDPARITY;
		wdcb.StopBits=ONESTOPBIT;
		SetCommState (hCom, &wdcb);
		PurgeComm(hCom, PURGE_TXCLEAR);//清空缓冲区	
	}
	else
	{
		AfxMessageBox("创建窗口失败!!");
	}

	return true;
}



//事件线程函数
DWORD WINAPI SerialPort1ThreadProcess(HWND hWnd)
{
	DWORD dwEvtMask,dwRes;
	Eol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

	while (hEventRun)
	{

		WaitCommEvent(hCom,&dwEvtMask,&Eol);
		dwRes=WaitForSingleObject(Eol.hEvent,100);
		switch(dwRes)
		{
		case WAIT_OBJECT_0:
			
			switch(dwEvtMask)
			{
			case EV_RXCHAR:
				if(!fStopMsg)
				{
					fStopMsg=true;
					::PostMessage(hWnd,
						COM_RECVDATA,
						0,
						(LPARAM)EV_RXCHAR);
				}
				break;
			case EV_TXEMPTY:
				break;
			default:
				break;
			}
			break;
		case WAIT_TIMEOUT:
			break;
		default:
			break;
		}
	}
	return true;
}
                             

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -