MFC简单的串口使用

来源:互联网 发布:asp微信接口源码 编辑:程序博客网 时间:2024/05/21 08:48

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

头文件

#pragma onceclass 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("打开串口失败!"));}}

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

原创粉丝点击