版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能超重报警系统的设计与实现第第页上海第二工业大学课程名称:电子技术综合实践学生姓名:时兆东、陈曦、张博超、孟晋辉学号:20114820423201148206332013342061120114820628学院名称:工学部专业班级:11电信A1智能超重报警系统的设计与实现摘要超重智能报警系统的设计是根据,当前社会生活中,由于超重频发的交通事故,而现行的监测系统,无法较有效的对所有车辆进行监测,保证其安全行驶。超重智能报警系统的设计亮点在于它的简便与使用。我们现在的新产品的研发与创造,无不是根据社会、市场的需求,而新产品的发展,则是趋于简便和功能强大。超重智能报警系统,就具备了这样的特点。智能超重报警系统是基于STM32嵌入式系统设计而成,首先通过称重模块将车辆的质量数据传送到STM32芯片上,然后由芯片处理,将数据通过蓝牙模块发送到检测员手机或其他数据记录设备上。并且,STM32芯片会对车辆质量数据作出判断,判定其是否超重,若有超重情况,立即通过GSM模块,拨打相应监测员的报警电话,提示检测员采取行动。智能超重报警系统,实现了机械的智能话,能够不再靠人工去观测,去判定超重,大大减少了人力资源的浪费。这样,就能够在超重控制与后期的处理阶段投入更多的精力。该系统中的拨打电话式的报警系统实属一个创新,以往的系统中,都是通过布尔变量(亮红灯或蜂鸣)的方式提示监测人员。这样的设计往往不具有防呆功能,对于超重与否的判定,完全靠检测员的人力全判定,既浪费时间也容易发生疏漏。这也是超重交通事故频发的一个重要原因。所以,该智能超重报警系统将会在很大程度上减少此类事故的发生。关键词:超重监测STM32称重GSM蓝牙SummaryOverweightintelligentalarmsystemdesignisbasedonthecurrentsociallife,accidentsarefrequentbecauseofoverweight,andtheexistingmonitoringsystemcannotmonitorvehicleseffectivelyandensuretheirsafedriving.Overweightintelligentalarmsystemdesignhighlightsthatit'seasytouse.Wearenowdevelopingandcreatingnewproducts,it’sallinaccordancewiththeneedsofthecommunityandmarket.Andthedevelopmentofnewproducts,ittendtosimpleandpowerful.Overweightintelligentalarmsystemhavethesefeatures.OverweightintelligentalarmsystemisdesignedbasedonSTM32embeddedsystem.Atfirst,dataqualityofvehiclesdatatransmitstotheSTM32chipbyweighingmodule,andthenprocessedbythechip,thedataissenttotheinspector’sphoneorotherdatarecordingdevicesviaBluetoothmodule.Inaddition,STM32chiptojudgethequalitydataofthevehiclewouldbetodeterminewhetheroverweight,ifit’soverweightthenitwillcalltheappropriatephonealarmmonitorsthroughtheGSMmoduleimmediatelyandpromptedinspectorstotakeaction.Overweightintelligentalarmsystemachievesmartmechanical’swork,andnolongerrelyonmanualtoobservation,todetermineoverweight,itgreatlyreducingthewasteofhumanresources.Thus,itispossibletoputmoreeffortincontrolandtreatmentinoverweightatlatestage.Thesystemcallitisatypeofalarmsysteminnovation,theprevioussystem,monitoringpersonnelarepromptedbyaBooleanvariable(redlightorbuzzer).Thisdesignoftendonothaveafoolprooffunction,fordeterminingoverweightornot,entirelybyhumaninspectorsfulljudgment,notonlyawasteoftimebutalsopronetoomissions.Thisisalsoanimportantreasonforoverweightaccident-prone.Therefore,theintelligentalarmsystemwillgreatlyreducetheincidenceofoverweightsuchthat.Keywords:OverweightmonitoringSTM32weighingGSMBluetoothTOC\o"1-3"\u摘要 2Summary 31.绪论 51.1课题背景 51.2设计目的和意义 61.3系统设计的主要内容 61.3.1硬件设计 61.3.2软件设计 62.系统方案的设计 72.1智能超重报警系统的设计要求 72.2设计的基本思路 73.硬件系统结构 83.1基于Cortex-M3内核的STM32F103VC芯片 83.1.1Cortex-M3 83.1.2STM32 183.2称重模块 213.2.1主要连接说明 213.2.2称重原理 213.3蓝牙模块 223.4GSM模块 234.程序设计 254.1称重部分主要程序 254.2GSM部分主要程序 304.3蓝牙部分 335.结束语 365.1控制端显示效果 365.2数据端显示效果 37附录:硬件原理图 38参考文献 41绪论嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控[[]工控机和嵌入式的对比Genedu2014-01-29.[]工控机和嵌入式的对比Genedu2014-01-29.[2]嵌入式系统eeworld网2012-09-21[3]64GBiNAND嵌入式闪存驱动器的问世icmade网2012-09-21[4]蓝牙技术IT1682014-02-3[5]凤凰新闻网新闻专题山东“12·11”特大交通事故8亡货车超重2.5倍[6]四川在线新闻专题省公安厅:“12·8”成自泸高速事故肇事车辆至少超重110%从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。超重检测需要应变片式压力传感器。从广义上讲,传感器就是能感受外界信息并能按一定规律将这些信息转换成可用信号的装置。狭义上讲,传感器就是能将外界信息转换成电信号的装置。随着新技术和自动化的发展,传感器的使用数量越来越大,一切现代化仪器、设备几乎都离不开传感器。在工业生产中,尤其是自动化生产过程中,用各种传感器来检测和控制生产过程中的各个参数,如温度、压力、流量、PH值等,以便使设备工作在最佳状态,产品达到最好的质量。本次设计中所利用到的压力传感器就是要测量行驶车辆车轮向压力传感器施压导致电压变化的动态信号,并且利用数模转换芯片将电压值转换为数字值,实现整个系统车辆超重的检测,实现智能控制。对于称重后的处理部分,我们应用的是蓝牙模块与GSM模块。蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效。[]GSM即全球移动通信系统GlobalSystemforMobileCommunication就是众所周知的通讯模块。这些模块能够实现将称重的数据做记录与处理。对于整个系统而言不仅具有采集控制方便、简单、灵活等优点,而且可以大幅度提高采集点的技术指标,从而大大提高系统的可利用性。1.1课题背景2014年12月11日204国道胶州市营海段发生的一起特大交通事故情况,事故直接造成8人死亡。从事故初步的调查情况看,肇事货车核载15.74吨,实载55.91吨,超重2.5倍,属严重的违法行为。2013年12月8日15时50分,四川省成自泸高速公路上发生一起重大交通事故,共造成16车相撞,7人死亡,23人受伤。肇事车车辆准载28.68吨,肇事时实际载货60余吨。此类由于超重造成的交通事故比比皆是,虽然各省、市、自治区乃至中央都十分重视此类交通事故,也下发了许多硬性文件,但是为什么此类现象屡禁不止。这是由于对与超重所带来的附加利润,一些不法商贩与司机大多怀有侥幸心理,为了利益铤而走险,才酿成大祸。反过来说,我们是不是应该反思我们现行的监督监测系统,不够完善,不够简便,一些检测员贪图简单,不愿操作繁琐的监测系统,而对一些超重车辆睁一只眼闭一只眼。智能超重监测系统,正是在这样的环境下,应运而生。1.2设计目的和意义设计出一种智能超重报警系统,自动检测超重车辆,显示称重数据、并将数据通过蓝牙发送到相应设备上,若有超重情况,该系统还会自动拨打检测员电话,督促其采取行动。目前的超重检测系统多用于高速公路入口匝道出,通过手费管理人员实行半自动检测,这种检测系统不仅降低了工作人员的工作效率,而且影响了进入高速公路的交通量。智能超重报警系统无需专业人员操作,只要放在合适位置,通电即可,方便简捷;同时本系统采用高运算、大寻址范围的STM32芯片,有利于今后对该系统进一步完善。1.3系统设计的主要内容1.3.1硬件设计智能超重报警系统的硬件主要有四大部分,即压力信号的采集部分、主控部分和数据记录及蓝牙发送、通话警告部分。压力信号采集主要由压力传感器组成,它是整个系统中最关键的元件。主控部分由STM32芯片组成。数据记录部分由称重模块中的模数转换模块和蓝牙模块组成,通话报警系统是由STM芯片和GSM模块组成。硬件的设计需要嵌入式、模电及其数电的相关知识。在解决这一问题的过程中,需要查阅大量资料,结合所学知识。1.3.2软件设计它的软件设计主要包括主程序和中断处理两大部分:主程序要完成I/O口,定时器的初始化及对中断输入的设定,然后延时使传感器进入稳定工作状态,等待定时器的中断;中断处理程序根据具体情况需要有相应的子程序。要对程序进行多次调试,分块编程。对各个子程序块所解决的问题要相当明确。最后在制作完成硬件电路板后要调试出设计要求的功能。2.系统方案的设计2.1智能超重报警系统的设计要求当高速公路行驶的车辆进入测重检测区内,车轮向压力传感器施压时,压力传感器传出微弱的电压信号,通过差分运放以及单片机的判断等运算,对违章超重车辆进行自动称重、记录称重数据,并对超重车辆进行处理。2.2设计的基本思路图2-13.硬件系统结构3.1基于Cortex-M3内核的STM32F103VC芯片3.1.1Cortex-M33.1.1.1简介Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。另外在CM3中,Both小端模式和大端模式都是支持的。CM3内部还附赠了好多调试组件,用于在硬件水平上支持调试操作,如指令断点,数据观察点等。另外,为支持更高级的调试,还有其它可选组件,包括指令跟踪和多种类型的调试接口。图3.1.1-13.1.1.2CM3的招牌功夫性能强劲。在相同的主频下能做处理更多的任务,全力支持劲爆的程序设计。功耗低。延长了电池的寿命——这简直就是便携式设备的命门(如无线网络应用)。实时性好。采用了很前卫甚至革命性的设计理念,使它能极速地响应中断,而且响应中断所需的周期数是确定的。代码密度得到很大改善。一方面力挺大型应用程序,另一方面为低成本设计而省吃俭用。使用更方便。现在从8位/16位处理器转到32位处理器之风刮得越来越猛,更简单的编程模型和更透彻的调试系统,为与时俱进的人们大大减负。低成本的整体解决方案。让32位系统比和8位/16位的还便宜,低端的Cortex-M3单片机甚至还卖不到1美元。遍地开花的优秀开发工具。免费的,便宜的,全能的,要什么有什么。基于Cortex-M3内核的处理器已渐成气候,以处处满溢的先进特性力压群芳。而且架构师们还在不停地求索降低成本的出路,同时很多组织也在尝试着实现“器件聚合”(deviceaggregation)3.1.1.3Cortex-M3处理器的舞台高性能+高代码密度+小硅片面积,3璧合一,使得CM3大面积地成为理想的处理平台:低成本单片机:CM3与生俱来就适合做单片机,甚至简单到用于做玩具和小电器的单片机,都能使用CM3作为内核。这里本是8位机和16位机统治最牢固的腹地,但是CM3更便宜,更高性能,更易使用,所以值得开发者们转到这个新生的ARM32位系统中来,哪怕花点时间重新学习。汽车电子:CM3也是汽车电子的好俅。CM3同时拥有非常高的性能和极低的中断延迟,打入实时领域的大门。CM3处理器能支持多达240个外部中断,内建了嵌套向量中断控制器,还可以选择配上一个存储器保护单元(MPU)。所有这些,使它用于高集成度低成本的汽车应用最合适不过了。数据通信:CM3的低成本+高效率,再加上Thumb-2的强大位操作指令s,使CM3非常理想地适合于很多数据通信应用,尤其是无线数传和Ad-Hoc网络,如ZigBee和蓝牙等。工业控制:在工控场合,关键的要素在于简洁、快速响应以及可靠。再一次地,CM3处理器的中断处理能力,低中断延迟,强化的故障处理能力(fault-handing,以后fault就不再译成中文了——译注),足以让它能昂首挺胸地踏入这片热土。3.1.1.4寄存器组Cortex-M3处理器拥有R0-R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。图3.1.1.4-1R0-R12:通用寄存器R0-R12都是32位通用寄存器,用于数据操作。但是注意:绝大多数16位Thumb指令只能访问R0-R7,而32位Thumb-2指令可以访问所有寄存器。BankedR13:两个堆栈指针Cortex-M3拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)进程堆栈指针(PSP):由用户的应用程序代码使用。在ARM编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception)。除了外部中断外,当有指令执行了“非法操作”,或者访问被禁的内存区间,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。在不严格的上下文中,异常与中断也可以混用。另外,程序代码也可以主动请求进入异常状态的(常用于系统调用)。堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。R14:连接寄存器当呼叫一个子程序时,由R14存储返回地址不像大多数其它处理器,ARM为了减少访问内存的次数(访问内存的操作往往要3个以上指令周期,带MMU和cache的就更加不确定了),把返回地址直接存储在寄存器中。这样足以使很多只有1级子程序调用的代码无需访问内存(堆栈内存),从而提高了子程序调用的效率。如果多于1级,则需要把前一级的R14值压到堆栈里。在ARM上编程时,应尽量只使用寄存器保存中间结果,迫不得以时才访问内存。在RISC处理器中,为了强调访内操作越过了处理器的界线,并且带来了对性能的不利影响,给它取了一个专业的术语:溅出。R15:程序计数寄存器指向当前的程序地址。如果修改它的值,就能改变程序的执行流(很多高级技巧就在这里面——译注)。特殊功能寄存器Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)控制寄存器(CONTROL)图3.1.1.4-23.1.1.5操作模式和特权极别Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。两种操作模式分别为:处理者模式(handlermode,以后不再把handler中译——译注)和线程模式(threadmode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。Cortex-M3的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。图3.1.1.5-1在CM3运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有MPU,还要在MPU规定的禁地之外),并且可以执行所有指令。在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态。图3.1.1.5-2通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。举例来说,操作系统的内核通常都在特权级下执行,所有没有被MPU禁掉的存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。3.1.1.6内建的嵌套向量中断控制器Cortex-M3在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器NVIC(NestedVectoredInterruptController)。它与内核有很深的“亲密接触”——与内核是紧耦合的。NVIC提供如下的功能:可嵌套中断支持向量中断支持动态优先级调整支持中断延迟大大缩短中断可屏蔽3.1.1.6.1可嵌套中断支持可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。3.1.1.6.2向量中断支持当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出ISR的入口地址,然后跳转过去执行。不需要像以前的ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。3.1.1.6.3动态优先级调整支持软件可以在运行时期更改中断的优先级。如果在某ISR中修改了自己所对应中断的优先级,而且这个中断又有新的实例处于悬起中(pending),也不会自己打断自己,从而没有重入(reentry)[译注7][译注7]:所谓的重入,就是指某段子程序还没有执行完,就因为中断或者是多任务操作系统的调度原因,导致该子程序在一个新的寄存器上下文中被执行(请不要把重入与递归混淆,它们有本质的区别)。这种情况常常会闹出乱子,因此有“可重入性”的研究。风险。3.1.1.6.4中断延迟大大缩短Cortex-M3为了缩短中断延迟,引入了好几个新特性。包括自动的现场保护和恢复,以及其它的措施,用于缩短中断嵌套时的ISR间延迟。详情请见后面关于“咬尾中断”和“晚到中断”的讲述。3.1.1.6.5中断可屏蔽既可以屏蔽优先级低于某个阈值的中断/异常[译注8](设置BASEPRI寄存器),也可以全体封杀(设置PRIMASK和FAULTMASK寄存器)。这是为了让时间关键(time-critical)的任务能在死线(deadline,或曰最后期限)到来前完成,而不被干扰。3.1.1.7存储器映射总体来说,Cortex-M3支持4GB存储空间,如图2.6所示地被划分成若干区域。从图中可见,不像其它的ARM架构,它们的存储器映射由半导体厂家说了算,Cortex-M3预先定义好了“粗线条的”存储器映射。通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。结果,片上外设可以使用C语言来操作。这种预定义的映射关系,也使得对访问速度可以做高度的优化,而且对于片上系统的设计而言更易集成(还有一个重要的,不用每学一种不同的单片机就要熟悉一种新的存储器映射——译注)。Cortex-M3的内部拥有一个总线基础设施,专用于优化对这种存储器结构的使用。在此之上,CM3甚至还允许这些区域之间“越权使用”。比如说,数据存储器也可以被放到代码区,而且代码也能够在外部RAM区中执行(但是会变慢不少——译注)。处于最高地址的系统级存储区,是CM3用于藏“私房钱”的——包括中断控制器、MPU以及各种调试组件。所有这些设备均使用固定的地址(本书第5章讨论存储器系统)。通过把基础设施的地址定死,就至少在内核水平上,为应用程序的移植扫清了障碍。3.1.1.8总线接口Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:指令存储区总线(两条)系统总线私有外设总线有两条代码存储区总线负责对代码存储区的访问,分别是I-Code总线和D-Code总线。前者用于取指,后者用于查表等操作,它们按最佳执行速度进行优化。系统总线用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。3.1.1.9存储器保护单元(MPU)Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU就会产生一个fault异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。MPU有很多玩法。最常见的就是由操作系统使用MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠。3.1.1.10指令集Cortex-M3只使用Thumb-2指令集。这是个了不起的突破,因为它允许32位指令和16位指令水乳交融,代码密度与处理性能两手抓,两手都硬。而且虽然它很强大,却依然易于使用。在过去,做ARM开发必须处理好两个状态。这两个状态是井水不犯河水的,它们是:32位的ARM状态和16位的Thumb状态。当处理器在ARM状态下时,所有的指令均是32位的(哪怕只是个”NOP”指令),此时性能相当高。而在Thumb状态下,所有的指令均是16位的,代码密度提高了一倍。不过,thumb状态下的指令功能只是ARM下的一个子集,结果可能需要更多条的指令去完成相同的工作,导致处理性能下降。为了取长补短,很多应用程序都混合使用ARM和Thumb代码段。然而,这种混合使用是有额外开销(overhead)的,时间上的和空间上的都有,主要发生在状态切换之时。另一方面,ARM代码和Thumb代码需要以不同的方式编译,这也增加了软件开发管理的复杂度。3.1.1.11中断和异常ARMv7-M开创了一个全新的异常模型,CM3采用了它。请你一定要划清界线:这种异常模型跟传统ARM处理器使用的完全是两码事。新的异常模型“使能”了非常高效的异常处理。它支持16-4-1=11种系统异常(保留了4+1个档位),外加240个外部中断输入。在CM3中取消了FIQ的概念(v7前的ARM都有这个FIQ,快中断请求),这是因为有了更新更好的机制——中断优先级管理以及嵌套中断支持,它们被纳入CM3的中断管理逻辑中。因此,支持嵌套中断的系统就更容易实现FIQ。CM3的所有中断机制都由NVIC实现。除了支持240条中断之外,NVIC还支持16-4-1=11个内部异常源,可以实现fault管理机制。2.9b低功耗与高能效(r2p0修订版)为了使我们的产品功耗更低,以及能源利用效率更高,Cortex-M3在设计时加入了很多针对性的功能。首先,在节能模式上,它提供了睡眠模式和深度睡眠模式。芯片以及整个系统在设计时通过与内核的节能模式相呼应,就可以根据应用的要求,在空闲时降低功耗。第二,它精练的设计使得门数很低,并且在工作状态下电路的活动更少,所以CM3自己也是“身先士卒”地以身作则了。而且,由于CM3的程序代码密度高,程序容量也可以变得更少;同时,再加上它强大的性能减少了程序执行时间,使得系统能以最快的速度回到睡眠中,以削低对能源的用量。综上所述,Cortex-M3的能效要高于大多的8位或16位单片机。3.1.1.12调试支持Cortex-M3在内核水平上搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机(halting)、单步执行(stepping)、指令断点、数据观察点、寄存器和存储器访问、性能速写(profiling)以及各种跟踪机制。Cortex-M3的调试系统基于ARM最新的CoreSight架构。不同于以往的ARM处理器,内核本身不再含有JTAG接口。取而代之的,是CPU提供称为“调试访问接口(DAP)”的总线接口。通过这个总线接口,可以访问芯片的寄存器,也可以访问系统存储器,甚至是在内核运行的时候访问!对此总线接口的使用,是由一个调试端口(DP)设备完成的。DPs不属于CM3内核,但它们是在芯片的内部实现的。目前可用的DPs包括SWJ-DP(既支持传统的JTAG调试,也支持新的串行线调试协议),另一个SW-DP则去掉了对JTAG的支持。另外,也可以使用ARMCoreSignt产品家族的JTAG-DP模块。这下就有3个DPs可以选了,芯片制造商可以从中选择一个,以提供具体的调试接口(通常都是选SWJ-DP)。此外,CM3还能挂载一个所谓的“嵌入式跟踪宏单元(ETM)”。ETM可以不断地发出跟踪信息,这些信息通过一个被称为“跟踪端口接口单元(TPIU)”的模块而送到内核的外部,再在芯片外面使用一个“跟踪信息分析仪”,就可以把TIPU输出的“已执行指令信息”捕捉到,并且送给调试主机——也就是PC。在Cortex-M3中,调试动作能由一系列的事件触发,包括断点,数据观察点,fault条件,或者是外部调试请求输入的信号。当调试事件发生时,Cortex-M3可能会停机,也可能进入调试监视器异常handler。具体如何反应,则根据与调试相关寄存器的配置。与调试相关的还有其它的绝活。现在要介绍的是“仪器化跟踪宏单元(ITM)”,它也有自己的办法把数据送往调试器。通过把数据写到ITM的寄存器中,调试器能够通过跟踪接口来收集这些数据,并且显示或者处理它。此法不但容易使用,而且比JTAG的输出速度更快。所有这些调试组件都可以由DAP总线接口来控制,CM3内核提供DAP接口。此外,运行中的程序也能控制它们。所有的跟踪信息都能通过TPIU来访问到。3.1.2STM32Cortex-M3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。■内核:ARM32位的Cortex™-M3CPU−最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone2.1)−单周期乘法和硬件除法■存储器−从256K至512K字节的闪存程序存储器−高达64K字节的SRAM−带4个片选的静态存储器控制器。支持CF卡、SRAM、PSRAM、NOR和NAND存储器−并行LCD接口,兼容8080/6800模式■时钟、复位和电源管理−2.0~3.6伏供电和I/O引脚−上电/断电复位(POR/PDR)、可编程电压监测器(PVD)−4~16MHz晶体振荡器−内嵌经出厂调校的8MHz的RC振荡器−内嵌带校准的40kHz的RC振荡器−带校准功能的32kHzRTC振荡器■低功耗−睡眠、停机和待机模式−VBAT为RTC和后备寄存器供电■3个12位模数转换器,1μs转换时间(多达21个输入通道)−转换范围:0至3.6V−三倍采样和保持功能−温度传感器■2通道12位D/A转换器■DMA:12通道DMA控制器−支持的外设:定时器、ADC、DAC、SDIO、I2S、SPI、I2C和USART■调试模式−串行单线调试(SWD)和JTAG接口−Cortex-M3内嵌跟踪模块(ETM)■多达112个快速I/O端口−51/80/112个多功能双向的I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号■多达11个定时器−多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入−2个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器−2个看门狗定时器(独立的和窗口型的)−系统时间定时器:24位自减型计数器−2个16位基本定时器用于驱动DAC■多达13个通信接口−多达2个I2C接口(支持SMBus/PMBus)−多达5个USART接口(支持ISO7816,LIN,IrDA接口和调制解调控制)−多达3个SPI接口(18M位/秒),2个可复用为I2S接口−CAN接口(2.0B主动)−USB2.0全速接口−SDIO接口3.2称重模块3.2.1主要连接说明图3-13.2.2称重原理3.2.2.15Kg传感器满量程输出电压=激励电压*灵敏度1.0mV/V相当于有5Kg重力产生的时候产生5mV的电压3.2.2.2711模块对产生5mV电压采样图3-2711模块A通道带有128倍信号增益,可以将5mV的电压放大128倍,然后采样输出24bitAD转换的志,单片机通过制定的时序将24bit数据读出。步骤一:如何计算传感器供电电压HX711可以产生VAVDD和AGND电压,即711模块上的E+和E-电压,该电压通过VAVDD=VBG(R1+R2)/R2计算。VBG为模块基准电压1.25 VR1=20K,R2=8.2K因此得出VAVDD=4.3V步骤二:如何将AD值反向转为重力值假设重力为AKg,测量出来的AD值为y传感器输出,发给AD模块的电压为AKg*4.3mV/5Kg=0.86AmV所以y=429496.7296A因此得出A=y/429496.7296Kg≈y/429。4967296g所以得出程序中的计算公式
Weight_Shiwu=(unsignedlong)(float)Weight_Shiwu/429.5);3.3蓝牙模块性能概要蓝牙2.0带EDR,2Mbps-3Mbps调制度内置2.4GHz天线,用户无需调试天线外置8MbitFLASH低电压3.3V工作(3.1V~4.2V)配对时30~40MA波动,配对完毕通信8MA可选PIO控制标准HCI端口(UARTorUSB)USB协议:FullSpeedUSB1.1,CompliantWith2.0模块可以作为SMD贴片工艺RoHS制程引脚半孔工艺数字2.4GHz无线收发射CSRBC04蓝牙芯片技术自适应跳频技术体积小,(27mm×13mm×2mm)简单的外围设计电路蓝牙Class2功率级别存储温度:-40至+85度,工作温度:-25至+75度协波干扰:2.4MHz,发射功率3dBm误码率:0,但会在传输链路产生信号衰变,才有误码,如RS232和TTL线路处理线路3.4GSM模块WF-SIM900A是野火设计的高品质串口GSM/GPRS模块,它采用SIMCOM公司的SIM900A模块方案。WF-SIM900A可通过串口传输标准的AT命令对模块进行控制,可为您的产品提供简单方便的GSM语音、短信及GPRS的数据通讯功能。图3.4-1GSM模块硬件图程序设计本系统程序包括三部分:称重程序,GSM控制程序,蓝牙控制程序。根据开发环境设计程序是系统程序设计的核心,也是系统软件设计的难点。本节对各部分程序和作简单介绍。4.1称重部分主要程序//****************************************************//读取HX711//****************************************************unsignedlongHX711_Read(void) //增益128{ unsignedlongcount; unsignedchari; GPIO_InitTypeDefGPIO_InitStructure; /*configtheextilineclockandAFIOclock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_SetBits(GPIOD,GPIO_Pin_12);//HX711_DOUT=1; //先置1 Delay__ms(50); GPIO_ResetBits(GPIOD,GPIO_Pin_3);//HX711_SCK=0; count=0; while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12));//while(HX711_DOUT); for(i=0;i<24;i++) { GPIO_SetBits(GPIOD,GPIO_Pin_3);//HX711_SCK=1; count=count<<1; GPIO_ResetBits(GPIOD,GPIO_Pin_3);//HX711_SCK=0; if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12))//if(HX711_DOUT) count++; } GPIO_SetBits(GPIOD,GPIO_Pin_3); //HX711_SCK=1;count=count^0x800000;//第25个脉冲下降沿来时,转换数据 Delay__ms(50); GPIO_ResetBits(GPIOD,GPIO_Pin_3);//HX711_SCK=0; return(count);} //****************************************************//获取毛皮重量//****************************************************voidGet_Maopi(){ Weight_Maopi=HX711_Read(); }//****************************************************//称重//****************************************************voidGet_Weight(){ Weight_Shiwu=HX711_Read(); Weight_Shiwu=Weight_Shiwu-Weight_Maopi; //获取净重 if(Weight_Shiwu>0) { Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/GapValue); //计算实物的实际重量 if(Weight_Shiwu>5000) //超重报警 { Flag_ERROR=1; } else { Flag_ERROR=0; } } else { Weight_Shiwu=0; Flag_ERROR=1; //负重报警 }}/***@brief事件处理函数,循环调用*/voideven_process(void){ charlcd_char[20]; Get_Maopi(); //称毛皮重量 /*配置USART1*/USART1_Config();/*配置USART2*/USART2_Config();/*初始化系统定时器*/SysTick_Init(); LCD_DispEnCh(60,10,"远程超重报警",BLUE);//检测模块响应是否正常while(sim900a_cmd("AT\r","OK",1000)!=SIM900A_TRUE){}LCD_DispEnCh(10,50,"通过了模块响应测试开始检测若超重2秒后开始报警",BLUE);/*USART1config1152008-N-1*/ USART1_Config(); while(1) { Get_Weight(); //³ÆÖ//显示当前重量 if(Flag_ERROR==1) { Lcd_GramScan(1); LCD_DispChar(20+10,180,Weight_Shiwu/1000+0X30,BLUE); LCD_DispChar(20+20,180,Weight_Shiwu%1000/100+0X30,BLUE); LCD_DispChar(20+30,180,Weight_Shiwu%100/10+0X30,BLUE); LCD_DispChar(20+40,180,Weight_Shiwu%10+0X30,BLUE); LCD_DispEnCh(20+50,180,"g",BLUE); printf("\r\n%d%c",Weight_Shiwu,'g'); } else { Lcd_GramScan(1); LCD_DispChar(20+10,180,Weight_Shiwu/1000+0X30,BLUE); LCD_DispChar(20+20,180,Weight_Shiwu%1000/100+0X30,BLUE); LCD_DispChar(20+30,180,Weight_Shiwu%100/10+0X30,BLUE); LCD_DispChar(20+40,180,Weight_Shiwu%10+0X30,BLUE); LCD_DispEnCh(20+50,180,"g",BLUE); printf("\r\n%d%c",Weight_Shiwu,'g'); }4.2GSM部分主要程序 if(Weight_Shiwu>150) { SIM900A_DELAY(500); //拨打电话 sim900a_call("112"); rebuff=sim900a_waitask(0); if(strstr(rebuff,"OK")!=NULL)//响应OK表示模块正常接收到命令{ Lcd_GramScan(1); LCD_Clear(10,220,300,100,YELLOW); LCD_DispEnCh(10,200,"正在呼叫",BLUE); SIM900A_CLEAN_RX();//清除接收缓冲区 rebuff=sim900a_waitask(0);//重新等待消息 if(strstr(rebuff,"NOCARRIER")!=NULL)//响应NOCARRIER通话结束{ Lcd_GramScan(1); LCD_Clear(10,200,300,20,YELLOW); LCD_DispEnCh(10,220,"通话结束",BLUE); }elseif(strstr(rebuff,"NOANSWER")!=NULL)//响应NOANSWEER无人接听{ Lcd_GramScan(1); LCD_Clear(10,200,300,40,YELLOW); LCD_DispEnCh(10,240,"通话结束2",BLUE);}}}}}另外GSM需使用串口通信,故串口设置如下:/***@briefUSART1GPIO配置,工作模式配置*/voidUSART1_Config(void){ GPIO_InitTypeDefGPIO_InitStructure; USART_InitTypeDefUSART_InitStructure; /*configUSART1clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE); /*USART1GPIOconfig*/ /*ConfigureUSART1Tx(PA.09)asalternatefunctionpush-pull*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); /*ConfigureUSART1Rx(PA.10)asinputfloating*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); /*USART1modeconfig*/ USART_InitStructure.USART_BaudRate=9600; USART_InitStructure.USART_WordLength=USART_WordLength_8b; USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStru
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 向阳而生做自己生命里的光
- 总工程师岗位职责
- 监区消防安全应急预案
- 德国AI发展模式
- AI在LOL游戏中的应用
- 安全汇编实战心得讲解
- 脑缺氧急救知识
- 人与AI关系论文
- 苏教版新教材一年级上册期末复习教学设计
- 远程办公系统用户实名制管理规定
- 2026年教师职业能力测评题库及答案
- 2026年湖北天门市专业技术职务水平能力测试(党建基础知识)练习试题及答案
- 2026年高考北京卷文综历史预测考点题库真题及答案
- 2026江苏苏州工业园区综合执法系统招聘工作人员20人考试参考试题及答案解析
- 统编版历史八年级下册第20课《维护国家安全和推进祖国统一》 教学课件
- 2026年招标采购从业人员《招标采购专业理论与法律基础(初级)》考试真题(含解析)
- 2026年国际注册汉语教师资格等级考试基础综合教材笔记及真题题库
- 2026四川省引大济岷水资源开发有限公司第二批次招聘68人笔试参考题库及答案解析
- 2026广东中山大学附属第三医院招聘事业单位人员29人(第二批)笔试备考题库及答案解析
- 2025年大数据管理中心招聘考试笔试试题(含答案)
- 党员发展对象培训考试题库完整版附答案【完整版】
评论
0/150
提交评论