零基础 VS2012 串口编程

最近在学习STM32单片机,然后对上位机控制硬件电路产生兴趣,于是想做个上位机程序,通过串口获取ADC数据,然后将产生的数据送入matlab中做数据处理,再通过串口发送给单片机系统。网上参考不同的编程语言建议,有VB,VC++,C#等,最后选择VC++。VC++之前没有接触过,先照着网上的帖子做一遍,参考下面的帖子:

VS2012串口助手编程C++:https://blog.csdn.net/tianyake_1/article/details/65646466

C控件MSComm编写串口通信程序:https://wenku.baidu.com/view/9e9b258c6c175f0e7cd137b6.html?from=search

第一步,熟悉VS2012

零基础 VS2012 串口编程

新建项目,选择MFC应用程序,名称使用MFC(建议使用跟我一样,后面的程序能更好的对应起来),然后选择安装位置。

零基础 VS2012 串口编程

零基础 VS2012 串口编程

这一步选择基于对话框的应用程序类型,至于单个文档、多个文档、基于对话框的区别如下:

单文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件,如下图所示的记事本。

零基础 VS2012 串口编程

                                            单文档

多文档:WORD类或浏览器程序的标准模式,可多个窗口显示不同的信息,进行不同的任务,有多个视图环境,可同时操作多个文件。多个文件共享同一菜单栏、工具栏等,如下图所示的office word。

零基础 VS2012 串口编程

                                                                                           

对话框:可方便的使用控件,所见即所得的编程,没有菜单栏、工具栏等,如下图所示的串口调试助手。

零基础 VS2012 串口编程

 

怎样看出一个MFC应用程序是基于单文档、多文档还是对话框?

1.运行应用程序观看,对话框一般没有菜单栏、工具栏等,单文档和多文档有,另多文档可产生子窗口,会有一个childframe class

2.从源码中的类观看:

   基于对话框—>一般含以下3个类:CAboutDlg、程序名App、程序名Dlg

   基于单文档—>一般含以下4个类:CMainFrame、程序名App、程序名Doc、程序名View

   基于多文档—>一般含以下5个类:CMainFrame、CChildFrame、程序名App、程序名Doc、程序名View

点击完成按钮,完成MFC应用程序的创建,创建好的MFC应用程序如下图所示:

零基础 VS2012 串口编程

第一步:添加控件

将主窗口中对话框中的所有内容清空,包括“TODO:再次放置对话框控件”以及"确定"跟"取消"两个按钮控件。

PS:如果你重新打开这个项目,会发现主窗口是空的,这个时候需要双击打开资源视图的一个文件,如下图所示:

零基础 VS2012 串口编程

 

找到右侧"工具箱"菜单栏,添加如下几个控件:2个 Edit Control 控件,1个 Combo Box 控件,2个 Button 控件。

零基础 VS2012 串口编程

从 工具-->选择工具箱集-->COM控件中找到 Microsoft Communications Control 这个串口通讯控件。

零基础 VS2012 串口编程

然后将对话框中的各种控件的ID寄名称修改如下:

零基础 VS2012 串口编程

IDC_COMBO_CommSelect 属性里面的Data:COM1;COM2;COM3;COM4;COM5;COM6;COM7;COM8; // 注意使用;分隔 。如果你电脑中的COM口超过这个数字,可以在此处添加。如下图所示:

零基础 VS2012 串口编程

控件类添加成员变量

点击  项目-->类向导 或者  Ctrl+Shift+X 按照下面的步骤操作:

零基础 VS2012 串口编程

IDC_COMBO_CommSelect:(Control类型)

零基础 VS2012 串口编程

IDC_COMBO_CommSelect:(Value类型)

零基础 VS2012 串口编程

IDC_EDIT_RXDATA:(Value类型)

零基础 VS2012 串口编程

IDC_EDIT_TXDATA:(Value类型)

零基础 VS2012 串口编程

IDC_MSCOMM1:(Control类型)

零基础 VS2012 串口编程

至此,所有的框架都准备完成,点击编译,应该没什么错误。

接下来就是代码部分。