在Visual Studio下使用MFC编写串口助手

Visual Studio 版本:2015

1、新建mfc项目

在这里插入图片描述

选择基于对话框类型:
在这里插入图片描述

其他设置选择默认,点击完成即可创建项目。
在这里插入图片描述

2、拖入控件,并设置界面
将多余的控件删除,添加按钮控件和编辑框。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终界面

3、添加文件
想要使用端口,需要在我们的项目里面添加serialport.h文件和SerialPort.cpp文件
在这里插入图片描述
点击项目中的添加现有项目。
在这里插入图片描述
将这两个文件添加到项目中去。
在这里插入图片描述

在解决方案视图中可以看到,已经添加成功。
在这里插入图片描述
将头文件包含到项目源文件中。
在这里插入图片描述

在这里插入图片描述
4、串口的初始化

首先我们编写初始化串口号的函数。

int CSerial_port_testDlg::SerialInit(void)
{
	//	nPort=CSerialPort::FindSerialPort(); 
	unsigned int baudRate = 115200;  //设置波特率
	CString csnPort;
	csnPort.Format(TEXT("发送串口为com%d"), nPort);
	AfxMessageBox(csnPort);
	COMMCONFIG config;
	CSerialPort::GetDefaultConfig(nPort, config);
	//设置检验位、停止位、流控
	port.Open(nPort, baudRate, CSerialPort::EvenParity, 8, CSerialPort::OneStopBit, CSerialPort::NoFlowControl);   

	HANDLE hPort = port.Detach();
	port.Attach(hPort);

	DWORD dwModemStatus;
	port.GetModemStatus(dwModemStatus);

	DCB dcb;
	port.GetState(dcb);

	dcb.BaudRate = baudRate;
	port.SetState(dcb);

	DWORD dwErrors;
	port.ClearError(dwErrors);

	//port.SetBreak();
	//port.ClearBreak();

	COMSTAT stat;
	port.GetStatus(stat);

	DWORD dwBytesWaiting = port.BytesWaiting();
	dwBytesWaiting;

	COMMTIMEOUTS timeouts;
	port.GetTimeouts(timeouts);

	port.Setup(10000, 10000);

	port.GetConfig(config);

	config.dcb.BaudRate = baudRate;
	port.SetConfig(config);

	port.Set0WriteTimeout();
	port.Set0ReadTimeout();
	//自收自发的范例代码///	
	// 	port.ClearWriteBuffer();
	// 	port.ClearReadBuffer();
	// 	Sleep(100);
	// 	port.Write(sBuf, 7);
	// 	Sleep(100);
	// 	port.Read(rBuf,7);
	//自收自发的范例代码///
	return 0;
}

在文件前面将端口号定义出来,并将函数添加到Dlg类中。
在这里插入图片描述
在这里插入图片描述
添加编辑框变量
在这里插入图片描述

设置变量名
在这里插入图片描述
对于按钮也是同样的操作,添加变量,之后我们就可以通过这些变量来操纵这些按钮和编辑框。

双击进入初始化串口这个按钮,会自动生成点击函数,当点击该按钮时就会调用这个函数。
在这里插入图片描述
这样我们的串口初始化功能就完成了,接下来我们需要实现接收和发送数据的功能。

5、接收和发送数据功能的完成

先将我们的两个编辑框设置为多行模式
在这里插入图片描述

首先完成发送数据的功能。

发送数据其实很简单,使用port.write函数就可以完成,但是我们需要先从编辑框中获取我们的数据。

还是和之前一样我们将编辑框都添加好变量,便于之后的使用。

双击 ‘发送数据’ 按钮,进入点击事件。

void CSerial_port_testDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	char num[1024];
	int len, i;
	memset(num, 0, 1024);
	txt_frame2.GetWindowTextW(str);   //获取编辑框中的数据
	len = str.GetLength();            //设置长度
	for (i = 0; i < len; i++) {
		num[i] = str[i];              
	}
	
	port.Write(num, len);            //写入串口
}

在这里插入图片描述
现在完成接收数据的功能。

UINT CSerial_port_testDlg::RecvData(LPVOID param)
{
	unsigned char buf[1024];  //存放数据的缓冲区
	int frame_num,i;
	CString str;
	memset(buf, 0, sizeof(buf));
	
	while (recv_flag) {
		Sleep(1);
		frame_num = port.Read(buf, sizeof(buf));
		if (frame_num) {
			for (i = 0; i < frame_num; i++) {
				str.AppendFormat(_T("%d"), buf[i]);         //将数据连接在一起,便于之后的显示
			}
			theApp.m_pMainWnd->SetDlgItemText(IDC_EDIT3, str);  //在编辑框中显示对象中的内容
			memset(buf, 0, sizeof(buf));
		}
	}
	return 0;
}

在这里插入图片描述
编写接收数据按钮中的函数,创建线程。

void CSerial_port_testDlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	if (flag) {
		flag = false;
		recv_flag = false;
		btn3.SetWindowTextW(TEXT("接 收"));
	}
	else {
		flag = true;
		recv_flag = true;
		//创建接收数据的线程
		btn3.SetWindowTextW(TEXT("停 止"));
		CWinThread *pUartSendThread = AfxBeginThread(RecvData, this);
	}
}

在这里插入图片描述
新增的相关变量。
在这里插入图片描述

类中函数和变量的定义。
在这里插入图片描述
注意,线程函数必须定义为静态函数,并且函数原型必须和图片上面的相同。

最终实现发送数据和接收数据的功能。

在这里插入图片描述

  • 7
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows应用程序的类库。在MFC中,可以使用串口来进行通信。下面是一个简单的MFC编写串口调试助手的示例代码: 引用中的代码是一个用于接收串口数据的功能。在该功能中,首先声明了一个用于存放数据的缓冲区buf,然后通过循环不断接收数据并存入缓冲区。接收到数据后,将数据连接在一起便于显示,并通过SetDlgItemText函数将数据显示在编辑框中。 引用中的代码是用于发送数据的功能。在该功能中,首先获取编辑框中的数据,然后将数据写入串口。 引用中的代码是发送按钮的消息处理函数。在该函数中,首先判断串口是否已经打开,如果串口已经打开,则将发送区内容发送到mscomm控件。 以上是一个简单的MFC编写串口调试助手的示例代码。如果你有其他问题或需要更详细的解答,请提供更多的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [在Visual Studio使用MFC编写串口助手](https://blog.csdn.net/yohe12/article/details/105968329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [MFC实现串口助手](https://blog.csdn.net/qq_53006294/article/details/116771190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值