MFC串口编程


MFC串口编程


1.先记录一个调试中遇到的问题:

在串口的接受方法中采用COleSafeArray类对VARIANT类型进行变换,编译正常,运行串口测试程序后,每当串口接受到数据,程序便出现如下错误:
Debug Assertion Failed!
Program:..........
File: olevar.cpp
Line:2553
.............
这个小问题搞了半天的时间,开始把问题定位在了COleSafeArray类的使用方法上,但是查阅资料证明用法没有问题。最后把串口的输入方式设置为二进制解决了问题。
代码如下:

void CComUpdateDlg::OnOnCommMscomm() 
{
	VARIANT ComRcv;
	COleSafeArray ComRcvArray;
	BYTE RcvBuf[1024];
	long len,k;

	if(m_ctrlComm.GetCommEvent()==2)
	{

		ComRcv = m_ctrlComm.GetInput();
		ComRcvArray=ComRcv; //VARIANT型变量转换为ColeSafeArray型变量
		len=ComRcvArray.GetOneDimSize(); //验证得到有效数据长度
		for(k=0;k<len;k++)//len is 5 in normal case
			ComRcvArray.GetElement(&k,RcvBuf+k);//转换为BYTE型数组
		HandleCommand(RcvBuf);
	}
}

2.展示一下我自学做的MFC程序的界面:

所做的程序能够通过上位机对NXP LPC1766、LPC1768(LPC17XX)的cortex M3处理器进行程序或固件的升级。
升级程序包括两部分:
上位机部分用MFC实现,通过串口或者网口与板子进行交互并实现固件升级。
板子中的bootloader部分能够通过IAP方式将上位机发送过来的程序数据保存到处理器的片上flash中,并在升级完成后跳转到烧写后的固件地址运行程序。
升级原理比较简单,但是全部弄痛了还是需要花费一定的时间和经历的!
界面如下:



3.文件路径转换为C语言中的字符串

在MFC编程中经常需要操作文件,常用的做法是通过一个button选择文件的路径,之后把文件的路径获取到一个CString变量中。但有的时候,我们习惯于通过fopen等函数操作文件,这时就要把文件路径由CString类型转换为char *类型。但是由于路径中存在‘\’,对于char *来说,‘\’为转义字符,因此路径“E:\doc\test.data”转为char *应该为“E:\\doc\\test.data”才能够被fopen等函数正常操作。

此时,可通过如下方法进行类型转换:

	char file[256] = {0};
	
	setlocale(LC_ALL, "chs");
	wcstombs( file, m_sourcePath, 256 );

其中,CString m_sourcePath为文件的路径。

4.选择文件的路径

代码如下所示:

void CpaydevDlg::OnBnClickedOpenButton()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strFilter;
	strFilter="All Files(*.*)|*.*||";
	CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY|
		OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter);
	
	dlg.m_ofn.lStructSize = sizeof(OPENFILENAME);
	if(dlg.DoModal() == IDOK )
	{
		m_sourcePath=dlg.GetPathName();
	}
    UpdateData(FALSE);
}

5.串口编程

采用MSComm控件实现。具体大家可以百度了,帖子很多。
最简单的方式是,在程序设计窗口上单击右键,然后选择“Insert ActiveX Control”,弹出如下所示的对话框,选择图示项目即可:

还有一种方式是,在工程中点菜单“Project”->“Add To Porject”->“Components and controls”,然后选择“Microsoft Communications Control, version 6.0.lnk”并单击插入。但是在win10系统中,提示“Microsoft Communications Control, version 6.0 灾难性故障”,而用第一种方法的时候,可以正常插入MSComm控件。






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值