MFC串口调试软件教程
一、测试环境:Windows XP,VC++6.0
二、步骤
Step1:打开VC++6.0集成开发环境,新建基于对话框(Dialog based)的MFCAppWizard(exe)应用程序。其它设置默认即可。
Step2:在主对话框中添加需要的控件。如图1,在箭头所指窗口(控件)拖动空间到主对话框。这里串口调试软件只需要红框内所示的控件即可,其他可以根据需要自行添加。右键点击控件 ->选择属性可以自行设置控件显示的文本,例如图1中的“打开”按钮、“端口号”静态文本等。另外,为了增强变量的可读性,建议将每个控件的ID改成有意义的名字。例如,将发送按钮的控件ID改为“IDC_BUTTON_SEND”。
Step3:接下来需要为个别控件添加变量,以便于在程序中读取控件状态或者获得对控件的控制。例如,对“端口号”右边的组合下拉框(Combo)添加变量。右键点击组合框(Combo) ->选择建立类向导,则会出现如图2所示界面。按照图2中1->2->3步骤操作。点击确定出现图3界面。按照图3中1->2步骤操作,确定则成功添加control类型的变量m_ctrlComboComPort。
接下来,依次为接收数据和发送数据旁的编辑框添加Cstring类型的变量m_strEditReceiveMsg和m_strEditSendMsg
Step4:为了将CserialPort类添加到工程中,需要添加“SerialPort.h”和”SerialPort.cpp”文件。将文件添加到工程所在的文件夹中,然后,点击菜单栏上的工程 ->添加到工程 ->文件,选择这两个文件。添加结果如图4所示。
Step5:在对话框头文件(这里是“RBT_GZZDlg.h”)添加头文件声明(#include “CserialPort.h”)和类对象声明(CserialPort m_SerialPort)以及变量名声明(BOOLm_bSSerialPortOpened串口打开标志位)。如图5所示。
Step6:在对话框头文件(本工程是“RBT_GZZDlg.h”)添加串口字符接受消息(WM_COM_RXCHAR)的响应函数声明afx_msg LONG OnCom(WPARAM ch, LPARAM port),并在对话框CPP(本工程是“RBT_GZZDlg.cpp”)文件中进行WM_COM_RXCHAR消息映射和函数的实现代码。如图6所示。
Step7:接下来对“打开”按钮、“关闭”按钮和“发送“按钮添加响应函数。双击”打开“按钮,出现生成函数提示框,点击确定进入函数(本工程是void CRBT_GZZDlg::OnButtonOpen())。该函数主要是实现获取串口号、设置串口通信的参数功能。
类似操作添加void CRBT_GZZDlg::OnButtonClose()和voidCRBT_GZZDlg::OnButtonSend()函数。关闭函数主要就是关闭串口;发送函数先获取编辑框内的数据,然后以字符串或者十六进制格式发送数据,具体由编程决定。本工程发送十六进制,所以添加了Str2Hex函数和HexChar函数对数据进行处理。
如图7、8所示为本工程添加的函数。
需要注意的是”打开“按钮响应函数中从组合框获取串口号(intnPort=m_ctrlComboComPort.GetCurel()+1),所以需要在对话框CPP文件中的初始化函数(BOOL CEx2Dlg::OnInitDialog())中添加如图9所示初始化函数。
Step8:编译 -> 执行。如图10所示,开始执行后,点击”打开“按钮,串口开始接收数据。
三、常见问题
1.无法添加控件(cannot add new member)
解决方法:先把工程关闭,然后删除*.clw文件,重新打开工程,打开ClassWizard(CTRL+W可以打开),输入先前删除的文件的文件名(*.clw)。点击添加按钮(ADD),然后确定。这样便可以添加控件了。
(参考网址:http://m.2cto.com/kf/201212/173233.html)
2.编译没有问题,无法执行(Could not execute:Bad executable format(Win32 error 193))。如图11所示。