申请学位级别:论文定稿日期:学位授予单位:学位授予日期:答辩委员会主席:程耕国教授评阅人:程耕国教授胡荣强教授㈩IIIIIIIIIIIIIIIIIl武汉科技大学{Y1944100研究生学位论文创新性声明本人郑重声明:所呈交的学位论文是本人在导师指导下,独立进行研究所取得的成果。除了文中已经注明引用的内容或属合作研究共同完成的工作外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。申请学位论文与资料若有不实之处,本人承担一切相关责任。论文作者签名:茎堑聋日期:三:三:旱研究生学位论文版权使用授权声明本论文的研究成果归武汉科技大学所有,其研究内容不得以其它单位的名义发表。本人完全了解武汉科技大学有关保留、使用学位论文的规定,同意学校保留并向有关部门(按照《武汉科技大学关于研究生学位论文收录工作的规定》执行)送交论文的复印件和电子版本,允许论文被查阅和借阅,同意学校将本论文的全部或部分内容编入学校认可的国家相关数据库进行检索和对外服务。论文作者签名:指导教师签名:日期:武汉科技大学硕士学位论文第1页摘要传统工业数据通信系统以单片机为下位机采集系统、PC构建的数据中心以及RS232等有线方式构建通信链路组成,该系统无法同时满足高性能的要求,并受到电缆布线的限制。在此背景下,本文提出一种新颖的基于ARM的蓝牙无线通信模块的设计,该系统以基于ARM的带蓝牙模块的嵌入式系统为下位机,通信链路使用蓝牙技术,相对于传统工业数据通信解决方案有一定的创新性。本文详细阐述了基于ARM的的蓝牙无线通信系统的原理、系统的软硬件设计和系统调试。介绍了蓝牙协议及蓝牙发射和接收技术等;硬件设计是以ARM9处理器为核心的硬件平台的设计,详细介绍蓝牙模块硬件设计及其配置方法,嵌入式主板及接口电路的设计;软件设计中介绍了嵌入式linux系统的移植、make工程管理文件的设计方法、基于ARM的蓝牙通信应用软件的工作流程和基于QT的界面设计,详细介绍了串口驱动程序设计、对串口终端参数的配置、数据发送和接收模块的的设计;系统调试中介绍了蓝牙模块和蓝牙适配器的通信调试以及嵌入式系统和蓝牙模块的通信调试过程。系统完成后进行了系统整机调试,成功的实现了基于ARM的带蓝牙模块的嵌入式系统和蓝牙适配器的无线通信。软硬件工作正常,系统性能达到课题预期要求。关键词:蓝牙技术;数据通信;linux操作系统第1I页武汉科技大学硕士学位论文AbstractThetraditionalindustrydatacommunicationsystemiSbasedmunicationlinkisbased011onMCU、PCandthecA)m-RS-232.TheARMiSsystemCannotmeettherequirementsisofhighper-wirelessformance,andislimitedwiththecableplacement.Underthisbackground,thebluetoothoncommunicationmodulebasedonproposed.Thelowerdeviceuseembeddedsystembasedtechnology,anditisin-ARMwimbluetoothmodule,thecommunicationlinkbluetoothnovativecomparedwiⅡlthetraditionalindustrydatacommunicationThispaperintroducesthesystem.systemandbluetoothtrans—systemprinciple,hardwareandsoftwaredesigning,anddebuggingingreaddetail.thesystemprincipleincludesbluetoothprotocolmiringformandreceiveingtechnology;Hardwaredesigningincludesdesigningthehardwareplat-onbasedARM9,thedesigningofthebluetoothmoduleandtheconfigurationoftheblue-toothmodule,thedesigningoftheembeddedmotherboardsigningincludesandinterfacecircuit;Softwarede-ofmakemigratinglinuxoperationsystem,thedesigningprogrambasedocuments,thetiondesigningbluetoothcommunicationapplicationprogrambased011projectmanagementonlinuxopera-system,anddesigninginterfaceapplicationQT,italsointroducesserialdriverprogram,theconfigurationofserialconsoleparameters,thesoftwaredesigningandadapterandtheofthedatatransmissionmodulethedatareceivingmodule;Thesystemdebuggingincludesthecom—municationdebuggingofthebluetoothmodule、析mthebluetoothtioncommunica-wholesys·betweendebuggingofembeddedsystembasedonARMwiththebluetoothbluetoothwirlessadapter.Thetemisdebuggedafterallthedesignsaredone.ThecommunicationembeddedsystembasedmeetstheonARMwithbluetoothmoduleandbluetoothadapteristheaccomplishedofthesuccessfully,boththehardwareandsoftwareoperateswell,andperformancesystemdesignrequirementsverywell.Keywords:Bluetoothtechnology;Datacommunication;linuxoperatingsystem武汉科技大学硕士学位论文第1II页目录摘要…………………………………………………………………………………………………………………………….IAbsgact……………………………………….…………………………………………………………………………………II}了j录………………………………………………………………………………………………………………………….III第一章绪论……………………………………………………………………………………11.1课题背景…………………………………………………………………………………l1.2工业数据通信系统……………………………………………………………………….11.2.1有线通信的分类和特点……………………………………………………………21.2.2无线通信的分类和特点……………………………………………………………21.3课题的研究意义和研究内容……………………………………………………………31.3.1课题的研究意义……………………………………………………………………31.3.2课题的研究内容……………………………………………………………………3第二章蓝牙技术基础……………………………………………………………………一…..42.1蓝牙技术和蓝牙SIG组织……………………………………………………………..42.2蓝牙协议…………………………………………………………………………………42.3蓝牙发射和接收技术……………………………………………………………………52.3.1蓝牙无线传播规范………………………………………………………………。52.3.2蓝牙信号的发送与接收………………………………………………………….52.3.3蓝牙调制方式…………………………………………………………………….62.3.4跳频选择和蓝牙地址…………………………………………………………….7第三章系统硬件设计……………………………………………………………………………83.1蓝牙模块………………………………………………………………………………….83.1.1模块概述…………………………………………………………………………..83.1.2模块配置说明……………………………………………………………………..83.1.3AT指令说明……………………………………………………………………….93.1.4配置蓝牙模块……………………………………………………………………1l3.2主板的设计……………………………………………………………………………..123-3硬件结构……………………………………………………………………………….133.3.13.3.2SDRAM存储系统……………………………………………………………….13FLASH存储系统…………………………………………………………………..143.3.3电源系统及接口…………………………………………………………………143.3.4串口………………………………………………………………………………………………………..143.3.53.3.6USB接口……………………………………………………………:………………………………….15LCD接口………………………………………………………………………………………………..15第1V页武汉科技大学硕士学位论文第四章系统软件设计…………………………………………………………………………174.1Linux系统概述…………………………………………………………………………174.1.1Linux发展历史………………………………………………………………….174.1.2Linux和UNIX的关系……………………………………………………………174.1.3GNU和Linux关系……………………………………………………………。174.1.4Linux目录结构…………………………………………………………………..184.1.5Linux系统结构…………………………………………………………………。l84.2Linux开发环境及开发工具……………………………………………………………194.2.1交叉编译环境………………………………………………………………………194.2.2编译器GCC的使用…………………………………………………………….204.2.3调试器GDB的使用…………………………………………………………….204.2.4make工程管理器………………………………………………………………。2l4.3串口终端控制…………………………………………………………………………..224.3.1设备文件简述……………………………………………………………………224.3.2Linux设备驱动工作流程……………………………………………………….224.3.3终端设备及其控制……………………………………………………………。234.3.4串口通信的基本概念…………………………………………………………。254.4软件设计………………………………………………………………………………25致武汉科技大学硕士学位论文第一章绪论课题背景第l页1.1随着工业信息化程度的提高,数据通信系统在工业中也越来越广泛。常用的工业数据通信系统架构由三部分构成:第一部分为带传感器的下位机系统;第二部分由电脑等监控设备组成的数据处理中心的上位机系统;第三部分为上位机和下位机之间的通信链路。常用的工业数据通信系统的结构图如图1.1所示:图1.1工业数据通信系统结构图在工业数据通信中往往通过传感器将检测到的数据上传至上位机控制中心,这样由电脑等设备构成的上位机数据控制中心能够把握所测量和监控对象的全面信息,建立监控下。位机的信息系统。传统的工业通信系统较常用的解决方案:单片机构成下位机系统实现数据的采集;电脑等设备构成的上位机系统实现数据监测;单片机和电脑的有线传输方式。随着社会的发。展人们对工业信息化要求的提高,往往希望将采集到的复杂的数据进行后期的细致处理,包括利用商业化的数据处理软件进行复杂的数据运算和绘图,这些软件大多要求在windows平台下运行;许多工业环境下不适宜复杂的连线,如何去掉繁杂的连线,简化通信链路,是一个值得思考的问题。在此背景下,本文提出一个基于ARM的蓝牙无线通信系统,在此系统中蓝牙代替有线电缆实现数据传输。本系统具有很强的现实意义,可用于无线抄表,工业数据传输,智能家居等领域。工业数据通信系统根据工业数据通信的需要常用的通信链路分为有线通信和无线通信,有线通信利用人造的传输媒体来传输信号,无线通信利用电磁波在空间中的传播来传输信号:其中有线通信分为串行传输和并行传输;无线通信根据传输距离的不同可分为远程无线通信和近程无线通信‘11。远程无线通信包括用GSM网络和GPRS网络业务承载数据;常用的近程无线通信方案包括射频、红外、无线局域网、蓝牙等。1.2第2页1.2.1有线通信的分类和特点武汉科技大学硕士学位论文传统的有线通信分为并行通信和串行通信。并行通信是指所传送数据的各位同时发送和接收,一个并行数据占多少位二进制数就需要连接多少根数据传输线。这种传输的特点是通信速度快,但传输线较多,价格较贵,适合近距离传输,常有的接口如DB.25并口,PCI总线等。串行通信是一位一位的传输数据,所以传送速度较慢,但是由于一位一位的传输数据,串行通信仅需要-N两根数据传输线即可,故在长距离传送数据时,比较经济。常有的串行通信有传统的RS.232、RS.485,以及代表新技术方向的CAN总线、USB、Etllenlet通信等。串行通信由于价格低廉,其应用远多于并行通信。有线通信的特点是技术成熟、调试方便、组建容易,最大的缺点是灵活性较差,每个设备都需要物理电缆连接。工业应用中设备较多,往往需要繁杂的连线,给操作带来极大的不便,还有一些场合不适宜使用有线电缆。有线通信局限性催生了无线通信在工业数据通信中的广泛应用。1.2.2无线通信的分类和特点无线通信在工业数据通信中具有广泛的应用。本题的目标是讨论车间级的工业数据传输,故讨论近距离无线通信数据传输设计方案。常用的短距离无线通信有射频、红外、无线局域网、蓝牙等。射频传输有低频射频和高频射频传输;低频射频通信常用于非接触式通信,如射频卡;高频射频通信常用于无线数据对传。射频通信的缺点是由于其工作频段广,对于低频、高频、甚高频需要不同的设计方案,硬件难度高,在协议层开发者需要自己编写通信协议,增加了开发难度【2】。红外传输的常用于遥控器、手机、电脑等手持终端之间的通信,红外通信的缺点是指向性强,中间不能有任何障碍,必须对准,通常传输角度不能大于30度【31。无线局域网对应于802.11标准,覆盖面积通常可达到百米,覆盖面积呈圆形分布,是目前传输速率最高的一种无线通信方式,但是使用无线局域网实现无线通信价格昂贵,多用于笔记本、无线路由器等娱乐消费类产品,目前还没有广泛应用于对价格敏感的工业类产品。蓝牙技术是一种新兴的短距离无线通信技术,具有较多的技术优势:抗干扰能力强,组网灵活,传输速率高,功耗小。与无线局域网相比,蓝牙设备成本低廉;蓝牙设备组网灵活方便,可组成一对多或多对多的通信网络;与红外传输相比,蓝牙设备没有任何方向性限制,不受障碍物影响;其传输速率最大可高达lMbps;当然蓝牙也有自身的局限性:传输距离有限,常用的蓝牙芯片传输距离为10米,若需要增加传输距离可以通过增加功放,通信距离可提高到100米。综合以上几种短距离无线通信解决方案,蓝牙技术是短距离工业数据通信系统的理想武汉科技大学硕士学位论文第3页解决方案之一,可以便捷的实现工业设备间短距离的无线数据通信。基于该结论,本课题选择将蓝牙技术应用于工业设备间的短距离数据传输。课题的研究意义和研究内容1.31.3.1课题的研究意义在当前工业数据通信技术领域,蓝牙技术的应用并不是特别广泛,但是正如上文所分析蓝牙技术虽然起步较晚,但拥有众多优势,如:抗干扰能力强,组网灵活,传输速率高,功耗小,性价比高等;在上文中分将蓝牙技术和各种短距离无线通信方案的技术和价格进行比较,蓝牙的性价比优于其它短距离无线通信方案,因此必将在工业无线通信领域占有一席之地。ARM嵌入式具有多种优势,ARM微处理器是高性能、低成本、低功耗的微处理器,既有单片机嵌入式的系统的低功耗和小巧体积,又兼具PC的强大功能,正由于其以上特点,ARM嵌入式在工业信息化中有着越来越广阔的应用【41。本课题应用蓝牙无线通信技术,结合ARM嵌入式系统构建一个新型的基于ARM的蓝牙无线通信系统。系统的数据中心运行于Linux操作系统,具有大众的熟悉的界面风格,方便用户操作。借助于蓝牙无线通信技术,数据中心可以连接到允许范围内的设备,进行数据传输,本课题相对于传统工业数据传输具有一定的创新性。1.3.2课题的研究内容本课题介绍一种基于ARM的蓝牙无线通信模块的设计,重点介绍了蓝牙模块在嵌入式平台上硬件和软件的设计与实现。该系统以ARMmini2440为控制核心,南京国春GC.02为蓝牙模块为无线收发模块,在Linux操作系统上完成应用程序,具有很好的稳定性和友好的界面。课题的研究内容和前期准备如下:(1)系统学习蓝牙技术标准,掌握实现蓝牙无线通信所需的基础知识。包括蓝牙协议体系,蓝牙工作方式等;(2)学习基于ARM的嵌入式系统的相关基础知识,如ARM嵌入式系统的基本硬件资源,了解与该模块相关的LCD、USB和串口,了解嵌入式软件编程的基本流程,了解交叉编译,makefie文件的编写规则;(3)研究该设计中所用的蓝牙模块,掌握配置该模块的方法,使用蓝牙适配器调试蓝牙模块的初始化、配对、实现通信过程。归纳出课题所需要的蓝牙模块的配置和控制方法;(4)学习Linux操作系统的相关知识,学习在平台上移植Linux操作系统;(5)设计蓝牙通信应用程序,调试并测试;(6)数据中心和设计的蓝牙模块进行调试,实现系统命令和数据的无线传输。第4页武汉科技大学硕士学位论文第二章蓝牙技术基础2.1蓝牙技术和蓝牙SIG组织蓝牙是一种支持设备短距离通信(一般10m内)的无线电技术。蓝牙工作在全球通用的2.4GHzISM(apt业、科学、医学)频段。其数据速率为1Mbps。蓝牙技术可以将多个蓝牙节点组成微微网,在微微网中,其中一个蓝牙节点作为主站,主站最多可控制7个蓝牙从站,多个微微网可以组成一个散射网;在通信安全上,每一个蓝牙收发器都被唯一分配了一个遵循IEEE802标准的48位蓝牙设备地址,以此保证数据传输的安全性。由于蓝牙技术具有众多的优势如:协议开放、抗干扰能力强、性价比高、功耗低等优点,在未来数据通信必将具有广泛的应用前景【51。蓝牙SIG组织的倡导者由世界最有名的rr产业公司(爱立信、Intel、IBM、东芝、诺基亚、3Com、微软、摩托罗拉和朗讯),该组织的任务是协议制定蓝牙技术标准、测试蓝牙产品的方法、协调各国蓝牙技术的使用频段【6】。加入该组织的成员有:通信行业:爱立信、诺基亚、西门子、AT&T、摩托罗拉、日立、英国电讯;IC生产行业:Intel、Philips、松下、三星、AMD、TI等;计算机硬件行业:IBM、NEC、惠普、戴尔等;计算机软件行业:微软等;汽车行业:福特、沃尔沃、宝马、Dele等;家用电器及外围I/O设备等行业:东芝、LG、夏普、索尼、三菱重工等;网络产品:3Com、朗讯等。SIG有如此的吸引力,是因为发展蓝牙技术已是大势所趋,并且参加SIG的成员享有一系列的优惠条件。SIG是一个非盈利的科研、生产、营销厂商组织,它的主要职责是制定蓝牙技术规范和推广蓝牙技术。2.2蓝牙协议蓝牙协议的集合构成了蓝牙协议栈,在蓝牙协议栈内,各种协议是有层次的按序排列,形成蓝牙独有的协议体系结构。蓝牙协议栈体系如图2.1所示:蓝牙协议按其功能可以划分为四类:1)蓝牙核心协议:基带BB、链接管理LMP、链接控制和适配L2CAP、服务发现SDP协议。基带(BB)实现蓝牙数据和帧的传输,传输的方式为分组交换和电路交换;通过链路管理层的设置和控制(LM)可以控制链路的建立、加密、控制等;逻辑链路控制和适配协议(L2CAP)是上层协议和上层协议之间不同长度的分组的桥梁,实现拆装数据、控制服务质量和协议复用等功能;服务发现SDP协议为上层给出能够发现并解释网络中可用协议。2)蓝牙串口替代协议:串口仿真RFCOMM协议,RFCOMM是串13仿真协议是为建立武汉科技大学硕士学位论文第5页在串口之上的传统应用而提供的特定接口环境。3)蓝牙电话控制协议:有电话通信TCS协议、AT命令集。4)蓝牙选用协议:有PPP、UDD/TCP/IP、WAP、OBEX、WAE、VCard、Veal、IrMC丝吲寸o在以上四类协议中,进行蓝牙传输的核心是蓝牙核心协议,蓝牙设备基本上都需要核心协议,其他协议按实际通信的需要而选定。Vcard/VealR丽晶甲服务发现圈恶一两瑚旦Il坍议音(SDP)u仿真协议逻辑链路控制与适配协议(L2CAP)制接口(HCI)制(BB&LC)牙无线射频(I强)图2.1蓝牙协议2.3蓝牙发射和接收技术2.3.1蓝牙无线传播规范蓝牙运行频段是2.4GHzISM(即工业、科学、医学)频段,但是世界上对此却有两种不同定义。其中大多数国家将频段定义范围为2.400GHz到2.4835GHz;法国等少数国家将频段定义范围为2.4465GHz到2.4835GHz。表2.1列出了两种不同的频段分配方案【引。表2.1频段信道分配方案分配方案信道分配频率带宽/GHz79信道跳频f=2402+kMHz,k=-0,…,782.4465GHz—-2.4835GHz23信道跳频f=-245针kMHz,k=-0,…,222.400GHz—-2.4835GHz2.3.2蓝牙信号的发送与接收蓝牙发送和接收信号的处理过程如图2.2所示。发送前对数据进行载波调制,接收之后对接收到的高频信号进行解调。在蓝牙数据发送和接收的过程中,有效的数据信息和控制信息同时在通道上传送,它们分别使用自己的接口。其中数据信息向空间发送或从空间接收;控制信息用于控制无线射频收发器的整套动作。在整套控制动作中发射时控制信息主要控制的信息有发射机载波频率调整、发射的功率级别、数据信息bit(位)流向等。接收时控制信息第6页武汉科技大学硕士学位论文匾雌墨悃叫到羹1无线射频收发器几塌月'Ⅻ忧厘研卧蜊2.4GH频z镯l匿崦M萱卜引\r,I黼Hi图2.2蓝牙信号的收发主要控制数据流的接收程序、接收到信号后的解调、接收信息的强度、分析信噪比的大小等信息。由于蓝牙工作的频段2.4GHzISM是通用的工业、科学、医学频段,在通信过程中随时有不可预测的干扰。为了确保正蓝牙设备不受干扰的正常工作,蓝牙规范采取了“跳频"技术保证传输稳定。跳频技术是把频段分成若干个“跳频信道",在通信的过程中,无线电发射器和接收器按照双方约定好的时刻和方法码序列不断从一个信道跳到另一个信道,其他的干扰是随机的,不可能按频率跳动的同一规律对蓝牙发生干扰,这种不断跳动信道的技术就称为跳频技术【9】。跳频技术中使用的码序列又称为“伪随机码”,对于79信道跳频方案,信道分配频率公式为:f=-2402+kMHz,k=0,…,78;则伪随机码(或称为伪随机码序列)为2402MHz,2403MHz,2404MHz,…,2480MHZ。发射和接收按照伪随机码序列进行跳频,虽然能够有效地抑制干扰,但在每一个频率上的干扰还是存在,伪随机码相邻两个频率仅相差lMHz,反映出跳频瞬间的频带宽度较窄。解决这个问题的办法是使用跳频扩展频谱技术(FHSS:FrequencyHoppingSpreadSpectrum),该技术能将窄频带成百倍地扩展为宽频带,这就使得在一个频率上的干扰变得更小,有效地避免干扰的发生。蓝牙信号发射距离与蓝牙发送器的功率有密切关系:功率越大,辐射的距离越远。如100roW的发射距离100m,2.5mW的发射距离是10m,lmW的是10cm。2.3.3蓝牙调制方式蓝牙无线电信号使用的调制方式是高斯滤波移频键控GFSK。GFSK高斯频移键控调制是把输入信号经高斯低通滤波器滤波,作适当的相位积分运算,分别对载波的同相和正交分量相乘,这相当与进行预调制,再进行FSK调制。该调制方式的好处是不仅能保持恒定幅度的同时,而且能够通过改变高斯低通滤波器的3dB带宽对已调信号的频谱进行控制,具有恒幅包络、功率谱集中、频谱较窄等无线通信系统所希望的特性【lo】。设蓝牙无线电信号频率为/,发射的中心频率精确度应在六士75kHz间,这是发送前的频率精度。蓝牙无线调制技术的一些参数见表2.2:武汉科技大学硕士学位论文第7页2.3.4跳频选择和蓝牙地址蓝牙设备在微微网中参加通信,应该知道如何选择跳频,即在定义的跳频序列中知道2.2蓝牙无线调制技术参数项目GFSK单时隙分组频率偏移±25kHz3~5时隙分组频率偏移±40kHZ最大频移400H衫fls速率1M符号|s跳频一般值:1600跳/s;查询呼叫3200跳/s接收灵敏度输入≤一70Bm时,接收错误比特率≤0.1%使用哪一个频率。蓝牙跳频选择与蓝牙时钟和蓝牙地址有关。每个蓝牙设备都需要一个内部系统时钟,产生蓝牙收发器的定时和跳频,这个时钟就称为蓝牙时钟,位于28位自由运行的分组头中。如图2.3所示,如果用计数器实现蓝牙时钟,需要28位计数器,范围在2船一1。蓝牙时钟每秒跳3200次,速率3.21(Hz,每312.5炒跳一次。图中L27~L0是蓝牙时钟的28位,最低位乙0位表示时钟CLK=3.2kHz的周期数1/3.2鼢312.5∥J,次低位乙l位表示时钟CLK的二分频的周期数1/1.6鼢625s。,.2此[二[三正叵[三Ⅱ垂工至卫习CLKC刍…”c12…一c2clco图2.3蓝牙时钟为了识别众多的蓝牙设备,像对待网络设备一样,每个蓝牙设备都分配了一个48位的地址,简称蓝牙地址。其中24位用作生产厂商的唯一识别码,由蓝牙权威部门分配给不同的厂商,其余24位在各厂商内部分配【111。在蓝牙时钟和蓝牙地址的共同作用下,蓝牙基带处理的直接结果就是产生出跳频序列。第8页武汉科技大学硕士学位论文第三章系统硬件设计3.1蓝牙模块本文所用的蓝牙模块为GC.02,运用CSR公司的AUDIO.FLASH蓝牙芯片设计的模块,该模块集成度高,功耗小,是高质量的CLASS2蓝牙模块,最高传输距离为10米,GC.02蓝牙模块是插针式蓝牙模块,针间距为2.0mm,采用双列直插设计,便于进行测试。GC.02的接口资源非常丰富:有时钟单元、UART串行接口、USB通用串行接口、SPI串行同步数据接口、复位口、电源口等。图3.1所示为该模块外观:级,,,锄绷?。瑚缀彩鳞张绰绣酾锄够渤锄铹嘭彩自缓缓馏孽;磊薏。;碧毳;凄滋图3.1蓝牙模块C,C.023.1.1模块概述GC.02模块采用16MHZ晶振,在某些应用场合(如GSM,CDMA),不希望使用16MHZ晶振时钟而使用特殊的外部时钟,此时外部时钟可由ExternalClock输入,否则该腿悬空。GC.02的串口波特率、起始位、停止位、奇偶校验位又编程设定,最大波特率为1.4Mbps。串行13微TTL电平,与计算机串行通信时要采用RS232电平转换器(如MAX232),计算机最大波波特率为115.2Kbps,如果超时,需要加高速串口卡。USB通用串行口有USB.DN和USB.DP,可以与计算机USB直接相联,支持USB2.0版本。不用时悬空。SPI串行同步数据口tGC.02有一个从SPI口和一个主SPI口。从SPI口由SPIMOSI、SPICSB、SPICLK、SPIMISO组成;主SPI口由P104、P105、P106、P107组成。如果不用可以将接口编程为输入输出口。复位口:RESET为高电平有效,用2K下拉电阻接地。模块主芯片如图3.2所示。3.1.2模块配置说明GC.02的固件封装了AT命令的解释程序,熟练掌握GC.02的AT命令及响应是调试蓝牙系统的基础,用户需要向模块发送特定的AT命令就可以进行参数配置,使蓝牙模块图3.2蓝牙模块主芯片工作于从模式、主模式或配置两个两个蓝牙模块成一对一的透明传输。蓝牙模块加电后处于正常待机状态,在与远端蓝牙设备未建立蓝牙串口链路时,可通过蓝牙模块的UART串口输入“AT模式进入指令"和“AT模式进入口令’’,进行参数配置;如蓝牙模块已经与远端蓝牙设备建立串口链路,蓝牙模块的P105会输入约200mS间隔的脉冲信号,如外接指示灯会快速闪烁,此时无法进入参数配置模式;如蓝牙设备已进孳入参数配置模式,不在与远端蓝牙设备进行任何通讯。3.1.3AT指令说明所有AT指令都以“AT”开始,以回车结束,AT指令可不分大小写,但某些指令参数区分大小写。指令执行正确回报“OK",错误回报有“ERROR":命令错误;“COMMAND爱PARAMERROR"表示设置参数错误;“READERROR"表示读参数时错误。指令结尾为“?"一般为显示指令,命令中有“=”号的指令为设置指令。1握手指令:指令格式:AT回车;指令说明:蓝牙模块回送“OK",表明AT模式工作正常。2复位指令指令格式:AT+RESET回车;指令说明:蓝牙模块回送“reset….",蓝牙模块复位,退出AT模式。蓝牙模块复位后,采用用户设置的串口参数工作,此时可能需要调整串口软件的端口参数。3恢复缺省参数指令格式:AT+DEFAULT回车;指令说明:蓝牙模块恢复缺省参数。主要缺省参数:PIN:00000000;主从角色:从模式;串口参数:9600,N,8,1;设备名称:GuoChun;串口提示信息:显示。4本端蓝牙地址显示第10页指令格式:AT+ADDR?回车;指令说明:显示本端蓝牙地址。5显示固件版本号指令格式:AT+VER?回车;指令说明:显示固件版本号。6武汉科技大学硕士学位论文PIN码设置指令指令格式:AT+PIN?回车;指令说明:显示蓝牙模块当前的PIN密码;指令格式:AT+PIN=12345678回车;指令说明:设置蓝牙模块的PIN码为12345678;参数说明:PIN码为数字或英文字符,不能为特殊字符。7串口参数指令指令格式:AT+UART?回车;指令说明:显示蓝牙模块正常工作的串口参数;指令格式:AT+UARTBAUD毗盯E=115200回车;参数说明:串口波特率值为f1200,2400,4800,9600,14400,19200,38400,57600,115200,230400,256000,460800}之一,如果串121波特率超过115200,可能造成无法用PC机进入AT指令模式的后果。指令格式:AT+U触玎STOP=1回车;指令说明:设置蓝牙模块的串口停止位长;参数说明:1或者2;指令格式:Ar+u越玎PARITY.—.N回车;指令说明:设置蓝牙模块的串口校验位;参数说明:N,E,O分别为无校验位,偶校验位,奇校验位;8主从角色设置指令指令格式:Ar+ROLE?回车;指令说明:显示蓝牙模块的角色模式,当蓝牙模块工作于从模式Slave时,蓝牙模块将始终处于待机状态,需远端蓝牙设备发起链路请求;当蓝牙模块工作于主模式Maser时,自动向绑定的从端蓝牙设备发起链路建立请求,需与远端的PIN码一致。指令格式:AT+ROLE=0回;指令说明:设置蓝牙模块的主从角色;参数说明:卜从模式Slave,1一主模式Master;9查询指令指令格式:AT+INQMODE?回车;指令说明:显示查询模式参数;指令格式:AT+INQMAXNUM=8回车;武汉科技大学硕士学位论文第11页指令说明:设置最多查询到的蓝牙设备数目,当查询结果达到此命令设置的参数时,停止查询。参数说明:1.29;缺省值:8:指令格式:AT+INQTIME=15回车;指令说明:设置查询最长时间,查询时间达到此命令参数时,停止查询;参数说明:1-69:缺省值:10;指令说明:AT+INQUIRY回车;指令说明:开始查询周围可被查找的蓝牙设备;每次查询完成后,如有设备被查询到,模块自动绑定查找到的1号设备,如需绑定的设备不是查询结果的1号设备,需用绑定从端地址指令重新绑定。10绑定从端地址指令指令格式:AT+BINDADDR?回车;指令说明:显示绑定的从端底子,仅对蓝牙模块处于主模式有效;指令格式:AT+BINDADDRO=oo:02:5b:oo:d0:9回车;指令说明:设定蓝牙设备的地址为绑定从端地址,仅对蓝牙模块处于主模式有效;参数说明:远端蓝牙设备地址,支持双字节格式和四字节格式。11设备名称指令指令格式:AT+DEVICENAME?回车;指令说明:显示本蓝牙模块设备名称,此名称可能会在远端蓝牙设备中显示;指令格式:触阡DEvICEN舢ⅥE=GuoCh_un回车;指令说明:设置蓝牙模块的设备名称;参数说明:1.20位数字或英文字符及下划线。12串口提示信息显示指令指令格式:AT+MSGENABLE?回车;指令说明:显示目前串口提示信息状态。蓝牙模块正常工作时,会有相应的串口提示信息,如开机时的版本信息和本端地址,建链、锻炼后的提示信息。可通过设置决定是否输出串口提示信息。指令格式:Ar+MSGENABLE=I回车;指令说明:是否输出串口提示信息;参数说明:1表示工作时输出串口提示信息,0表示工作时不输出串口提示信息。3.1.4配置蓝牙模块本设计中所用的蓝牙模块设为从端蓝牙模块,查找、配对和连接绑定的从端设备,一旦连接成功,即可进行双向透明传输。可用于内置蓝牙的仪表仪器、PDA、手机、笔记本第12页内置蓝牙,PC+USB蓝牙适配器器等进行无线串口通讯。设置蓝牙模块为从模式:AT+role=0;武汉科技大学硕士学位论文帅in_12345678;AT+devicename=BtdeviceAT+msgenable=0;AT+uartbaurate=115200;/设置蓝牙模块为从模块//设置配对PIN码/01;/设置设备名称//关闭串i:l提示信息//设置波特率/3.2主板的设计主板的核心芯片采用三星公司的ARM处理器mini2440。mini2440采用SamsungS3C2440为微处理器,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性,具有高性能、低功耗、接口丰富等特性。以一片256MB的NondFlash作为系统程序存储器,以64MB的SDRAM作为系统的数据存储器。主板提供多种扩展应用接口的支持【121。图3.3为mini2440外观:武汉科技大学硕士学位论文.标准配置为NEC256K色3.5英寸TFT真彩液晶屏,带触摸屏接口和资源:.3个串行口.一个USBHost接口.一个USBslave第13页B型接口.一个2.0mm间距10针JTAG接口.板载实时时钟电池.电源接口(5v),带电源开关和指示灯系统时钟源:.12M无振晶振扩展接口:.一个34pin2.00rnmGPIO接121.一个40pin2.00mm系统总线接121规格尺寸:.100"100(mm)操作系统支持:.Linux操作系统2.6.32.23.3硬件结构硬件由两大部分组成:一部分是蓝牙模块,它通过UART与主板进行连接,主机和蓝牙芯片间的收发都是使用RX和TX两条信号线来完成的,ARM的TX和RX分别接蓝牙模块的RX和TX端;另一部分是主板,主板上配有各种标准接口、相关的电路设备以及独立的电源系统。硬件框图如图3.4所示:雾sB接【jI带蓝牙的台式机带蓝牙功(串口)H。:÷能笔记本带蓝牙功能PDA(蓝牙从站)图3.4硬件框图3.3.1SDRAM存储系统mini2440使用了两片外接的32Mbyte总共64Mbyte的SDRAM芯片(型号为HY57V561620FTP),一般称之为内存,它们并接在一起形成32-bit的总线数据宽度,这样可以增加访问的速度。图3.5为SDRAM原理图:第14页一武汉科技大学硕士学位论文蠡囊一嚣器譬戮豪袋器灏二日雕一篓辘蠢蕃翥。一观RAM存储器电路图武汉科技大学硕士学位论文第15页3.3v电源孓生电路图3.8串口电路3.3.5USB接口mini2440有两种USB接口,一个是USBHost,它和普通PC的USB接口是一样的,可以接USB摄像头USB键盘USB鼠标优盘等常见的USB外设,另一种是USBSlave,一般使用它来下载程序到目标板。图3.9为USB接口电路。3.3.6LCD接口LCD也就是液晶,是嵌入式系统的常见显示介质。其基本原理是通过给不同的液晶单元供电,控制其光线的通过与否而达到目的。每个液晶单元都对应一个电极,LCD驱动控制就是对电极的通/断进行控制‘13l。本设计所用的LCD接1:3其中包含常见的行场扫描、时钟等控制信号。图3.10为LCD41Pin接口,J2为LCD驱动板供电选择信号,较常用的是5V供电。第16页武汉科技大学硕士学位论文USB使能引脚.使腓PC5USB5V图3.9USB接口电路图3.10LCD41P接口1991年,LinuxTorvals就读于赫尔基大学,他购买了个人计算机,并在其上安装了Minix。Minix是一个类UNIX的系统,TorvMs发现Minix操作系统在功能上并不能满足要求,于是Tory,s决定开发自己的操作系统,以取代Minix。1991年9月17日,TorvMs在网上发布了Linux的0.01版本内核,1994年3月13日,Linuxl.0版本内核正式发布,Linuxl.0版本内核在性能上的到很大的提升。到1995年,Linuxl.2版本内核发布,1996年,Linux2.0内核发布,2.0版本内核的一个重要特点就是其开始支持对称多处理器(SMP)。Linux2.2版本内核和Linux2.4版本内核分别在1999年和2001年发布,这两个版本主要提升了Linux对服务器领域的对称多处理器的支持,同时大大扩展了对设备的支持能力。2004年12月18日,Linux2.6.0版本内核发布,这一版本在对称多处理器上得到了极大的进步,同时,其进程调度算法支持了内核抢占,这一点对于实时嵌入式系统而言非常重要。本文所设计的软件正是基于Linux2.6版本内核的【14】。4.1.2Linux和UNIX的关系Linux被称为类UNIX操作系统,Linux重新实现了POSIX标准。Linux和UNIX在系统具体实现上存在差异。但是,从用户和系统管理员的角度来看,Linux和UNIX不存在很大的差异,在Linux下运行的很多软件就是原来运行在UNIX下的软件。例如,著名的Web服务器软件Apache、图形化用户界面XWindow系统等原来都运行在UNIX系统上1151Linux与大多数UNIX版本的最大不同在于其源代码的开放性和自由性。4.1.3GNU和Linux关系GNU是“GNU’SNotUnix”的首缩写字母。到20世纪90年代初,GNU项目取得了巨大的成果,其实现了除系统内核以外的各种必备软件。目前人们熟知的Emacs编辑器、GCC程序编译器、C语言库酉ib、编译工具Make等都来自GNU项目。目前,大家所使用的不同版本的Linux是由诸多GNU软件和Linux内核构成的完整、可用的操作系统。Linux并不包含XWindow系统、Gnome桌面管理系统、GCC程序编译器等诸多软件。严格意义上讲,Linux只是一个操作系统内核,因此,很多人认为Linux操作系统应该被称为GNU/Linux。第18页武汉科技大学硕士学位论文4.1.4Linux目录结构根据FHS的规定,Linux不同发行版本都存在如图4.1所示的目录结构:图4.1Linux目录结构●/bin:该目录存放有对系统运行极为重要的二进制可执行文件。其中的一些文件是/usr/bin目录中文件的符号链接,同时还有一些用户命令。为了方便用户使用,安装程序时往往将可执行文件的符号链接放置在该目录下,使用户不用设置可执行文件的路径。●/etc:该目录存放系统配置文件。FHS2.3中明确指出该目录下只存放静态文件,并且不能包含可执行的二进制文件。·/home:该目录存放各个用户相关的文件。由于不同主机安装Linux后该目录根据用户名的不同存在差异,因此不应该有程序依赖于该目录。●/tmp:该目录为临时目录,很多程序要在该目录-F仓'J建临时文件,例如pg、VI等。·/var:该目录存放经常变化的信息,用于log日志、邮件、spool文件等的存储。·/proe:该目录是伪目录,系统将当前运行的进程映射为文件,通过修改目录下文件的值可以完成对内核运行参数的修改。●/dev:设备目录,包含特殊文件或者设备文件。·/boot:该目录下存放启动过程中所需要的所有文件,其中包括Linux内核和引导配置文件。·/usr:该目录包含用户相关的程序和库文件。·/sbin:该目录存放与系统相关的可执行文件。4.1.5Linux系统结构Linux操作系统包括:用户应用程序、系统调用、Linux内核、设备驱动等组成,其系统结构图如图4.2所示:·用户应用程序:用户应用程序通过系统调用接1:3与Linux内核发生交互以实现其具体功能。如文字处理软件、邮件收发软件、Web浏览器等都属于用户应用程序。武汉科技大学硕士学位论文第19页图4.2Linux系统结构图·Shell:Shell是命令解释器,它的作用是按照一定的规则将输入的命令加以解释并传给系统,即Shell是用户与操作系统交互的平台。用户可以利用Shell来实现程序的启动、挂起或停止。Linux系统采用了Bash作为其默认的命令解释器。●库函数:库函数是为程序员提供的编程接口。通过对系统调用的再次封装,库函数往往提供了比系统调用更方便的功能。例如:socket通信中的send函数最终调用write函数。但是,send函数提供了write函数不具备的发送速度控制,使程序。员不必关心这些细节,代码重用得到了很大的提高。●Linux内核:Linux内核主要包括进程调度、内核管理、虚拟文件和进程间通信。●设备驱动:设备驱动负责驱动系统的相关硬件,使其正常地发挥作用【17】。4.2Linux开发环境及开发工具4.2.1交叉编译环境在嵌入式软件开发的过程中,我们将通用计算机称为宿主机,运行程序的ARM平台也就是嵌入式系统环境称为目标机。由于宿主机和目标机的体系结构不同,嵌入式系统是专用计算机系统,他对系统的功能、可靠性、成本、体积、功耗等都有严格的要求,并没有相关的编译工具,嵌入式系统需要借助宿主机来编译出目标机的可执行代码【l引。由于嵌入式硬件的特殊性,在宿主机X86平台上可以运行的程序在目标机ARM上无法运行,嵌入式硬件一般不能安装发行版的Linux系统,所以需要为专门的目标板定¥1]Linux操作系统,由此必然需要相应的开发环境。嵌入式软件开发采用交叉编译的方式在一个平台上生成可以在另一个平台上执行的代码。嵌入式交叉编译环境如图4.3所示:图4.3嵌入式交叉编译环境图4.4显示了交叉编译的这几个过程:第20页武汉科技大学硕士学位论文图4.4嵌入式交叉编译过程4.2.2编译器GCC的使用GCC是GNU编译器家族,GCC编译流程分为四个步骤,分别为:预处理、编译、汇编、链接。编译器通过程序的扩展名可分辨编写原始程序码所用的语言,由于不同的程序所需要执行的编译代码是不同的,因此,GCC编译器根据不同的后缀名对程序进行处理,表4.1给出了不同的后缀名的处理方式:表4.1GCC所支持后缀名解释后缀名.C所对应语言C原始语言C++原始语言objective.C原始语言已经预处理的c原始语言编译流程预处理、编译、汇编预处理、编译、汇编预处理、编译、汇编编译、汇编编译、汇编汇编.C/.cc/.CXX.m.1.n已经预处理的C++原始语言汇编语言原始语言预处理文件(头文件)目标文件编译后的库文件.s/.S.h.O(不常出现在指令行)链接.a/.so链接GCC编译流程:1预处理阶段其命令格式为:gcc-E一0【目标文件】[编译文件】;2编译阶段其命令为:gcc-S-0[目标文件】[编译文件】;3汇编阶段其命令格式为:gcc--C_0[目标文件】[编译文件】;4链接阶段其命令格式为:gcc【目标文件】-O[编译文件】。4.2.3调试器GDB的使用调试是程序开发的重要环节,找出程序中的错误是程序开发的重要组成部分。优秀的调试工具必须能够设置所有能影响程序运行的参数;能够根据指定的条件改变程序的运行;能够让程序在指定的条件下停止等【191。GDB常用的调试命令:l进入调试:GDB【调试程序名称】;2查看文件:GDBl(1ist);3设置断点:gdbb[设置断点的行号】;4查看断点情况:gdbinfob;5运行代码:gdbr;武汉科技大学硕士学位论文第21页gdb默认从首行开始运行,在r后面加上行号即可从程序中指定行开始运行。6查看变量值:gdbP【变量名称】;在程序运行之后,可通过该命令查看断点处的相关变量值。7观察变量:gdbwatch[变量名称】;8单步运行:gdbn;一次只运行一条语句,这样方便查看程序的运行情况。9程序继续运行:gdbC;该命令表示程序继续运行,只到程序再次遇到断点停止。GDB有丰富的断点设置和删除命令,在调试过程中可以灵活使用。表4.2所示为GDB中常用断点设置与删除命令,其中delete与clear的不同之处:clear要给出断点的行号,delete要给出断点的编号。表4.2GDB中常用断点设置与删除命令命令格式作用break+设置断点的行号用于在程序中对应行设置断点break+行号或函数名设置临时断点,到达后被自动删除break+file+行号用于在指定文件的对应行设置断点break+<0x…>用于在内存某一处暂停break+行号+if.+条件用于设置条件断点,在循环中使用非常方便infobreakpoints/watchpoints查看断点/观察点的情况clear+要清除断点的行号用于清除对应行的断点delete+要清除断点的编号用于清除断点和自动显示的表达式的命令disable+断点编号让所设断点暂时失效enable+断点编号与disable相反awatch+变量设置一个观察点,当变量被读出或写入时程序被暂停rwatch+变量设置一个观察点,当变量被读时,程序被暂停watch+变量同awatch4.2.4make工程管理器工程管理器用来管理较多的文件,make工程管理器就是一个自动编译管理器,在有上百个文件的代码构成的项目,若其中有一个或少数几个文件进行了修改,make工程管理器能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,不需要重复输入冗长的命令行,不需要将所有的文件重新编译一遍。用户只需要编写简单的编译语句即可,可以大大提高项目的工作效率【201。Makefile用来告诉make如何编译和连成一个程序,是make读入的配置文件,在一个Makefile中,通常包括:make工具创建的目标体,目标体通常是目标文件、可执行文件或者一个标签;目标体所依赖的文件;创建目标体时运行的命令。Makefile的基本格式为:Target:dependency__filescommand第22页例如:Hit:maill.Otarget1.O武汉科技大学硕士学位论文t鹕et2.Otarget3.Otarget4.Ogcc_omain.0t鹕etl.Ot鹕et2.Otarget3.Otarget4.0nlain.hgce—cmain.c—0main.0nlain.o:main.ctargetl.o:targetl.cta唱etl.hgce—ctargetl.c—0targetl.0ta玛et2.o:ta玛et2.ctarget2.hgce-ctarget2.c_otarget2.Otarget3.o:target3.ctarget3.htarget4.o:ta刚.cgcc—ctarget3.c—otarget3.Otarget4.hgce—ctarget4.c—0target4.Oclean:mHit:main.0target1.Ot鹕et2.0target3.Otarget4.O在这个makefile中,目标文件包含以下内容:执行文件Hit和中间目标文件“.o";依赖文件就是冒号后的.c文件和.h文件;gee…..就是创建标题时运行的命令,这些命令以TAB键作为开头。将以上内容保存在Mal【efile的文件中,在该目录下直接输入命令“make”就可以生成执行文件Hit;如果想删除执行文件和所有的中间目标文件,只需要输入“mal(eC1e觚"即可。这里要说明的是C1e觚不是一个文件,它只是一个动作名称,make不会自动去查看文件之间的依赖关系,也不会自动执行其后所定义的命令。4.3串口终端控制4.3.1设备文件简述Linu)【系统将设备分成了三种类型:字符设备、块设备、网络设备【2l】。在LinuX系统中,存在一个抽象化的设备目录,名为/dev,该目录下窜有指向系统中硬件的特殊文件。这些指向硬件设备的文件,极大地简化了程序员对硬件的操作,程序员可以像访问普通文件一样访问硬件,而无需使用特殊的接口函数。如图4.5所示,给出了位于/dev目录下字符设备和块设备的示例。可以看到,如果该设备是字符设备的,将以”c’'开头,如果是块设备,将以’飞”开头。4.3.2Lmux设备驱动工作流程在I,inll)【系统启动时,设备驱动将被加载,设备驱动成功后,将向系统反馈一个主设备号,驱动程序将根据该主设备号在/dev目录下创建对应的设备文件【221。如图4.6所示为Linu)【设备驱动的工作流程:武汉科技大学硕士学位论文第23页斋蠡印鸯越.圈图4.5/dev目录下的设备文件示例图4.6Linux设备驱动的工作流程示意图4.3.3终端设备及其控制终端设备的主要功能是发送用户输入的请求给主机,并显示主机完成运算后的结果。在Linux系统中,所有终端设备都被称为仕y。仕y被认为是Teletypes或者Tele.typerwdters的缩写。终端是一种字符型的设备,有多种类型231。查看/dev/El录下的以tt、,开头的设备名称,可以了解Linux系统中所有的终端设备。Linux系统中的终端设备文件主要有下面几种类型:·串行端口终端(/dev/ttySn):串行端口的终端是使用计算机的串行端口连接的终端设备,在Linux系统中,系统将每个串行接口看作是一个字符设备。串行端口对应的设备名称是/dev/ttyS0、/dev/ttySl、/dev/ttyS2、/dev/ttyS3,分别对应于硬件的COMl、COM2、COM3和COM4。●伪终端(/dev/pts/n):使用Telent登录到Linux系统实际上登录到了一个伪终端上面。·控制终端(/dev/tty):如果当前进程存在控制终端,/dev/ttyN就是当前进程的控制终端的设备文件。第24页武汉科技大学硕士学位论文·控制台终端(/dev/ttyn,/dev/console):在Linux系统中,常将显示器称为控制台终端,当从控制台登录到系统时,使用的是ttyl。Linux系统将ttyl-tty6称为虚拟终端。通过stty命令可以直接修改和查询终端的设置,stty命令比较简单,不需要带参数执行;通过reset命令可以将终端恢复到正常的状态,使用该命令的情况是:有时候需要修改终端的设置来运行程序,如果出现程序崩溃,终端有可能会出现一些异常情况,例如程序中包含特殊字符又使用cat或者more命令去显示一个二进制文件就有可能出现终端的混乱。在这些异常情况出现的情况下可以使用reset命令恢复终端的正常状态。对终端进行控制的函数:·获得当前终端的名称:linux系统提供ttyname函数用来判断打开的文件描述符是否为某个终端设备,如果是,返回终端设备的名称;如果该文件描述符非终端设备描述符,返回“ENOTTY’’错误信息;如果是非法文件描述符,返回“EBADY"错误信息。该函数具体信息见表4.3所示:表4.3ttyname函数头文件函数形式返回值成功返回终端设备名称<unistd.h>char·ttyname(intfd);失败null是否设置erro是·使用tegetattr函数和tcsetattr函数控制终端:linux提供tcgetattr函数和tcsetattr函数来获得和修改终端参数,tcgetattr函数用来获取终端的相关参数,tcsetattr函数用来设置终端参到241。两个函数的具体信息如表4.4所示:表4.4tcgetattr函数和tcsetattr函数头文件函数形式<termios.h><unistd.1l>inttcgetattr(intfd,structtennios幸termios...p);inttcsetattr(intfd,hatoptional_actions,conststructtermios·termios__p);返回值成功0失败.1是否设置erro是tcgetattr函数用于获得与终端相关的参数,参数fd为终端的文件描述符,返回的结果保存在结构体termios_p中,结构体termios_p有以下成员:tcflagtc_iflag;tcflag_tcoflag;tcflag_tc__cflag;tcflag_tc__lflag;cctccc[NCCS];该结构体中各成员的具体意义如下:c_iflag:输入模式标志,控制终端输入方式;e_oflag为输出模式标志,控制终端输出武汉科技大学硕士学位论文第25页方式;cg为控制模式标志,控制终端硬件控制信息;calfe.本为,能功辑编端终制.1flag控地模式标志;c翼[NCCS]为控制字符,用于保存终端驱动程序中的特殊字符。tcsetattr函数用于设置终端的相关参数,参数fd为需要设置的终端的设备描述符,参数optional性,不等数据传输完毕;TCSAD洲:等待数据传输完毕改变属性;TCSAFLUSH:等待actiom用于控制作用的时间,该参数可以取如下值:TCSANOW:立即改变属清空缓冲区后改变属性。tcgcta舒函数和tcsetattr函数设置e仃D:若fd为非法的文件描述符,输出错误信息EBADF;参数optionflactiom使用非法值或参数tennios中使用了非法值,输出错误信息EINVAL:若fd为非终端的文件描述符,输出错误信息ENCTTY。4.3.4串口通信的基本概念串口的传输是以串行的方式进行的,串口在数据通信中,一次只传输一个比特的数据,串行数据的传输速率是用bps或波特率来描述【2卯。Linux系统通过控制串口终端设备来实现对串口设备的控制。最基本的串口通信只需要3个引脚即可实现,分别为发送、接收和地线,其余引线用在握手协议上,串口通信为异步通信,故其余引线可以不用。为了正确的实现串口的通信,必须对串口的参数进行设置:·波特率:即每秒传输的比特数,对于发送端,115200波特率表示每秒发送115200bit:对于接收端,115200波特率表示在数据线上的采样率为115200HZ。·数据位:即通信中实际数据位的参数,在串口通信中,数据位可以选择5、6、7、8位,该数据位的设置主要根据实际情况,如果传输的是扩展ASCII码,其范围是肛255,必须使用8位,如果传输的是标准ASCII码,其范围是肚127,可以使用7位。·奇偶校验位:奇偶校验是通过统计数据中高位或低位的个数来实现校验的。◆停止位:停止位用于标记数据包的结束,但是停止位占用了数据空间,过多的停止位会导致传输速率的下降。●数据流控制:数据流控制通过控制发送数据的速率,控制由于出现数据缓冲区已满的情况。有软件流控制和硬件流控制【261。4.4软件设计系统软件主要模块包括初始化模块、数据发送模块、数据接收模块、数据处理模块。模块初始化模块负责系统初始化操作;数据发送和接受模块负责数据的正确收发;数据处理模块负责数据的相关处理工作。第26页4.4.1软件的工作流程武汉科技大学硕士学位论文蓝牙模块通过主机控制接口HCI和从设备建立通讯连接,该过程是建立蓝牙通信的关键。其过程如图4.7所示:匡圃压圃初始化查询查询初始化查询扫描查询响应寻呼寻呼响应寻呼扫描寻呼建立连接数据传输建立连接图4.7建立蓝牙通信的过程蓝牙主设备和从设备在完成各自的初始化后,蓝牙主设备处于查询状态,蓝牙从设备处于查询扫描状态,由主设备通过查询判断周围是否存在处于查询扫描状态的蓝牙从设备;蓝牙主设备处于寻呼状态,蓝牙从设备处于寻呼扫描状态,有主设备发出寻呼请求,从设备选择接受请求则连接建立,拒绝请求则连接失败。如果蓝牙主设备知道从设备的设备地址,则可省略查询的过程。4.4.2串口驱动设计1s3c2440微控制器在s3c2440微控制器中集成了异步串行口控制器(IyART),并具有以下特征:◆集成三个带DMA和中断的UART,支持IrDA(115.2Kbps);●支持5位、6位、7位、8位串行数据发送和接收;●可编程波特率;●发送/接收时支持双向握手;·每个通道有64KB的TxFIFO(先入先出发送缓冲寄存器)和64KB的RxFIFO(先入先出接收缓冲寄存器)。每个UART都包含一个波特率发生器、发送单元、接收单元和控制单元,其结构图如图所示4.8。与UART驱动程序相关的寄存器有:1’)线路控制寄存器ULCONn针对3个UART,分别有3个线路控制寄存器ULCON0、ULCONl、ULCON2,地址分别为0x50000000、0x50040000、0x50008000,初始值都为0x00。ULCONn寄存器的位定义见表4.5,位6决定是否使用红外模式(置1使用红外模式),位5至位3决定校验方式,位2决定每帧的停止位长度,位l和位0决定每帧的数据位数【271。武汉科技大学硕士学位论文/\第27页~啪发送缓冲黼器瞳J,T,【Dn发送移位寄存器I(-.-I控制单元……….再祷霸歪i卜上接收移位寄存器IJ,64KBRxDnFIFO发送缓冲寄存器、一弋7\/图4.8UART结构框图表4.5ULCONn寄存器的位定义ULCoNn位【7】【6】说明保留决定是否使用红外模式O=Normalmodeoperationl=InfraredTx/RxMode初始状态OOReservedInfraredMode摹000ParityMode【5:3】决定校验类型和传送期间的检测模式0xx=Noparity100=OddparitylOl=Parityforced/checked;11l=Parityforced/checkedas0NumberofstopBit【2】决定每帧的停止位位数0=Ollcestopbitperframe;1=Twostopbitperframe;O喀WordLength【1】指明每帧数据的位数00=5b;01=6b;lO=7b;ll=8b002)控制寄存器UCONn针对3个UART,分别有3个线路控制寄存器UCON0、UCONl、UCON2,地址分别为0x50000004、0x50004004、0x50008004,初始值都为0x0000。UCONn寄存器用于设定UART的各种模式,如高6位决定波特率发生器的时钟源和时钟频率;位9与位8决定TX和RX的中断触发类型。该寄存器各位的定义见表4.6所示。3)FIFO控制寄存器UFCONn针对3个UART,分别有3个FIFO控制寄存器UFCON0、UFCONl、UFCON2,地址分别为0x50000008、0x50004008、0x50008008,初始值都为0x00。该寄存器用于收发缓冲器的管理,包括缓冲的触发字节数设置、FIFO的清除与使能。4)FIFO控制寄存器UFCONn针对3给UART,同样有3个FIFO控制寄存器,该寄存器用于收发缓冲器管理,包括缓冲的触发字节数设置,FIFO的清除与使能。第28页武汉科技大学硕士学位论文表4.6UCONn寄存器的位定义UCONn位说明初始状态FCLKdividerClockSelectionTxInterruptType【15:12】【11:10】【9】决定波特率发生器的时钟源和时钟频率选择PCLK、UEXTCLK或者FCLK/n作为UART时钟0000O0选择中断请求类型o=脉冲:1=电平RxInterruptType[8】选择中断请求类型o=脉冲;1=电平ORxTimeOutEnable【7】是否使用接收超时中断0=-Disable;l=Enable0RxErrorSatusEnableLoopbackInterrupt【6】在接收出错时,是否触发中断0仿:NO:l_ⅦS【5】设置回环模式,用于测试用0=-Normaltransmit1=Loopbackmode0ModeSendBreakSignal【4】【3:2】【l:O】该位置1将发送一个中断信号,并在发送后自动清零选择发送模式选择接收模式O0000TransmitModeReceiveMode5)MODEM控制寄存器UMCONn与状态寄存器UMSTATn两个MODEM控制寄存器UMCONl、UMCON2和两个状态寄存器UMSTATl、UMSTAT2用于设置流控制方式和反映流控制状态。6)Tx/Rx状态寄存器UTRSTATn该寄存器反映当前读写状态。其低3位有效,分别反映发送移位寄存器、发送缓冲区、接收缓冲区准备状态等信息。71错误状态寄存器UERSTATn该寄存器反映UART当前的错误状态,其低4误、暂停态。当有错误发生时,产生终端请求。8)FIFO状态寄存器UFSTATn该寄存器反映FIFO缓冲区中的数据状态,通和接收缓冲区中的书籍的字节数是否已满。91发送寄存器UTXHn和接收寄存器URXHn发送寄存器和接收寄存器都只有一个字节8位当发生溢出错误时,接收寄存器中的数据也需要读出错误。lO)波特率因子寄存器UBRDWn该寄存器用于存储波特率,决定串口发送和接武汉科技大学硕士学位论文第29页UBRDWn=(int)(UARTclock/(baudrate)×16).1,其中,UARTclock为PCLK、FCLK/n或者UEXTCLK。2UART基本操作方法通过串进行通信,涉及的基本操作有串口初始化、发送数据和接收数据等,这些基本操作是通过访问串口的寄存器来进行的,在使用之前还必须对系统进行必要的初始化(如配置系统时钟1。串口初始化完成串口控制设置,如时钟选择、波特率设置、FIFO设置等,下面是简单的初始化函数、接收函数和发送函数,仅以此介绍串口的基本操作方法,为减少篇幅,以下是涉及UARTO串口操作的部分代码:/+寄存器的定义宰/#definerULCONO(*(volatileunsigned掌)0x50000000)#definerUCONO(*(volatileunsigned木)0x50000004)#definerUFON0(*(volatileunsigned木)0x50000008)#definerUMCONO(*(volatileunsigned幸)Ox5000000C)#definerUTRSTAT0(*(volatileunsigned幸)0x50000010)#definerUERSTATO(幸(volatileunsigned宰)0x50000014)#defineRUFSTAT0(*(volatileunsigned宰)Ox50000018)#definerUMSTATO(幸(volatileunsigned木)0x5000001C)#definerUBRDⅣO(*(volatileunsigned幸)0x50000028)#defineRUTHXO(*(volatileunsigned宰)ox50000020)#defineRURXH0(宰(volatileunsigned木)0x50000024)voiduart_init(intpclk,intbaud){inti;if(pclk—O)pclk--PCLK;户使用系统时钟幸/rUFCONO=-OxO;/*FIFO寄存器,设置停用FIFO功能木/rUMCOM0=0x0;/*UMCOM0控制寄存器,设置停用流控方式宰/rLCON0=0x3;/*LCON0线路控制寄存器设置,设置为:不使用红外,无校验,1个停止位,8个数据位木/rUCON0--0x245;产UCONO控制寄存器设置,设置表示使用PCLK时钟,Tx与I坟的中断触发分别为电平和脉冲木/rUBRDIVO=((int)(pelk/16*baud))一1);/木UBRDIVO波特率因子寄存器木/for(i=0;i<100;i++);)/宰延时作用奉/产发送数据函数,data为待发送数据,whichuart为选择UART端口奉/voiduart_sendbyte(intdata,intwhichuart){switch(whichuart){第30页case0:武汉科技大学硕士学位论文if(data一’\Il’){which(!(rUTRSTAT0&0x2));产当发送缓冲区不为空时,以确保有效发送水/Delay(10);rUTXHo=’\r’:)while(!(rUTRSTAT0&0x2));严当发送缓冲区不为空时,以确保有效发送木/Delay(10);rUTXH0=’kr’;break;case1:/宰接收数据函数,返回接收到的字符,whichuart为选择UART端口·/charuart_getkey(intwhichuart){switch(whichuart){caseO:if(rUTRSTAT0&0x1);产如果条件为真,说明接收数据已准备好幸/returnrURXH0;elsereturnO;case1:))3UART设备驱动UART设备驱动遵循tty设备驱动设计方法,即定义tty_ariver并实现其中的成员函数,但是在linux内核的serial—core.c文件中已经实现了uart设备通用的tty驱动层(称为核心串口核心层),这样UART驱动的主要任务演变成实现serial.core.c中定义的uartXXX接121。serial—core.c串口核心层可以当做tt)r设备驱动的实例。串口核心层为串口设备驱动提供了如下3个结构体:1)uartdriver:该结构体包含串口设备的驱动名、设备名、设备号等信息。它封装了trydriver,使得底层的UART驱动无需关心tt)I:driver。一个tty驱动必须注册和注销武汉科技大学硕士学位论文第31页ttydriver,而一个UART驱动演变成注册注销uartdriver。2)mu't:该结构体用于描述tropUART_端121、的I/O121或者小I/O内存地址、大FIFO端口类型等信息。串口核心层提供如下函数来添加和删除端121:uartaddoneportO和uart_remove_one_.port0;3)uart9ps:该结构体定义了对UART的一系列操作,包括发送、接收和线路设置等。Tty中的ttys对于串口比较抽象,noitarepo_,了体UART具较比中的就口uart串于ops对这非常类似于面向对象的基类和派生类的关系。派生类对特定的事物会更加具体。使用串口核心层这个通用tty驱动层的接口后,串口驱动所要完成的工作如下:·定义uartdriver、uartport、uartops结构体的实例,并实现初始化。●在模块初始化是调用uartregister“v盯()和.并uartaddone动port注册驱UART添加端口;在模块卸载时是调用uartiv嘶)和rd.uartretremovesigernoneu.port注销UART驱动并删除端口;·实现uartops中的成员函数【28】。4.4.3打开和关闭串口打开串口使用open函数,通过该函数可以获得该设备的操作指针,也就是设备描述符,通过设备描述符可以完成设备的读取或者修改等工作【291。其信息如下表4.7所示:表4.7open函数头文件<sys/types.h><sys/stat.h><fcntl.1l>函数形式intopen(constchar}pathname,intflag)hatopen(constchar·pathname,intflag,mode_tmode)返回值成功失败是否设置elTO返回新的文件描述符.1是open函数根据给定的文件名称,获得该设备的文件描述符,该描述符可用于read、write、lseek等函数中,open函数中的flag参数指定用何种方式打开文件,mode参数指定文件的读取权限。close函数用于关闭打开的文件或设备,在完成对文件或者设备的调用后,只有调用close函数才能释放文件或设备所占用的资源。其信息如下表4.8所示:表4.8close函数头文件<unistd.h>函数形式intclose(hatfd)返回值成功失败是否设置erroO.1是具体代码如下:∥打开串口设备intopen_port(char宰port){第32页intfd;武汉科技大学硕士学位论文if((fd=open(port,O_RDWRlO_NOCTTYO_NONBLOCK))=一1){perror(”Cannotopenthedesiredport”);renJrn一1;)returnfd;)∥关闭串口设备voidclose_port(intfd){close(fd);4.4.4Linux系统串口终端参数设置1)波特率的设置:对串口实现控制需要用至Utcrmio结构体,获得端口波特率是通过cfgetispeed函数和cf窑ctospeed函数实现的。cfgetispeed[函数用于获得结构体tcrrnios_pq口输入波特率信息,而c龟etospeed函数获得结构体termiosp中的输出信息;cfsetispeed函数和cfsetospeed函数用于设置端口的输入/输出波特率,函数会修改termiosp中的内容【301。表4.9为c龟etispeed函数和cfgetospeed函数的具体信息,表4.10为cf.setispeed函数和cfsetospeedi函数的具体信息:表4.9头文件函数形式speed_tspeed_tcfgetispeed函数和cfgetospeed函数<unistd.h><termios.h>cfgetispeed(constcfgetospeed(const成功structtermios·termios_p)termios·termios_p)失败.1struct返回值是否设置b既q'O是返回termios_p结构中的输入腧出端口波特率表4.10头文件函数形式cfsetispeed函数和cfsetospeed函数<unistd.h><termios.h>speed_tcfsetispeed(structtermios幸termios._p,speed_tspeed)speed_tcfsetospeed(structtermios·termios_p,speed_tspeed)返回值成功失败.1是否设置eTro是返回termios_p结构中的输入/输出端口波特率使用cfgetispeedi函数和cfgetospeed函数进行串口波特率设置的具体代码如下所示:#incude<stdio.h>瓶nclude<unistd.h>武汉科技大学硕士学位论文第33页#include<termios.h>structtermiosopt;/定义指向termio结构体/tcgetattr(fd,&opt);cfsetispeed(&opt,B115200);/指定输入波特率/cfsetispeed(&opt,B115200);/指定输出波特率///将修改后的termio数据设置到串口中Tcsetattr(fd,TCANOW,&opt);2)数据位的设置:修改数据位可以通过修改termios结构体I拘c._.cflag成员来实现,具体设置代码如下:/奉====—=====一设置数据位=======—===一事/new_opt.c_cflag&=--,CSIZE;switch(p_info一>data_bits){心case’5’:newopt.ccflagI=CS5;break;case’6’:new_opt.ecflagI.CS6;break;—-case’7’:new_opt.ccflagl=CS7;break;case’8’:new_opt.ecflagI_CS8;break;default:new_opt.c_cflagl=CS8;)3)奇偶校验位的设置:奇偶校验位可以使用奇校验、偶校验、不使用奇偶校验等方式。同样设置奇偶校验也是通过设置termios结构体【311。设置方法见表4.11所示:产======一设置奇偶效验位下面给出了设置奇偶校验位的具体代码:switch(p_info一>parity){case…0:第34页∥不使用奇偶效验newopt.c_cflag&=~PARENB;break;case’1’:武汉科技大学硕士学位论文∥使用偶效验new_opt.c_cflagI=PARENB;new_opt.c__cflag&=,-,PARODD;break;ca¥e川2://使用奇效验new_opt.e_eflag|_PARENB;new_opt.e_cflagbreak;I=PARODD;表4.1l设置奇偶校验位设置无校验奇校验偶校验空格具体代码opt.o_cflag&=&=--PARENB;opt.o_cflagI=(PARENBIPARODD);opt.o__cflag&=~PAREN;opt.o_cflag&-一-PARODD;opt.o_cflag&=--PARENB;opt.o_cflag&=--CSTOPB;4)数据流控制:设置数据流控制就是设置数据传输的开始和结束的标志位,可以使用硬件、软件或者不使用数据流控制。设置方法见表4.12所示。下面给出了设置数据流控制的具体代码:/幸=====—一设置数据流控制一事/switch(p_info一>flow_etrl){c,ase’0’:∥不使用流控制new_opt.c.__cflag&=-,,CRTSCTS;break;case’l’:∥使用硬件进行流控制new_opt.ecflagJ_CRTSCTS;break;case’2’:new_opt.c_cflag|_IXONlIXOFFIIXANY;数据发送和接收模块将需要发送的数据以文件的形式发送和接收。1)数据发送主要使用write函数对串口设备文件进行写操作,write函数的具体信息如表4.13所示:表4.13write函数头文件<unistd.h>函数形式void幸buf,sizet4Ssize__twrite(intfd,constcounO;返回值成功失败是否设置elTO返回写入的字符数.1是在该函数中,根据给出的设备文件描述符,将指针buf所指向的内容写到fd所指的设备文件描述符【321。实现的具体代码如下:intsend_data(intfd,char木data,intdatalen){intl饥;len=O;len--wnte(fd,data,data_len);if(1en—data_len)returnlen;else{∥如果出现溢出的情况tcflush(fd,TCOFLUSH);retum一1;))2)数据接收主要函数为read函数,read函数的具体信息如下表4.14所示。在该函数中,将指定的文件描述符中的内容放在指定的buf中。实现的具体代码如下:intrecv_data(intfd,char木data,intdata_len){第36页intlen,fssel;fd——setfsread;struct武汉科技大学硕士学位论文timevaltime;FD_ZERO(&fsread);FD_SET(fd,&fs_read);time.tv_sec=1O;time.tvusec=O;//使用select实现串口的多路通信fs._sel--select(fd+l,&fsread,NULL,NULL,&time);if(fs_sel){len--read(fd,data,data_len);returnlen;}elsereturn-1:表4.14read函数头文件函数形式返回值成功返回读取的字符数,0表示读<unistd.h>ssizetwrite(intfd,void*buf,sizetcounO;失败-1是否设置erro是取到了文件结束位置。其中select函数实现对多个文件描述符的监视:提供一个多路复用的功能。其具体信息如表4.15所示:表4.15头文件函数形式返回值intselect函数<sys/select.11>select(hatnfds,fd_set枣readfds,fd_set幸writefds,fd_set·exceptfds,structtimeout)成功>0失败-1是否设置erro是参数为要监视的文件描述符加l,故select函数的第一个参数为fd+l;参数readfds,writefds,exceptfds为文件描述符的集合,要将某个文件描述符通过函数FD—SET函数加入到文件描述符集合才能使用select函数进行多路通信【331。需要注意的问题是在写文件时要处理溢出问题,用tcflush()i函数处理溢出问题;在发送和接收数据时对文件进行分块发送,保证数据发送和接收的正确性。武汉科技大学硕士学位论文第37页4.5界面控件设计4.5.1QT/Emebedded应用程序开发流程嵌入式QT是一个专门为嵌入式系统提供图形用户界面的应用框架和串口系绀34l。QT已经成为linux窗口平台上进行界面开发的首选,QT具备以下优点:●QT支持多种操作系统,具有良好的跨平台性;●QT的良好封装机制使得QT的模块化程度非常高,具有面向对象的特性,可重用性好:·QT开创性的提供信号/槽的机制,该机制安全性较好,各个元件之间的协同工作变得十分简单;◆丰富的APT函数,方便用户开发;·拥有较好的开发文档和技术支持;QT中信号/槽是QT与其他工具最不相同的中心特征之一,在图像界面编写过程常常需要将一个窗口的变化传递给另一个窗口,即一个类的对象应该可以和其他对象进行通信,QT就是通过信号/槽来实现对象间的通信的。QT的窗口有很多预定义的信号和槽,当一个特定的事件发生时,用户通过继承加入自己的信号或者槽,来处理事件的发生【35】。QT嵌入式应用程序的开发和嵌入式交叉开发一样,应用程序首先在PC上运行进行,最后根据特定的硬件与操作系统,进行交叉编译后,下载到目标板上运行。开发QT应用程序的开发流程如下图4.9所示:完备嵌入式在主机上安装QT,Embedded交叉编译目标平台的目标系统开发工具&类库Q1讵mbcddcd类库盖嚣瓣蓄器H燃H黼H薹蓉H霁曩冀案Q1任mbcddcd应用程序I’l行交叉编译l7l板上调试I’l运行I’l开发结束图4.9开发QT/Embedded应用程序的流程4.5.2蓝牙通信中界面控件设计在嵌入式GUI的设计中,需要设计蓝牙通信时界面控件,该控件设计的主要思路是点击控件,执行发送数据或者接收蓝牙传输数据的程序,该设计机制主要是基于QT嵌入式应用程序中的信号/槽机制和运用QT中的库函数设计该控件。在设计中应用一个重要库函数execv,该库函数的主要功能为装入并运行其它程序的函数,表4.16为该函数的信息。列出发送数据控件核心代码:voidnc_blue__execve(char幸path){char木argv[]={path,(char奉)O);intret;ret=execv(path,argv);第38页武汉科技大学硕士学位论文)intmain(intargo,char木硼gv[]){QApplicationapp(arge,argv);QPushButton*buRon=newQPushButton(”send”);QObject::connect(buRon,SIGNAL(clicked()),&app,SLOT(nc_blue_exeeve(”/home/yangfei/yangfeifile/exc/sendshell”)));buRon->showO;returrlapp.exec0;)表4.16execv函数头文件<unistd.h>函数形式intexecv(char宰pathname,char宰a四[】);返回值成功失败是否设置锄1.1是在该设计中,app是这个程序的QApplication,它被创建并运行命令行变量。QpushButton为按钮控件,使用该类创建控件send,connect函数运用信号/槽的机制,当点击该控件时,即有clicked信号响应时,执行exe汜v函数,该函数运行发送数据的命令,数据就能被传输。需要说明的是ncblueexecve()qb的参数为发送数据命令所在的shell文档的目录名称。同理,接收数据的空间同发送数据的空间也大致相同。图4.10为该界面的截图:设计完成界面后,使用qmake工具根据pro文件生成Makefile文件,运行make,生成可执行文件,将可执行文件交叉编译生成目标系统执行程序。图4.10为该界面截图武汉科技大学硕士学位论文第五章系统调试第39页基于ARM的蓝牙无线通信模块的调试分为两个阶段:第一阶段为:在课题研究初期,使用蓝牙模块和蓝牙适配器进行配对调试,总结出蓝牙模块和适配器工作的基本流程和配置方式;第二阶段为:在基于ARM的带蓝牙模块的嵌入式系统上设计并调试蓝牙通信程序和界面控件设计,将基于ARM的带蓝牙功能的嵌入式系统和蓝牙适配器进行联合测试。5.1蓝牙模块和蓝牙适配器通信调试在课题研究初期,使用蓝牙模块和蓝牙适配器进行配对调试,总结出蓝牙模块和适器工作的基本流程和配置方式。蓝牙适配器是使带USB接口的数码产品能适用蓝牙设备的接口转换器,本设计中所用的蓝牙适配器为世纪飞扬C.WF02W蓝牙适配器,该适配器通信距离可达20---100米,同时可以支持多达7个蓝牙设备;采用最新蓝牙V2.0规范,同时向下兼容蓝牙V1.1、V1.2规范。将USB蓝牙适配器接在电脑的USB端,即可实现和连接ARM串口的蓝牙模块的通信【36】。硬件框图连接见图3.1所示,这里不再重复讲述。蓝牙适配器能使PC机有USB接口的数码产品带蓝牙功能,在数码产品中使用非常广泛,通信稳定,在调试初期,使用蓝牙适配器调试蓝牙模块是一个比较科学的研究方案。使用蓝牙适配器调试蓝牙模块的系统框图如图5.1所示:d蓝牙模块l留星1…”串无线通信PC机-蓝牙适配器kIUSB,留图5.1调试蓝牙模块系统框图调试方法是将蓝牙模块接在PC机的串口l,将蓝牙适配器接在PC机的USB接口使用PC机上的串口调试助手软件,通过RS232串口向蓝牙模块发送命令,调试模块的初始化、控制、配对和连接等操作。根据蓝牙适配器的配置,如果蓝牙模块配置从模式,调试时可以用蓝牙适配器搜索蓝牙模块;如果蓝牙模式配置为主模式,调试时用蓝牙模块搜索蓝牙适配器;本设计中蓝牙模块的配置为从模式。下面以蓝牙适配器搜索蓝牙模块为例说明蓝牙适配器和蓝牙模块配对的操作过程:1)将模块UART接入PC机RS232接口1,与PC机连接;2)借助PC上的串口调试助手,利用模块的配置命令完成对蓝牙模块的配置,本设计中所用的蓝牙模块设为从端蓝牙模块,查找、配对和连接绑定的从端设备,设置蓝牙模块为从模式:AT+role=0帅in-12345678;/设置蓝牙模块为从模块//设置配对PIN码/第40页武汉科技大学硕士学位论文AT+devicename=Bt—device—O1;/设置设备名称/AT+msgenable=O;/关闭串口提示信息/AT+uartbaurate=l15200;/设置波特率/图5.2所示为用串口调试助手配置蓝牙模块的截图:3)打界面上跳接。武汉科技大学硕士学位论文第4l页图5.4通信连接成功截图4)在界面连接中出现蓝牙模块的Btdevice01的已连接蓝牙设备,蓝牙模块和蓝牙适配器配对成功,配对成功后,即可以以文件的形式实现通信。蓝牙适配器和蓝牙模块的通信时通过虚拟串口SPP完成的,USB蓝牙适配器将接收到的数据传送给PC机,将PC机发送出去的数据传给蓝牙模块,该虚拟串口的传送原理和串口相同。GC.02的发射功率为2级,最大通信距离为lO米,蓝牙模块和适配器的通信实践证明,蓝牙模块工作良好,稳定的通信距离约为8米。5.2嵌入式系统和蓝牙适配器通信调试第一阶段已经完成蓝牙模块和蓝牙适配器配对调试,总结出蓝牙模块和适配器工作的基本流程和配置方式,第二阶段的调试任务为在基于ARM的带蓝牙模块的嵌入式系统上设计并调试蓝牙通信程序和界面控件设计,将基于ARM的带蓝牙功能的嵌入式系统和蓝牙适配器进行联合测试。基于ARM的带蓝牙功能的嵌入式系统和蓝牙适配器通信系统框图如图5.5所示:PC机ARM嵌入无线通信USB式系统d蚜模块l-蓝牙适配器留图5.5嵌入式系统和蓝牙适配器通信的系统框图该系统的通信的调试过程如下:1)将蓝牙模块接在ARM嵌入式系统的串口;2)利用模块的配置命令完成对蓝牙模块的配置,本设计中所用的蓝牙模块设为从端蓝牙模块,查找、配对和连接绑定的从端设备,设置蓝牙模块为从模式:器,可实现预期的无线通信。测试结果如下:l蓝牙无线传输的通信距离一般在10米内,笔者在实验室对仪器进行测试,结果表明在室内无障碍物的情况下,通信距离可达到8~10米,有阻挡物的情况下,通信距离可达到∞8米。2经多次测试最高速率可达到115200bps,长期测试数据传输正常。武汉科技大学硕士学位论文第43页第六章结论6.1研究总结本课题将蓝牙技术结合嵌入式ARM技术应用于工业数据通信中,开发一套基于ARM的蓝牙无线数据通信模块。该系统包括基于ARM的带蓝牙模块的嵌入式系统、蓝牙通信链路和蓝牙适配器三部分。mini2440的硬件平台体积小巧、功能强大;运行的Linux操作系统人机界面友好、操作方便;开发的蓝牙通信应用软件工作正常,通过基于ARM的带蓝牙模块的嵌入式系统和蓝牙适配器,可实现预期的无线通信。测试结果如下:1蓝牙无线传输的通信距离一般在10米内,笔者在实验室对仪器进行测试,结果表明在室内无障碍物的情况下,通信距离可达到8~10米,有阻挡物的情况下,通信距离可达到乱8米。2经多次测试最高速率可达到115200bps,长期测试数据传输正常。本课题的主要研究内容如下所示:1)比较常用数据通信方案,特别是工业数据无线通信,得出的结论为蓝牙技术拥有众多技术优势:抗干扰能力强,组网灵活,传输速率高,功耗小【37】;2)比较ARM和单片机嵌入式系统的特点,得出结论为基于ARM的嵌入式系统拥有众多优势:既有单片机嵌入式的系统的低功耗和小巧体积,又兼具PC的强大功能。在工业应用中有很好的发展前景;3)系统学习蓝牙技术标准,掌握实现蓝牙无线通信所需的基础知识。包括蓝牙协议体系,蓝牙工作方式等;4)学习基于ARM的嵌入式系统的相关基础知识,如ARM嵌入式系统的基本硬件资源,了解与该模块相关的LCD、USB和串口,了解嵌入式软件编程的基本流程,了解交叉编译,makefie文件的编写规则;5)研究本设计中所用的蓝牙模块,掌握配置该模块的方法,使用具有蓝牙功能的蓝牙适配器调试蓝牙模块的初始化、配对、实现通信过程。归纳出课题所需要的蓝牙模块的配置和控制方法;6)学习Linux操作系统的相关知识,在平台上移植Linux操作系统;7)在嵌入式linux操作系统上完成蓝牙通信应用程序,调试并测试;8)在QT上完成蓝牙通信界面控件的设计,调试并测试;9)数据中心和带蓝牙模块的嵌入式系统的联机调试,实现系统命令和数据的无线传输,经过反复试验,硬件和软件均能可靠工作。6.2改进方向经过研究、设计和测试,本课题实现了基于ARM的蓝牙无线通信模块的设计。包括基于ARM的带蓝牙模块的嵌入式系统、蓝牙通信链路和蓝牙适配器三部分。通过第一阶第44页武汉科技大学硕士学位论文段的调试和测试,即使蓝牙模块和蓝牙适配器进行配对,归纳了蓝牙模块的控制流程和工作特点。为实现基于ARM的带蓝牙模块的嵌入式系统和蓝牙适配器的通信奠定了基础;通过第二阶段的设计和调试,即在嵌入式系统上设计蓝牙通信的应用程序和界面设计,进行系统联调,实现了基于ARM的蓝牙无线通信,系统稳定,软硬件工作正常,完成了课题的预期目标。作为一个研究性的课题,本课题仍有一些待改进的地方:1)建立蓝牙通信网络。蓝牙牙技术可以将多个蓝牙节点组成微微网,在微微网中,其中一个蓝牙节点作为主站,主站最多可控制7个蓝牙从站,多个微微网可以组成一个散射网。组网技术是蓝牙技术的优势之一,可以设计多个带蓝牙功能的嵌入式系统和多个带蓝牙适配器的数据处理中心【3引。由于本系统目前处在系统开发阶段,只在实验室进行调试,实际的蓝牙组网中涉及多个网络节点,传输的方式可能不尽相同,因此可以进一步研究蓝牙组网技术,在蓝牙通信应用程序中设计对蓝牙节点的识别和处理,设计更加智能便捷的通信网络。2)蓝牙传输距离有限,受所采用的蓝牙模块的发射功率的限制,目前可实现10米左右的通信,一定程度上限制了系统的应用。为了实现更远距离的通信,可以使用发射功率为1级的蓝牙芯片,以增加传输距离。武汉科技大学硕士学位论文第45页参考文献[1]王广西,赖万昌,葛良全.基于无线通信技术的便携式伽玛能谱仪的研制[J】.核电子学与探测技术,2009,29(5):950---953.【2】HuangAlbert,RudolphLarry.BluetoothEssentialsforProgramers[M].Cambridge:CambridgeUniversityPress,2007.[3】魏晓艳,李军.红外通讯与蓝牙技术比较[J】.电子元器件,2007,9(4):68--69.【4】邢传玺,栾晓明.基于蓝牙的嵌入式通信模块的实ITS[J].应用科技,2009,36(9):43—47.[5】钱志鸿,杨帆.蓝牙技术原理、开发与应用[M】.北京:北京航空航天大学出版社,2006.【6]SamsungElectronnicsCoLtd.¥3C2440A32bitCMOSMicrocontrollerUser’SManual,2004.[7]BluetoothSIGBluetoothSpecificationVersion2.I+EDR[S],2007.[8】金纯,林金朝,万宝红.蓝牙协议及其源代码分析[M】.北京:国防工业出版社,2006.【9]BluetoothSpecifications,http//www.bluetooth.tom.【10】S3C2440AMierolrroeessorUSER’SMANUAL.SAMSUNt32002.[1l】金纯.蓝牙技术【M】.北京:电子工业出版社,2001.【12]赖于树.ARM微处理器与应用开发[M】.北京:电子工业出版社,2007.[13]DavidrajuhReggie.Exploringtheuseofbluetoothinbuildingwirelessinformationsys—tems[J].InternationalJOUlTlalofMobileCommunications,2007,5(1):卜lO.【14]杜华.LINUX编程技术详解[M】.北京:人民邮电出版社,2007.【15]HuangAlbert.Theuseofbluetoothinlinuxandlocationawarecomputing[D].DepartmentofElectricalEngineeringandComputerScienceofMassachusettsInstituteofTechnology,2005.[16】华清远见嵌入式培训中心.嵌入式LINUXC应用程序设计[M】.北京:人民邮电出版社,2007.[17]T.Kajima,Y.Kawamura.Developmentofahigh—speedsolenoidvalve:investigationofSO-lenoids[C].IndustrialElectronics.IEEETransactionsVolume42(1).1-8.【18】盛佳乐.基于ARM的蓝牙数据通信系统.北京交通大学硕士学位论文,2008.【19】卢军.Linux内核分析与操作系统设计[M].清华大学出版社,2004.10.[20】Z.Li,Y.ChangandL.Jin.ANovelFamilyofFrequencyHoppingSequencesforMultihopBluetoothNetworks.IEEETransactionsOllConsumerElectronics,V01.49,No.4,NO-VEMBER2003.【2l】曾剑.基于ARM和蓝牙的安防系统的设计与实现.湖南大学硕士学位论文,2007.【221RIJ品,杨润生.蓝牙技术与UWB技术融合在装备检测中应用[J】.四川兵工学报,2009,第46页30(5):69---71.武汉科技大学硕士学位论文【23]葛亮.嵌入式Linux蓝牙无线终端的研究与实现.北京邮电大学硕士学位论文,2009.【24]欧阳鑫,于红岩,吕杨.蓝牙协议栈BlueZ的移植与开发[J】.微计算机信息,2007,23(2):221~222.【25】R.K.Morrow.PacketthroughputinslottedAlohaDS/SSMAradiosystemswithrandomsignaturesequences,IEEETrans.Commun,v01.40,PP.1223-1230,July1992.【26]郑莉,董渊.C++语言程序设计[M】.清华大学出版社.2001.92.102.[27]Viktorszente,Jdnosvad.Computationalandexperimentalinvestigationonsolenoidvalvedynamics.IEEEpaper,2001,0·7803-6736-7/01.618-623.【28】ARMDeveloperSuiteVersionl.2.AdvancedRISCMachinesLtd.2000.【29]曾佥1J.基于ARM和蓝牙的安防系统的设计和实现.湖南大学硕士学位论文,2009.【30】Samsungelectronics.¥3C2410A32-bitRISCmicroprocessorusermaual[Z].2004.1-599.【31]孙天泽,袁文菊,张海峰编著.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M】.北京:电子工业出版社,2005.6.【32】【美]Andrew.N.sloss,【美]DominicSymes,[英]ChrisWright著,沈建华译.【33】吕俊龙.基于ARM的无线生理信号检测装置的研究.江苏大学硕士学位论文,2010.【34]K.S.Yuan.Theembeddedbluetooth2001.CCDcamera[J].electricalandelectronicteenology,[35]陈莉君.深入分析liunx内核源代码[M】.北京:人民邮电出版社,2002.【36]马忠梅,李善平,康慨,叶楠.ARM&Linux嵌入式系统教程[M】.北京航空航天大学出版社.2005.【37]喻宗泉.蓝牙技术基础[M】.北京:机械工业出版社,2006.[38]庄奕琪.蓝牙一梦想与实现[M】.北京:机械工业出版社,2002.《基于ARM的蓝牙通信模块的设计与实现》发表于《通信技术》2011年第3期。第48页武汉科技大学硕士学位论文致谢首先,我要深深地感谢我的导师周风星教授,在两年多研究生学习期间,周老师从各方面都给予我极大的关怀和悉心的教导。周老师严谨求实的治学态度、渊博的专业知识使我在研究工作中受益匪浅。在此论文完成之际,谨向周老师致以诚挚的敬意和衷心的感谢!本论文的研究过程中得到了周围同学的大力支持和耐心指导。谢谢冯知凡、刘芳华、曲本香、王雪、刘凡、周畅等,谢谢他们长期以来对我学习和生活上的支持和帮助,在此表示衷心的感谢和敬意!最后,我要深深感谢父母多年来对我的养育之恩,感谢他们的支持,鼓励和关怀,使我能毫无后顾之忧全身心的投入到学业中,他们给予我的爱,是我终生难以回报的。感谢所有支持和关心我的各位朋友。感谢在百忙之中抽出宝贵时间评审我的论文的各位专家老师和学者。谢谢!杨菲2011年5月基于ARM的蓝牙无线通信模块的设计与实现
作者:
学位授予单位:
杨菲
武汉科技大学
本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1944100.aspx