毕业论文-改2_第1页
毕业论文-改2_第2页
毕业论文-改2_第3页
毕业论文-改2_第4页
毕业论文-改2_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、编号:河南大学2012届本科毕业论文实现基于STM32F401处理器和PC端的USB通信论文作者姓名:作者学号:所在学院:所学专业:导师姓名:导师职称:摘要随着USB协议的推出以及其在PC主机上的广泛应用,慢慢的各种电子产品的数据通信接口都开始使用USB通信协议进行通信, USB技术的发展以其高速性,可靠性,通用性强等一些特点逐渐地成为数据传输的首选;像我们使用的U盘、移动硬盘的数据口、数码相机的数据口、手机的数据口等大部分都是使用US8接口遵循US8通信协议进行数据通信。它的广泛应用源于它的各种优点,特别是它对各种标准设备类的支持,这也意味着它的规范相当的全和复杂。 本设计基于串口通讯的原理

2、,分析和讨论了计算机与单片机如何通过USB接口使用相关的通讯协议实现串行通信的。主要介绍如何使用一台计算机与一台单片机通过USB接口实现串行通信。本课题设计通过搭建以STM32f401为核心控制芯片硬件实验平台,实现了USB从机的功能,使其能与pc端进行数据交换和储存;软件设计方面,电脑端上位机采用了QT C+语言编程,单片机方面使用USB通信中断方式完成数据的接收和发送,程序开发采用Keil 编译器和C语言。关键词:USB stm32f401 QT AbsractWith the introduction of the USB protocol and extensive applicati

3、on in the PC host,communication interface began using the USB communication protocol to communicate,The development of USB technology with its recommend suite, relia- bility, versatility and some other characteristics gradually become the first selection of data transmission; as we use U disk,mobile

4、 hard disk statistics data, digital camera ,mobile data is mostly used as a USB interface following USB communication protocolIt is widely used in various strengths,especially it to all kinds of standard equipment support;this means it is full of norms and complex The design is based on the principl

5、e of serial com munIcation, analysis and discussion of the computer and how to achieve single-chip serial communication through the USB interface using the relevant protocol. It describes how to use a computer with a single-chip serial communication through the USB inter- face. This topic design by

6、building in STM32f401 as the core control chip hardware experiment platform, the USB slave fun-ction, so that it can with the pc end for data exchange and storage; software design, computer terminal PC uses the QT C+ programming language, SCM receive and transmit interrupt using USB communication da

7、ta is completed, the program evelopment using Keil compiler and C language.Keywords:USB;STM32 processor; QT第一章 绪论1,1课题设计的目的和背景现在计算机外部设备都在追求高速度和高通用性,为了满足用户的需求,一些公司1994年11月推出了USB Universal Serial Bus通用串行总线协议的第一个草案,专门用于低中速的计算机外设USB,可把多达127个外设与时连到用户的系统上,这种连接较以往普通并口parallel port和串口serial port的连接而言,主要的优点是

8、速度高功耗低支持即插即用 Plug & Play 和使用维护方便;本设计中所描述的是基于STM32F401处理器的单片机和PC端上位机的USB通信方式,电路简单,可以兼容不同的设备,可移植性强,所以可用做单片机与计算机的USB通信模块大范围用作工业和电子产品的开发中。因此研究怎么实现PC端与单片机通过USB之间的通信具有非常重要的实现意义。1,2本课题设计的主要内容在使用微软的Windows系统下,将USB设备虚拟成虚拟串口设备,让其可以在PC端的上位机中使用USB的COM口来与基于STM32的处理器的单片机进行USB通信及大量传输数据;这样就可以和以前基于COM口开发的上位应用程序统一结合起

9、来使用,上面有COM口方便使用的通信的优点,下面有USB快速通信的优点,既兼容了以前通信的优点又保留了USB本身的一部分优点。在本设计中为了直观的感触到USB数据的通信,设计了由QT写的电脑端的上位机软件程序和基于STM32的处理器的USB底层通信程序;设计方式是,将在上位机上加载一张图片,把图片数据通过USB传到单片机中,并在单片机上的TFT屏显示出来,此时即达到USB的数据传输效果,本设计即完成。第二章 数据通信方式简述2.1串行通信简介串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之

10、间的远距离通信。串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。2.1.1串行通信工作模式在串行通信传输中,数据一般是在两个站之间进行传输,按照数据流的方向可分成三种基本的传输方式:全双工、半双工、和单工。1,单工通信单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。图2-2 单工通信传输模型2.半双工方式半双工传输数据是允许数据在两个方向上的传输,但是在某一时刻,只允许数据在一个方式上向上传输,但他实际是一种切换方向的单工传输通信,如图

11、2-3所示。图2-3 半双工通信传输模型3.全双工方式当数据的发送和接收分流,分别由两根不同的传输线传送时,通信双方都能在同一时刻进行发送和接收操作,这样的传送方式就是全双工制。在全双工方式下,通信系统的每一端都设置了发送器和接收器,同时,需要2根数据线传送数据信号。图2-4 全双工通信传输模型2.1.2异步传输和同步传输在串行数据传输中,数据是逐位的按照顺序单次传输的,每位数据的接收和发送必须有时钟来控制。发送端和接收端要保持同步,不然传输数据就会出现错差。为解决这个问题,串行传输采用下面的两种方法:异步传输和同步传输。1. 异步传输异步传输就是,调用一个函数发送数据,马上返回,你可以继续处

12、理其他事,接收时,对方的有数据来,你会接收到一个消息,或者你的相关接收函数会被调用。图2-5 异步传输模型2.同步传输同步传输是以数据块为传输单位,数据没有被对方确认收到则调用传输的函数就不返回。接收时,如果对方没有发送数据,则你的线程就一直等待,直到有数据了才返回,可以继续执行其他指令。图2-6 同步传输模型第三章 USB通信原理简述3.1 USB简述3.1.1 USB设备介绍一个USB设备可以分为三个层图(如图3-1所示)。最底层是总线接口,用来发送与接收包。中间层处理总线接口与不同的端点之间的数据流通。一个端点是数据最终的使用者或提供者,它可以看作数据的源或接收端。最上层就是USB设备所

13、提供的功能,比如鼠标或键盘等。图3-1 USB实现方式3.1.2 USB数据传输方式USB数据的传输方式有四种:大量传输,控制,同步,中断。一般所有的传输方式的主动权都在PC端。1)控制:双向传输,数据量一般较小。2)同步:有确定的时间间隔和带宽。3)中断:主要为是是定时查询设备是否分有中断数据需要传输。4)大量数据传输:主要应用与大量数据传输和数据接受上。3.1.3 USB的优势USB通信有如下几个优点:1.USB为所有的USB外设提供了单一的、易于使用的标准的连接类型。2.整个的USB的系统只有一个端口和一个中断。3.USB支持热插拔和PNP。4.USB在设备供电方面提供了灵活性。5.US

14、B的端口具有很灵活的扩展性。 3.2 USB的总线协议3.2.1总线拓扑结构USB的拓扑结构为金字塔型。在设备管理器中(图3-2所示),我们可以看到USB主控制器和根集线器。对于每个usb系统来说,都有一个称为HOST控制器的设备,该Host控制器和一个根Hub作为一个整体。这个根HUb下可以接多级Hub,每个Hub又可以接子Hub。每个usb设备作为一个节点接在不同级别的Hub上。每条usb总线上最多可以接127个设备。 图3-2 USB 总线在设备管理器中的显示3.2.2 USB总线协议USB总线是一种轮询式总线,端口初始化被主机控制,所有的数据传输。每一总线动作最多可以传送三个数据包,包

15、括令牌(Token)、数据(Data)、联络(Hand Shake)。数据传输方向不是从主机到设备就是从设备到主机。在开始传输时,由标志包来判断数据的传输方向,然后发送端开始发送含所有信息的数据包。接收端也要相应发送一个握手的数据包表明是否传输成功。USB包含四种基本的数据传输类型:1)控制传输(Control):一般用于短的、简单的对设备的命令和状态反馈,例如用于总线控制的0号管道。2)同步传输(Isochronous):按照有保障的速度(可能但不必然是尽快地)传输,可能有数据丢失,例如实时的音频、视频。3)中断传输(Interrupt):用于必须保证尽快反应的设备(有限延迟),例如鼠标、键

16、盘。4)批量传输(Bulk):使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的保证)传输数据,例如普通的文件传输。 第四章 Qt简介4.1 QT简述Qt是一个跨平台应用程序和UI开发框架。其中包括:高级C+代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,码管理和浏览工具。图4-1 QT 界面简介面4.2 QT的优势1)优良的跨平台特性。Qt支持下列操作系统:Microsoft Windows5/98、Microsoft WindowsNT、Linux等。2)面向对象。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。

17、3)丰富的API。Qt包括多达250个以上的C类,还提供基于模板的collections,I/O device,directory, date/time, management, serialization,file, 类。4)支持2D/3D图形渲染,支持OpenGL。5)大量的开发文档。6)XML支持。第五章STM32处理器上USB通信设计5.1 USB端硬件的设计5.1.1 STM32处理器概述STM32F4系列基于ARM Cortex-M4内核,采用了90纳米的NVM工艺和ART(应实时存储器加速器,Adaptive Real-Time Memory Accelerator)。STM32

18、 F4系列可达到210DMIPS 168MHz。集成了单周器DSP指令和FPU(floating point unit,浮点单元),提升了算能力,可以进行一些复杂的计算和控制。相比Cortex-M3内核,Cortex-M4F微控制器的优势有以下几点。首先是高性能模拟集成。它具备两个1 MSPS 12 位ADC,且无需硬件平均,另外具备三个模拟比较器。其次,连接功能丰富。其外设包括8个UART、6个I2C、4个SPI、2个CAN和1个USB OTG。 图 5-1 ARM Cortex-M4产品的框图5.1.2 硬件电路的设计图5-3 为USB电路的设计图,在引出的管脚中主要用到:USB_CTL,

19、DP,DM;USB与STM32的连接:USB_CTLPC7;DP-PA12;DM-PA11图 5-3 USB电路连接图图 5-4 为TFT屏电路连接,通信设计为SPI三线通信;管脚连接:SPI1_SCKPA5,SPI1_MOSIPA7,TFT_RSTPB0,TFT_CSPB1,TFT_RSPB2;TFT_VCC_ENPB10TFT_K和TFT_A为背光VDD;图 5-4 TFT屏电路连接5,1,3硬件驱动的程序安装当硬件电路完成后,为了让pc端是识别出是个USB设备,需要在电脑上安装驱动,本设计需要安装的是USB的转串口驱动,登录ST官网http: /www.st. com/web/en/ho

20、me.html搜索USB转串口驱动,可以在其官网上下载驱动VCP_V 4.1.0_setup.exe,然后根据步骤在电脑上安装此驱动。在确定硬件电路连接完好无误后,将设备通过USB线连接在电脑上,此时在电脑上会显示“检测到未知设备”连接,在电脑的设备管理器中也会出现“unknow device”,此时说明硬件电路没有问题,只是没有配置系统时钟的结果,所以下面要进行USB的枚举;在安装驱动的过程中发现,只是单独的安装VCP_V4.1.0_setup.exe驱动时,在微软windows7系统上是不能被识别的,通过查询网上的资料后发现在windows7系统上是不能够单一的安装这个驱动软件,还需要在相

21、应的C盘system32系统文件夹中拷贝一些必须的文件,具体步骤如下:现在windows7上安装VCP_V4.1.0_setup.exe,这时系统可能会报错误,先不要理会;1,把上网下载好的usbser.sys文件拷贝到C:WINDOWSsystem32drivers中2,把 mdmcpq.inf文件拷贝到C:WINDOWSsystem32中3,把 mdmcpq.inf文件拷贝到C:WINDOWSsystem32inf中完成上面的步骤后,再手动安装VCP_V4.1.0_setup.exe驱动,安装完成后,就设备与pc连接会发现STM32的USB设备被电脑识别为未知设备。在windows7上遇到

22、驱动安装的问题后,接着有在windows8和windows10系统的电脑上测试试过,发现在windows8和windows10的系统电脑上可以直接的安装VCP_V4.1.0_setup.exe驱动就可以识别STM32的USB设备,不需要额外拷贝windows7中的两个文件;至此驱动安装完成;在后面的设计中为了比较方便的在不同的系统上安装驱动,本人用QT软件将不同系统的和不同系统位数的驱动软件打包成一个安装驱动软件,程序设计中是将自动识别不同的windows系统版本和系统类型,并将文件自动拷贝到电脑中去;具体实现如下:1,判别不同版本的windows系统:if(QSysInfo:windowsV

23、ersion()=0x90) system_versions_flag=windows7;elseif(QSysInfo:windowsVersion()=0xa0) system_versions_flag=windows8;elseif(QSysInfo:windowsVersion()=0xb0) system_versions_flag=windows8.1;elseif(QSysInfo:windowsVersion()=0xc0)system_versions_flag=windows10;本程序中主要用到QSysInfo:windowsVersion()函数,这个函数是作为QSy

24、sInfo class类这个函数的主要功能就是用来获取系统的信息。2,判别系统类型SYSTEM_INFO si;GetNativeSystemInfo(&si);if(si.wProcessorArchitecture=PROCESSOR_ARCHITECTURE_AMD64|si.wProcessorArchitecture=PROCESSOR_ARCHITECTURE_IA64)sysbit=64bit;elsesysbit=32bit;判断系统类型相比判断系统版本号困难一些,需要在本系统的c盘文件中搜64bit和32bit系统中比较特别的文件,以此来判断是否为32bit系统或64bit系

25、统。64位Wnidows 里面有个叫Wow64 的模拟器技术,可以使32位的程序在64位Windows 上运行。当你想在程序里面针对32b位/64位系统执行不同代码的时候,需要判断操作系统是32位还是64位。本程序中使用 Windows API函数 GetNativeSystemInfo 获得这个信息。GetNative -SystemInfo函数式一个比较底层的函数,MSDN对GetNativeSystemInfo是这样解释的:该api是获取当前的系统信息给运行在WOW64下的一个应用程序。如果在一个64位的应用中调用此函数,那它等效于GetSystemInfo.3,将文件拷贝到系统的文件夹

26、中,在这里就以windows7的32bit为例:QFile:exists()if(QFile:exists(path)if(QFile:remove(path)if(QFile:copy(path1,path)Process *mp_helpProcess=new QProcess(this);mp_helpProcess-start(path);本程序中用到的几类:QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以独立的被使用,但是如果和QTextStream或QDataStream一起使用将非常方便。文件名一般可以通过构造函数来传递,但也可以使用setName()来设

27、置。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。文件可以用open()来打开、用close()来关闭、flush()来刷新。数据一般可以使用QDataStream或者QTextStream进行读写,但你也可以使用readBlock()和readLine()来读,使用writeBlock()来写。QFile也支持getch()、ungetch()和putch()。QMessageBox类提供了一个有一条简短消息、一个图标和一些按钮的模式对话框。消息框用于提供情报信息并且问一些简单的问题。5.2 STM32上USB源码的说明5,2,1USB模块核心文

28、件底层函数:1)、usb_int.c,本文件包含两个中断服务函数CTR_LP()和CTR_HP(),在接收发送中断时使用这两个函数进行处理,这两个函数又调用各个USB端点处理函数,端点处理函数由用户自定义。2)、usb_regs.c,本文件时硬件抽象层。它含有各种用于读取或设置USB寄存器的函数,相当于对寄存器操作方法的封装。3)、usb_mem.c,本文件主要负责进行数据传输处理。它主要负责数据在用户区域(内存)或USB数据包缓冲区的互相转移。中间层函数:1)、usb_core.c,本文件主要负责USB协议管理,如USB标准请求、各种端点0的控制信息处理。2)、usb_init.c,本文件主

29、要包含了USB初始化的函数。3)、usb_sil.c,本文件包含精简接口的初始化或向端点读写的操作函数。上层函数;1)、usb_pwr.c,该文件中包含处理上电、掉电、挂起和恢复事件的函数。2)、usb_istr.c,该文件中只有一个函数,即USB中断的USB_Istr函数,该函数对各类引起USB中断的事件做轮询处理。3)、usb_desc.c,该文件包含一些与USB相关的设备描述符、配置描述符等,以数组形式存储,在USB主机请求的时候这些信息将发送给主机。4)、usb_prop.c,该文件用于实现相关设备的USB协议,如初始化、SETUP包、IN包、OUT包等。5)、usb_endp.c,本

30、文件包含端点收、发送的处理函数,由用户根据不同的USB设备进行不同的定义。USB的应用软件在这三层上,在不同的USB应用中,用户可能需要对USB固库的上层部分文件配置进行修改(主要为usb_prop.c何usb_endp.c文件)。中间层何底层封装的非常好,对这些文件用户是不需要进行改动的;5.3 USB枚举过程 5.3.1 USB 枚举简介USB的枚举,对应的就是USB的Host和Device之间的对话,即Host根据Device所报告上来的参数,得知USB的device是啥类型的,具有啥功能,然后初始化相关参数。下面我们来看看枚举的详细过程。枚举的过程可分为4个状态阶段:接入状态阶段、缺省

31、状态阶段、地址状态段、设置状态阶段,各状态阶段任务如下:1)接入状态阶段:主机检测到新设备接入后,将复位总线(释放总线于空闲状态)。2)缺省状态阶段:主机利用0x00地址访问新接入的设备,读取部分描述符后会分配个设备地址。3)地址状态阶段:主机再次复位总线,然后用新分配的地址获取设备所有的描述符。4)设置状态阶段:主机根据设备的描述符,会对设备作些相关的配置。5.3.2 USB的设备描述符所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。描述符分为三大类:标准描述符、设备类描述符、厂商描

32、述符。除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。在USB1.0中规定了5种标准的描述符:设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符;规定的设备类描述符有:集线器类描述符、人机接口类描述符。图5-6 USB描述符5,3,3 USB设备的系统时钟配置在USB的枚举过程中,除了对其USB设备的描述符的检测和分析确定为VCP设备外,还要对其的USB的系统时钟进行配置,只有时钟频率相匹配后,当USB设备连接到电脑上时,才会被正常的识别和读取到位VCP设备,在STM32的USB库函数中“system_stm32f4xx.c”为系统时钟的设置函数;#ifdefined(

33、STM32F40_41xxx)|defined(STM32F427_437xx)|defined(STM32F429_439xx) | defined(STM32F401xx)/*PLL_VCO=(HSE_VALUE or HSI_VALUE/PLL_M)*PLL_N*/#definePLL_M10#elifdefined(STM32F446xx)#definePLL_M8#elifdefined(STM32F411xE)#ifdefined(USE_HSE_BYPASS)#definePLL_M8#else#definePLL_M16#endif/*USE_HSE_BYPASS*/5,3,4

34、 USB的初始化完成USB设备的系统时钟配置后,最后就是对USB的进行初始化,下面就是对USB初始化函数进行分析:staticuint32_tDemo_USBConfig(void) USBD_Init(&USB_OTG_dev,/只是传入一个可用结构体地址USB_OTG_FS_CORE_ID,/只是FS或HS选择&USR_desc,/获取设备描述符的接口&USBD_HID_cb,/传输接口&USR_cb);/没有用这几个函数主要对USB的类的注册和回调函数的注册,函数DCD_Init (pde v,coreID);是设置USB的内核参数,这个一般不需要更改,是官方提供的源代码;函数USB_O

35、TG_BSP_EnableInterrupt(pdev);为使能USB的中断;最后配置完成后,将USB连接到电脑上,在电脑的设备管理器中就会出现以下标示:STMicroelectronics Victual COM,表示的就是STM32的USB转串口设备标示,此时说明,本USB的设备枚举成功,可以与电脑端进行通信:图5-7 设备管理器中显示的USB串口标示5.4 系统内部的程序流程图 图5-8系统初始化过程 图5-9 USB中断处理历程 图5-10 UART的中断处理历程以上三个流程图只是分别从系统初始化,USB中断类型分析以及UART的中断处理例程进行了说明;当设备上电后,首先对系统时钟进行

36、初始化,接着是相应的gpio口的初始化和配置,接着讲USB的时钟配置成48MHZ,使能USB的中断,最后进行USB的系统的运行。5.5单片机通信程序的设计在完成USB的枚举后。就要对USB的通信功能进行测试,首先要先找到STM32的USB库函数的中断传输函数,这样才能收到电脑发送给USB设备的数据;为实现单片机与电脑端的简单通信功能,若要使stm32串口能够与电脑正常通信,STM32和USB接口需要使用相同的通信协议,在电脑的设备管理器中,可以设置串口的波特率为9600,在STM32端,可以通过软件将波特率调为9600,每接收一个8位数据,将数据保存并回送到电脑中,这样就可以实现对USB通信是

37、否通畅的测试,程序的流程图如下: 图5-11 STM32USB的程序通信流程图根据上面的流程图,可以做出相应的程序代码:在程序的主函数“main()”中:intmain(void) RCC_ClocksTypeDefRCC_Clocks;Api_addr=FLASH_USER_START_ADDR; Demo_USBConfig(); 当设备上电后,会直接进行USB的初始化,这时电脑就可以进行USB的通信;在STM32的USB库函数中usbd_cdc_vcp.c文件中,可以查到USB的中断接收函数uint16_t VCP_DataRx(uint8_t* Buf,uint32_tLen),从函数

38、的传参中有接收的数据Buf和所接收的数据的长度;图5-12 串口助手发送数据通过上面串口助手的发送数据,可以确定了USB的中断接收函数uint16_t VCP_DataRx ( uint8_t* Buf,uint32_t Len); 1,设置传输协议:1)数据以4位发送2)头4位数据定为功能位3)在发送主体数据中要加入前8字节用来存储数据大小和数据校验位4)当Flash擦除完成后,向上位机发送校验位5)当数据传输完成后,向上位机发送校验位6)当数据达到所发的数据量时,确定接收完成,并将数据存入Flash中。下面是数据接收的部分代码:/*3读取设备信息*/if(Read_device_info_

39、flag=1)SPI_FLASH_BufferRead(SPI1,ReadBuf,Readinfo_addr,30);DCD_EP_Tx(&USB_OTG_dev,CDC_IN_EP,ReadBuf,30);Erase_FlashPage(Api_addr,code_size); 2,STM32 USB库函数的数据发送函数函数:uint32_t DCD_EP_Tx(USB_OTG_CORE_HANDLE*pdev,uint8_t ep_addr, uint8_t *pbuf , uint32_tbuf_len)是USB的数据发送端,参数包括USB的结构体,数据发送位,数据包和数据长度;第六章

40、PC端USB上位机通信设计6.1上位机通信协议的设计 图6-1 电脑上位机与USB的通信处理流程上位机与USB通信的具体流程为:1,当USB设备连接电脑后,电脑识别到USB设备,读出相应的设备信息;2,上位机从系统中获取设备,读取到相应的串口号3,上位机通过读写的方式打开串口设备4,向USB端发送数据,并验证USB与上位机通信成功5,向下发送命令,索取USB的设备信息6,可以通过操作,向单片机发送相应的数据,比如图片数据;7,当数据发送完成后,下位机向上位机发送校验位,确定数据接收完成;6.2上位机通信过程的实现1,上位机从系统中获取USB设备的串口信息my_serialport1=newQS

41、erialPort();my_serialport1-setPortName(Com_Number);coutCom_Number.toStdString()fromthreadsetBaudRate(QSerialPort:Baud115200,QSerialPort:AllDirections)my_serialport1-setDataBits(QSerialPort:Data8);my_serialport1-setParity(QSerialPort:NoParity);my_serialport1-setStopBits(QSerialPort:OneStop);my_serial

42、port1-setFlowControl(QSerialPort:NoFlowControl);my_serialport1-setReadBufferSize(1000);当前的QtSerialPort模块中提供了两个C+类,分别是QSerialPort QSerialPortInfo。QSerialPort类提供了使用串口的各种接口。QSerialPortInfo是一个辅助类,可以提供计算机中可用串口的各种信息。一旦知道了串口可用于读或者写,就可以调用read()或者write()方法。可选的还有readline()和readAll()方法。如果数据不能在一次读完,那么剩下的数据接下来就会

43、存在QSerialPort的内部缓冲区中。你可以使用setReadBufferSize()方法设置缓冲区的大小。可以使用close()方法来关闭串口和取消I/O使用。2,以读写的方式打开串口if(my_serialport1-open(QIODevice:ReadWrite)=0)str=QString(SerialOpenError);emitmy_thread_message(str);/发射一个信号3,向STM32下位机发送数据,以图片文件为例:这里建立一个新文件,并以只读的方式打开;QFile*file=newQFile(s);if(file-open(QIODevice:ReadOn

44、ly)=0)这里读取图片的头信息判断是否为BMP格式;QStringdata=QString(file-readLine()if(data.at(0)!=0x42&data.at(1)!=0x4d)这里获取文件的绝对路径名;picture_filename=file-fileName();QFileInfofi=QFileInfo(picture_filename);QStringrelative_file_name=fi.fileName();这里以头信息4字节发送数据,当回复数据标志位后,上位机以20字节/每次,发送数据,/等待FLASH擦除完成if(my_serialport1-wait

45、ForReadyRead(50)/50msmy_serialport1-read(char*)control_buff1,30);if(my_serialport1-write(constchar*)rom_seek,PER_SIZE)!=PER_SIZE);my_serialport1-waitForBytesWritten(15);rom_seek+=PER_SIZE;第七章 USB通信模块的测试7.1 USB通信测试在本次设计USB的通信测试中,用到了三种调试软件,第一种是串口调试助手,第二种是BUS Hound,第三就是USB Trace;本软件在测试USB的接收和发送端函数时要用到,

46、可以进行小数据量的观察;观察接收文本框,可以发现,计算机成功接收到单片机回送的8位数据。在清空发送文本框后,经过多次的重复操作观察确认,每一次都能正确接收数据。为了进一步测验系统的稳定性,在拔掉USB通信模块后重新插入,计算机能够自动识别串口,重新打开串口调试工具后仍然能够正确的发送和接收。因此,该USB通信模块的数据准确性和系统的稳定性都得到了验证。如图7-1,显示的是串口助手发送数据图,利用串口助手发送小量数据到USB端下位机,在下位机中监测接收函数是否保证数据和长度正确,当保证数据和长度正确后,即可以判断此函数就是USB库函数的中断接收函数和发送数据函数;图7-1 串口助手调试软件图7-2 显示为USBTrace 的USB数据监测,通过本软件可以监测USB和PC端数据传输的全过程,保证数据的透明性,可以实时的PC端是否在传

温馨提示

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

评论

0/150

提交评论