串口通信程序设计_第1页
串口通信程序设计_第2页
串口通信程序设计_第3页
串口通信程序设计_第4页
串口通信程序设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 磯r订评範容咬 弋空纟/J I ANW IHORM Ai. UfrJl VKHSHT V 2011级通信工程 基于ARM9嵌入式Linux系统开发 原理与实践课程设计报告 设计题目: 基于Linux的网络通信程序设计 王强20110343025 姓名学号:邓祖坤 20110343026 学 院: 专 业: 班 级: 指导教师: 陶晓明 20110343027 工程技术学院 通信工程 2011级3班 方飞 2014年6月30日 题目:基于Linux的网络通信程序设计 一、设计题目及要求 1、设计题目 基于Linux的网络通信程序设计 2、设计要求 (1)基本要求 1)使用linux网络编程技术

2、设计网络通信程序; 2)熟练使用编译工具 GCC和调试工具GDB ; 3)实现主机与开发板之间的通信; 指导教师签名: 2014年 月 日 、指导教师评语 指导教师签名: 2014年 月 日 二、成绩 理论(60% ):分,作品(40% ):分,总分: 分 验收盖章 2014年 月 日 1程序设计的基本原理与思路 2 1.1 MFC 简介3 1.2 MSComm控件简介 3 1.2.1事件驱动方式3 122查询方式4 1.3设计的基本思路 4 2程序设计与代码分析 6 2.1建立工程6 2.2在工程中插入 MSComm控件 7 2.3利用ClassWizard定义CMSComm类控制对象 8

3、2.4向对话框中添加发送数据和接收数据的编辑框 9 2.5添加串口事件消息处理函数 OnComm()10 2.6 “开始” 打开串口和设置串口参数 12 2.7 发送”按钮一一发送数据 14 2.8相关控件的属性 16 2.9相关响应函数的建立 16 3总结17 参考文献18 附录19 AAAAAA 摘要 Linux系统是一种自由的Unix类多用户、多任务的操作系统,可以运行在 目前已知的PC机、ARMSMIPS和PowerPC等多种计算机平台,已成为应用广泛、 可靠性高、功能强大的计算机操作系统。Linux具有内核小、效率高、源代码开 放等优点,还内含了 TCP/IP网络协议,很适合在服务器

4、领域使用,而服务器主 要用途之一就是进行网络通信。随着计算机办公自动化处理技术的应用与推广、 网络的不断普及,人们期待一种便捷、高效、环保、安全的网络通信方式。 本设计就是考虑到这一现状,基于Linux操作系统下的TCP/IP网络通信 原理、多线程编程技术,使用linux编译工具GCC和调试工具GDE设计了一个网 络通信程序,实现计算机与开发板之间的网络通信。 关键词:Linux系统; 编译工具GCC;调试工具GDB 精品文档你我共享 1程序设计的基本原理与思路 本设计的基本原理是利用MFC应用程序以及 Microsoft Communications Control控件的基本知识而设计的。M

5、icrosoft Communications Control控件是 Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用 程序提供了通过串行接口收发数据的简便方法。 1.1 MFC简介 MFC是Visual C+是核心。MFC类库将所有图形用户界面的元素如窗口、 菜单、按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用 MFC派生出自己的类,并对 Windows应用程序进行了分解,利用 MFC派生类 对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间 的相互联系,实现了标准Windows应用程序的功能,这就是向

6、导生成的所谓 MFC 应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程 方法,这些函数必须通过类定义对象才能使用。因为MFC是对API的封装,微 软做了大量的工作,隐藏了好多程序开发人员在Windows下用C+ I SComiinTcst A.ddl Ck理” Add Variable. pelete Variable IDC_BUTTO N_HAN UALS END I DC_6UTT0 N_MAN UALS EN02 IDC EDIT FEKDATA IDCJMSC0MM1 Descriplion: U|jdate Columns CSlringim_slrRXDat

7、a m sliTXDsin Bind All CMSCom ms m_ctrlCom m CSlring willi Icnglli viili dluliun Maximum Charoctere: CsincEl o 園KnRfeH団 E 阴 |=一 Edit tfew insert Erojert fluild Layout look Jffiirdow H*lp | | Bui 1 dX Firtd in Files 1 Fihd in Files 2 Rtsulls SQL Debug/!彳J Resacly ill o, 0320 x200 AEM1 图2.4.2定义两编辑框变量类

8、型 2.5添加串口事件消息处理函数OnComm() 打 开 ClassWizard 选择 Message Maps,选择类 CSCommTestDIg,选择 IDC_MSCOMM1,双击消息On Comm,将弹出的对话框中将函数名改为 OnOnCommMscomm1。这个函数是用来处理串口消息事件的,如每当串口接收 到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加 的函数就会执行,我们在 OnOnCommMscomm1 ()函数加入相应的处理代码就 能实现自已想要的功能了。 添加串口事件消息处理函数如图2.5.1所示。 ifl SCoenmlMt - Microsoft

9、WiujaI C*t - (iCommTit.rc - lDD_SCOMh4TEiT_DIALDG :Dialog; 曲 View |nfrfrl Projiiclarygijt Toglf Wrindow Hlp =i二k CSCqI Message Maps Erojed: SCommTcst Member Variabllt-sAutc m atlunActiveX Evcnls Class n-ame: F jcSCommTe-slDIg GztSComrnTcsIilSCcmmTcslDlg.hr GISCommTesfLSCo m mTeslDIg.cpp Object D-g:

10、Add CIem亠-I Add Functian Delete Fundieiiii CSComniTcstDIg I DC_BUTT ON_MANUALS tNID hdcIbuttonIstart BDC_EljlT_RXDATA IDC EDIT 1DATA IDC Me-gsagce: EdH Code WFC ChssWizai Me mbeir function b: V DuDstaExcliange W OnB utlonManualse ON_IDC_OUTTON_MlAN UALSE ND:ONi_CUCKED OnCammON_iDC Jvl 甌 W OnButlonSt

11、rt ON_iDC_BUTTOiN_STAnT:BH_CLICKED W DnlriiiilDiHliuyDN_WMHlTDlALQ占- 1CI. Descripllon:Occurs whenever iht vluc at the CommEvEnl property changes. OK. | Gance) 51 )CvmhTfsI:.fx? - B e-rror(s)B 0 丨丨 J jJ*-., Build / Fiftd m Filts 1 X Find 询 Fils 2 SQL lb翌富讪e / Ready |tl 心 u 也 320 x200 Ihead J 图2.5.1 添

12、加串口事件消息处理函数 相关代码如下: void CSCommTestDlg:O nOn CommMscomm1() / TODO: Add your con trol no tificatio n han dler code here VARIANT varia nt_in p; COIeSafeArray safearray_i np; LONG le n,k; BYTE rxdata2048; / 设置 BYTE 数组 An 8-bit integerthat is not signed. CStri ng strtemp; if(m_ctrlComm.GetCommEvent()=2)

13、 /事件值为2表示接收缓冲区内有字符 以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.Getlnput(); / 读缓冲区 safearraynp=variant_inp /VARIANT 型变量转换为 ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); 得到有效数据长度 for(k=0;kle n;k+) safearray_inp.GetElement(klen;k+) /将数组转换为Cstring型变量 BYTE bt=*(char*)(rxdata+k); / 字符型 strtemp.Forma

14、t(%c,bt); /将字符送入临时变量strtemp存放 m_strRXData+=strtemp; /加入接收编辑框对应字符串 UpdateData(FALSE); /更新编辑框内容 2.6“开始”一一打开串口和设置串口参数 可以在需要的时候打开串口,在程序中做一个“开始”按钮,在该按钮的处 理函数中打开串口和设置串口参数。在主对话框的CSCommTestDIg: On Butt on Start ()打开串口。 添加“开始”按钮如图 2.6.1所示。 S SCommTest - MicrcMoft Visual C* * - ISCommTcst.rc TDD_SCOMMTEST_D1A

15、LOG :Didlog: 岂 Filt Message Maps , 选择类 CSCommTestDlg , 选 择 IDC_BUTTON_MANUALSEND ,双击 BN_CLICKED 添力卩 On Butt onManu alse nd() 函数。 添加“发送”按钮如图2.7.1所示。 czj l)| ES 血 E 电f a- U2闰言沿 jJ CSCammTrslDlg | |Al 1 class iTiEmhErs | CSCammTLoadlco n(IDR_MAINFRAM E); void CSCommTestDlg:DoDataExcha nge(CDataEx cha n

16、ge* pDX) CDialog:DoDataExcha nge(pDX); AFX_DATA_MAP(CSCommTestDlg ) DDX_C on trol(pDX,IDC_MSCOMM1, m_ctrlComm); DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData); DDX_Text(pDX, IDC_EDIT_TXDA TA, m_strTXData); AFX_DATA_MAP BEGIN_MESSAGE_MAP(CSCommTestDlg, CDialog) AFX_MSG_MAP(CSCommTestDlg) ON_WM_SYSCOMMAN

17、D() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON2, On Butto n2) ON_BN_CLICKED(IDC_BUTTON_M ANUALSEND, On Butt onMan ualse nd) AFX_MSG_MAP END_MESSAGE_MAP() / / / CSCommTestDlg message han dlers BOOL CSCommTestDlg:。nlni tDialog() CDialog:O nlni tDialog(); / Add About. menu item to sys

18、tem menu. / IDM_ABOUTBOX must be in the system comma nd ran ge. ASSERT(IDM_ABOUTBOX ASSERT(IDM_ABOUTBOX Appe ndMe nu(MF_SEPARA TOR); pSysMe nu-Appe ndMe nu(MF_STRING, IDM_ABOUTBOX, strAboutMe nu); / Set the icon for this dialog. The framework does this automatically / when the applications main wind

19、ow is not a dialog SetIco n(m_hlco n, TRUE);/ Set big icon SetIco n(m_hlco n, FALSE);/ Set small icon / TODO: Add extra in itializatio n here return TRUE; / return TRUE unless you set the focus to a con trol void CSCommTestDlg:O nSysComma nd(UINT nID, LPARAM lParam) if (nID dlgAbout.DoModal(); else

20、CDialog:O nSysComma nd(nlD, lParam); / If you add a mini mize butt on to your dialog, you will n eed the code below / to draw the icon. For MFC applications using the docume nt/view model, / this is automatically done for you by the framework. void CSCommTestDlg:O nPai nt() if (IsIco ni c() CPai ntD

21、C dc(this); / device con text for pain ti ng Sen dMessage(WMCONERASEBKGN D, (WPARAM) dc.GetSafeHdc(), 0); / Cen ter icon in clie nt recta ngle intcxIc on= GetSystemMetrics(SM_CXICON); intcyIc on= GetSystemMetrics(SM_CYICON); CRect rect; GetClie ntRect( int x = (rect.Width() - cxIcon + 1) / 2; int y

22、= (rect.Height() - cyIco n + 1) / 2; / Draw the icon dc.DrawIc on(x, y, m_hIc on); else CDialog:O nPa in t(); / The system calls this to obta in the cursor to display while the user drags / the mi ni mized win dow. HCURSOR CSCommTestDlg:O nQueryDraglco n() return (HCURSOR) m_hIco n; BEGIN_EVENTSINK_

23、MAP(CSCommTestD lg, CDialog) AFX_EVENTSINK_MAP(CSCommTest Dlg) ON_EVENT(CSCommTestDlg, IDC_MSCOMM1, 1/* On Comm */, On Comm, VTS_NONE) AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CSCommTestDlg:O nComm() / TODO: Add your control notification han dler code here VARIANT varia nt_inp; COIeSafeArray safea

24、rray_ inp; LONG le n,k; BYTE rxdata2048; 设置 BYTE 数组 An 8-bit in tegerthat is not sig ned. CStri ng strtemp; if(m_ctrlComm.GetCommEve nt()=2)/ 事件值为2表示接收缓冲区内有字符 协议加入处理代码 varia nt_i np=m_ctrlComm.Getl nput();/ 读缓冲区 safearray_i np=varia nt_i np; /VARIANT 型变量转换为 ColeSafeArray 型 变量 len=safearray_i np.GetO

25、n eDimSize(); 得到有效数据长度 for(k=0;kle n;k+) safearray_i np.GetEleme nt( 转换为BYTE型数组 for(k=0;klen;k+) / 将数组转换为 Cstring型变量 BYTE bt=*(char*)(rxdata+k); /字符型 strtemp.Format(%c,bt); / 将 字符送入临时变量strtemp存放 m_strRXData+=strtemp; / 加 入接收编辑框对应字符串 UpdateData(FALSE); 更新编 辑框内容 void CSCommTestDlg:O nButto n2() / TODO

26、: Add your control notification han dler code here if(m_ctrlComm.GetPortOpe n() m_ctrlComm.SetPortOpe n(FALSE); m_ctrlComm.SetCommPort(1); / 选择 if( !m_ctrlComm.GetPortOpe n() m_ctrlComm.SetPortOpe n(TRUE);/打 开串口 else AfxMessageBox(ca nnotope nserial port); m_ctrlComm.SetSetti ngs(9600, n,8,1); /波特率9

27、600,无校验,8个数据位,1个 停止位 m_ctrlComm.Setl nputMode(1); 以二 进制方式检取数据 m_ctrlComm.SetRThreshold(1); / 参数 1 表示每当串口接收缓冲区中有多于或等于1 个字符时将引发一个接收数据的On Comm 事件 m_ctrlComm.Set In putLe n(0);/ 设置当 前接收区数据长度为 0 m_ctrlComm.Getlnput(); 先预读缓冲区 以清除残留数据 void CSCommTestDlg:O nButto nMan ualse nd() / TODO: Add your control notification han dler code here UpdateData(TRUE); /读取编辑框内容 m_ctrlComm.SetOutput(COleVaria nt(m_ strTXData);/ 发送数据 com1 沁园春雪 北国风光,千里 冰封,万里雪 飘。 望长城内外,惟 余莽莽;大河上 下,顿失滔滔。 山舞银蛇,原驰 蜡

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论