基于stm32系列单片机的门禁读卡器功能测试仪设计_第1页
基于stm32系列单片机的门禁读卡器功能测试仪设计_第2页
基于stm32系列单片机的门禁读卡器功能测试仪设计_第3页
基于stm32系列单片机的门禁读卡器功能测试仪设计_第4页
基于stm32系列单片机的门禁读卡器功能测试仪设计_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

门禁读卡器功能测试仪设计PAGEIV基于STM32系列单片机的门禁读卡器功能测试仪设计摘要本设计是基于STM32系列的单片机进行的对SXG系列门禁读卡器的功能测试。在设计的同时对STM32单片机的理论基础和外围扩展知识进行了比较全面准备。对SXG系列门禁读卡器的功能测试在硬件与软件方面进行同步设计。硬件部分主要由STM32F107VCT6微处理器、LED显示电路、JTAG下载电路、电源转换电路、韦根通信电路、以及电机控制电路等组成,系统通过LED和米字型LED显示测试结果,所以具有人性化的操作和直观的显示效果。软件方面主要包括系统进入停止模式和退出停止模式、韦根通信、控制电机、键盘测试等。本系统以C语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现对SXG系列门禁读卡器的功能测试。所有程序编写完成后,在keil软件中进行调试,确定没有问题后,焊接硬件测试SXG系列门禁读卡器。关键词STM32F107VCT6韦根通信电机控制

THEDESIGNOFTHEACCESSCONTROLREADERFUNCTIONTESTERABSTRACTTakingtheSXGseriesofaccesscontrolreaderforresearchobject,thispaperdesignedthefunctiontestswhichbasedontheseriesofSTM32microcontrollers.ThetheoreticalbasisoftheSTM32MCUandperipheralsexpandyourknowledgeinthedesign,whileamorecomprehensivepreparation.SXGseriesaccessfunctionaltestofthereaderhardwareandsoftwareaspectsofthesynchronousdesign.ThehardwarepartismainlymicroprocessorsbySTM32F107VCT6,LEDdisplaycircuit,JTAGdownloadcircuit,thepowerconversioncircuit,Wiegandcommunicationcircuit,andmotorcontrolcircuitandothercomposition,thesystemLED-segmentLEDdisplaysthetestresults,sohumaneoperationandintuitivedisplay.Thesoftwaresystementersstopmodeandexitthestopmode,Wiegandcommunications,control,motors,keyboardtesting.ThesystemsoftwaredesigninClanguage,inordertofacilitatetheexpansionandchange,thesoftwaredesignismodularinstructure,programminglogicismoreconcise,inordertomoreeasilyachievethefunctionaltestingSXGseriesaccesscardreader.Allprogramsaftertheircompletion,inkeilsoftwarefordebugging,thereisnoproblem,weldingSXGseriesaccesscardreaderhardwaretesting.KEYWORDSSTM32F107VCT6WiegandcommunicationMotorcontrol目录中文摘要 I英文摘要 II1绪论 11.1引言 11.2主要任务 21.3主要技术指标 21.4门禁读卡器功能测试仪的国内外发展现状与趋势 22设计方案论证 32.1控制器芯片的选择方案和论证 32.2显示模块选择方案和论证 32.3下载方式的选择方案和论证 42.4电路设计最终方案确定 43硬件设计 63.1电源设计 63.2晶振电路 63.3复位电路 73.4开始按键电路 73.5韦根通信电路 83.6JTAG下载电路 83.7电机控制电路 93.8主电路设计 104软件设计 124.1主程序设计 124.2系统初始化 144.3系统自检 154.4开始键设为中断模式 154.5进入停止模式 164.6配置系统时钟 164.7电机控制 174.8韦根通信测试 174.9按键测试 195系统调试 205.1软件调试 205.2硬件调试 20结束语 22致谢 23参考文献 24附录 25附录1硬件电路图 25附录2PCB板 27附录3主程序源代码 28PAGE551绪论1.1引言随着经济的蓬勃发展,外来人员增多,出租屋租住人员的流动性更大,如何杜绝闲杂人员的进入,加强出租屋的技术防范水平。传统机械锁在使用过程中存在以下问题:都采用一把钥匙一把锁,钥匙易被仿制;钥匙丢失后存在安全严重隐患;人员流动导致钥匙流失而无法控制;有的出租屋,更换一个人就要更换几套机械锁;几乎所有的机械门锁,对上门开锁者,都是很容易打开的。出入口处安装刷卡门禁系统[1],一人一卡,所有租住人员都必须凭卡出入,即使租户钥匙扣卡不慎丢失,只要将他的卡号通过遥控器直接删除,该卡立即在本锁使用无效,业主不用换锁,即经济又安全。出入口门禁安全管理系统是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子、机械、光学、计算机技术、通讯技术、生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施。适用各种机要部门,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂等。在数字技术网络技术飞速发展的今天门禁技术得到了迅猛的发展。门禁系统早已超越了单纯的门道及钥匙管理,它已经逐渐发展成为一套完整的出入管理系统。它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。门禁系统中读卡器[2]是最外围设备,担负着读取卡片信息、人机界面交互、数据校验上传等一系列功能,其重要性不言而喻。读卡器要具有安全性、稳定性、外型美观及环境和谐、人机界面友好、安装调试的经济与便捷、节能环保设计的特点。英格索兰的SXG系列CPU智能卡读卡器具有这些特点,采用多技术,支持125KHz低频卡和13.56MHz高频卡;阅读距离远:7.6cm(125K);7.6cm(ISO15693);兼容非接触CPU智能卡等多种格式:HIDProximity;Infineonmy-d安全扇区;HIDiClass、Infineonmy-d、PhilipsI-Code、DESFire、MIFARE序列号;DESFire、MIFARE扇区,复旦微电子FM1208CPU卡安全文件;具有防拆保护,3态LED(红、绿、琥珀)可视化指示灯及声音反馈,显示工作状态及动作信息;广泛使用于银行、办公楼、建筑工地、交通、电力、军队、学校、医院等门禁应用场合。1.2主要任务本文设计的测试仪可检测英格索兰的SXG6701K、SXG6501、SXG5501、SXG4501、SXG4001、SXG5001型号的读卡器,利用STM32F107VCT6[3]进行控制,LED显示测试结果,可广泛应用于英格索兰的SXG系列CPU智能卡读卡器的生产工厂,自动化工作,可减少员工的工作量。因而,此设计具有相当重要的现实意义和实用价值。1.3主要技术指标(1)工作温度范围:-20°C到+80°C;(2)测试设备支持SXG6701K,6501,5501,4501,4001,5001;(3)不工作时进入停止模式[4],节省能耗;(4)支持韦根26位、34位(带校验),以及4位(不带校验);(5)键盘测试时,能够自动运行。1.4门禁读卡器功能测试仪的国内外发展现状与趋势门禁读卡器是门禁系统的重要组成部分,是门禁系统信号输入的关键设备,其安全性和可靠性是不言而喻的。门禁读卡器的读卡技术多种多样,种类又很多。目前门禁读卡器功能测试仪主要是针对各公司的产品进行制造的,种类单一,兼容性不强,这样导致读卡器生产商要采购多种测试仪才能满足检测需要,增加了成本。有些测试仪为了节省成本,使用简单功能的微处理器,没有低功耗模式,耗电量大。也有些测试仪界面不够友好,使用者需要学习一段时间才能操作,降低了生产商的生产效率。为了改善以上的不足,未来的门禁读卡器功能测试仪将朝着多功能化发展,将支持目前市面上主流的读卡技术校验,能够自动运行,支持更多型号的读卡器,具备键盘测试,外型美观及环境和谐,人机界面友好,可使使用者快速掌握使用方法。节能环保也将是今后读卡器功能测试仪发展的重要趋势,不工作时处于休眠状态,降低功耗。以后的门禁读卡器测试仪也将更加的安全和稳定。2设计方案论证2.1控制器芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术[5],当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用STM32F107VCT6,片内具有64KB的RAM和256KB的ROM,存储空间大不需要外扩存储芯片;工作温度范围:-40°C到+85°C,满足工业现场;支持的接口类型多,包括USB、USART、SPI、I2C、CAN[6],便于以后升级;电源电压最大3.6V,最小2V;支持JTAG[7],具有在线调试功能;具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用STM32F107VCT6作为主控制芯片。2.2显示模块选择方案和论证方案一:采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:采用米字型LED显示,米字型LED价格适中,单个就可以显示所有的数字和英文字符,接线方法简单。所以采用了米字型LED作为显示。2.3下载方式的选择方案和论证方案一:通过串口下载程序,首先要将STM32F107VCT6的启动模式[8]设置为SystemBoot,而默认的启动模式是UserBoot,在SystemBoot模式下,STM32在复位后不会执行用户代码,而是等待串口更新程序。程序运行时,需要将启动模式设置为UserBoot模式,复位芯片。方案二:通过USB接口下载程序,首先要将STM32F107VCT6的启动模式设置为SystemBoot,而默认的启动模式是UserBoot。程序下载成功后,需要将启动模式设置为UserBoot模式,复位芯片即可看到程序运行的现象。方案三:通过JLINK下载程序,不需要改变启动模式,JLINK仿真器支持的处理器多,与主流的开发环境完美结合。通过JLINK仿真器,可以方便地下载和在线调试代码。所以采用JLINK下载程序。2.4电路设计最终方案确定综上各方案所述,对此次作品的方案选定:以STM32F107VCT6为主控制器,通过JLINK仿真器下载和调试程序,LED指示灯显示测试结果,米字型LED显示键盘测试结果。主电路采用STM32F107VCT6作为主芯片,包括复位电路、开始按键电路、电源模块、JTAG下载电路、LED工作指示灯电路、米字型LED显示电路、韦根通信电路、电机控制电路和按键测试电路。电路设计框图如图2-4所示:STM32F107VCTSTM32F107VCT6复位电路开始按键电路电源模块LED工作指示灯电路米字型LED显示电路韦根通信电路JTAG下载电路按键测试电机控制电路图2-4电路设计框图3硬件设计3.1电源设计在这里因设计分工和侧重点不同,电源模块先采用通用的电源将220V的交流电转换成12V的直流电,然后12V的电源一方面给英格索兰的SXG系列CPU智能卡读卡器供电,一方面给本设计的测试电路供电。上电后,电源工作指示灯LED5亮,然后经过C4、C5电容滤波输入到LM1117,通过电压调节器LM1117调节后输出3.3V的电压,再经过C6、C7电容滤波,最后输出稳定的3.3V电压。如图3-1所示:图3-1电源设计3.2晶振电路单片机必须在时钟的驱动下才能进行工作,STM32F107VCT6内部含有一个8MHz的RC振荡器,但精度较差,通常使用外部高速时钟信号。外部25MHz的高速时钟首先经过时钟配置寄存器2的PREDIV2分频因子进行5分频,然后经过PLL2倍频因子8倍频后,再经过PREDIV1分频因子5分频后得到8MHz的时钟,然后经过时钟配置寄存器的PLL倍频系数9倍频后,输出精确的72MHz时钟。如图3-2所示:图3-2晶振电路3.3复位电路在系统运行的过程中,有时可能对系统需要进行复位,为了避免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路,如图3-3所示。这种电路的设计,在系统的运行过程中需要复位时,只需使开关闭合,在NRST端就会出现一定时间的低电平信号,从而使STM32F107VCT6单片机实现复位。图3-3复位电路3.4开始按键电路系统启动时先进行自检,然后进入停止模式,节省能耗。需要工作时,按下开始按键产生中断,唤醒系统,系统进入正常工作模式,开始正常工作。机械开关连接时,一旦按下按键常常会出现几次断续的通、断现象。为了消除这种现象需要去抖动,去抖动的方式包括硬件去抖动和软件去抖动。本设计采用硬件去抖动,在开关旁边加一个104电容。如图3-4所示:图3-4开始按键电路3.5韦根通信电路Wiegand(韦根)协议是由摩托罗拉公司制定的一种通讯协议,它适用于涉及门禁控制系统的读卡器和卡片的许多特性;其协议并没有定义通讯的波特率、也没有定义数据长度,主要定义了数据传输方式。现在应用最多的是26bit和34bit。韦根数据输出由二根线组成,分别是DATA0和DATA1,二根线分别将0或1输出。如果没有数据传输,DATA0和DATA1两根线处于高电平,所以每根线上各加一个上拉电阻。如图3-5所示:图3-5韦根通信电路3.6JTAG下载电路JTAG(JointTestActionGroup联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。现在,JTAG接口还常用于实现ISP(In-SystemProgrammable在线编程),对FLASH等器件进行编程。JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程,再烧写到板上,现在简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。IEEE1149.1标准规定了一个四线串行接口(第五条线是可选的),该接口称作测试访问端口(TAP),用于访问复杂的集成电路(IC),例如微处理器、DSP、ASIC和CPLD。除了TAP之外,混合IC也包含移位寄存器和状态机,以执行边界扫描功能。在TDI(测试数据输入)引线上输入到芯片中的数据存储在指令寄存器中或一个数据寄存器中。串行数据从TDO(测试数据输出)引线上离开芯片。边界扫描逻辑由TCK(测试时钟)上的信号计时,而且TMS(测试模式选择)信号驱动TAP控制器的状态。TRST(测试重置)是可选项。根据相关数据手册中的说明,TRST、TDI、TMS、TCK引脚上需要接一个10KΩ的上拉电阻。JLINK仿真器通过JTAG接口下载程序,不需要改变启动方式,可以直接下载,还可以在线调试,简单方便。电路如图3-6所示:图3-6JTAG下载电路3.7电机控制电路本设计采用H桥驱动电路驱动130直流电机。如图3-7所示,H桥式电机驱动电路包括6个三极管和一个130直流电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q3和Q4同时导通,那么电流就会从正极穿过两个三极管直接回到负极,此时电路上的电流就可能达到最大值,甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关,所以需要添加两个三极管Q1和Q2。当A为高电平B为低电平时,Q1导通Q2截止,所以Q3截止Q4导通、Q5导通Q6截止,所以电流方向是从电源正极经三极管Q5到电机,再经三极管Q4到地。相反,当A为低电平B为高电平时,Q1截止Q2导通,所以Q3导通Q4截止、Q5截止Q6导通,所以电流方向是从电源正极经三极管Q3到电机,再经三极管Q6到地。所以只需改变A、B电平高低就可以实现电机的正反转。电机启动时电路中的电流会突然增大,会对其它模块产生干扰,所以在电源端增加两个电容C20和C21,使电流缓慢增加,减小对其它模块的干扰。图3-7电机控制电路3.8主电路设计主电路的功能是完成对英格索兰的SXG系列CPU智能卡读卡器的检测,通过LED指示灯和米字型LED显示检测结果。主电路上带有显示接口,用于指示工作状态。电源指示灯用于指示主电路接通电源;工作状态指示灯LED1用于指示低频卡的刷卡状态,LED1亮表示低频卡刷卡成功,灭表示刷卡失败;工作状态指示灯LED2用于指示高频卡的刷卡状态,LED2亮表示高频卡刷卡成功,灭表示刷卡失败;工作状态指示灯LED3用于指示SXG系列智能卡读卡器的防拆开关的状态,LED3亮表示读卡器被打开了,输出报警,灭表示读卡器未被打开;工作状态指示灯LED4用于指示高频卡或低频卡是否存在,LED4亮表示高频卡或低频卡进行过刷卡,灭表示没有刷卡;米字型LED用于显示按键的数字,按键测试时,按0到9则显示0到9,按“*”则显示“A”,按“#”则显示“B”。电路原理图如图附录1所示,4个LED指示灯接在PE口的0到3管脚上,米字型LED接到PA口的8到12管脚、PC口的6到9管脚和PD口的9到15管脚。因为要检测SXG系列CPU智能卡读卡器上的红色LED、绿色LED和蜂鸣器是否正常,所以PB端口的12到14管脚需要通过驱动电路接到外部端口上,检测时与其相应的端口相连。SXG6701K读卡器带有键盘,其它型号没有键盘,需要添加一个型号检测选择开关,本电路中接到了PE15上,低电平时不进行键盘检测,高电平时进行键盘检测。键盘检测时,将PA口的1到7管脚、PB0管脚、PB1管脚、PC4管脚、PC5管脚和PE7管脚通过驱动电路接到SXG系列CPU智能卡读卡器的相应管脚上,一个管脚对应一个数字,共有12个数字或字符,读卡器的相应管脚收到低电平时,会通过韦根通信输出对应的二进制按键编码,主电路收到后会通过米字型LED显示出对应的数字或字符。读卡器具有防拆保护,主电路通过控制直流电机使一个面板遮挡读卡器上的防拆孔,工作状态指示灯3亮说明被拆开了,移开面板,工作状态指示灯3灭,则无报警信号。主电路最重要的是对SXG系列CPU智能卡读卡器的高频卡和低频卡的检测,主电路上的韦根通信接口接到SXG系列CPU智能卡读卡器上,用户刷低频卡时,读卡器读取数据通过韦根通信将26位数据发送到主电路中,主电路对26位韦根数据进行校验,如果正确,工作状态指示灯LED1和LED4亮1秒。用户刷高频卡时,读卡器读取数据通过韦根通信将34位数据发送到主电路中,主电路对34位韦根数据进行校验,如果正确,工作状态指示灯LED2和LED4亮1秒。刷低频卡和高频卡没有先后顺序。4软件设计软件的设计是设计控制系统的应用程序。其任务是在整体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整应用程序,与硬件相结合完成相应功能。4.1主程序设计主程序采用模块化设计,流程图如图4-1所示。从流程图可以看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,系统上电后首先是系统初始化,配置每个寄存器和初始化结构体和变量,然后是系统自检,确保本测试电路能够正常工作,之后设置开始按键为中断模式,为了节省能耗系统进入停止模式。当需要工作时,按下开始键产生中断唤醒系统,系统进入正常工作模式,调用LED和蜂鸣器测试子程序测试SXG系列CPU智能卡读卡器上的绿色LED、红色LED和蜂鸣器能否正常工作,然后调用电机控制子程序检测读卡器上的防拆保护功能能否工作。如果在读卡器上刷高频卡或低频卡则调用高频卡或低频卡校验子程序,校验从卡上读取的数据是否正确。最后判断是否进行按键测试,首先判断型号选择开关引脚的电平,若为低电平则测试结束,若为高电平,则调用按键测试子程序,测试完进入停止模式,等待下一次测试。开始NY型号选择开关是高电平?开始NY型号选择开关是高电平?系统初始化系统初始化系统自检系统自检开始键设为中断模式开始键设为中断模式系统进入停止模式系统进入停止模式按下开始键,唤醒系统按下开始键,唤醒系统调用退出停止模式子程序调用退出停止模式子程序调用测试绿色LED、红色LED和蜂鸣器子程序调用测试绿色LED、红色LED和蜂鸣器子程序调用电机控制子程序调用电机控制子程序调用高频卡或低频卡校验子程序调用高频卡或低频卡校验子程序按键测试按键测试图4-1主程序流程图4.2系统初始化在使用一个GPIO之前,一般需要对GPIO引脚的时钟、引脚的模式以及速率进行设定。STM32的IO口可以由软件配置成8种模式:模拟输入、输入浮空、输入下拉、输入上拉、开漏输出、推挽输出、复用功能开漏输出和复用功能推挽输出。IO端口作为输出时,可以软件配置端口最大支持的时钟速率:10MHz、2MHz和50MHz。系统初始化包括初始化4个LED指示灯和米字型LED、初始化电机控制、初始化防拆保护引脚、初始化型号选择开关、初始化韦根通信接口、初始化检验读卡器上的LED和蜂鸣器的引脚和初始化按键测试。初始化时都需要打开对应端口的时钟,4个LED指示灯、米字型LED、按键测试、电机控制和检验读卡器上的LED和蜂鸣器的引脚配置成输出模式,时钟速率设置为50MHz;防拆保护、型号选择开关的引脚设为输入模式,不需要设置时钟速率;韦根通信接口的引脚设为中断模式,输入上拉,下降沿触发。如图4-2所示:开始开始初始化初始化4个LED和米字型LED初始化电机控制初始化电机控制初始化防拆保护引脚初始化防拆保护引脚初始化型号选择开关初始化型号选择开关初始化韦根通信接口初始化韦根通信接口初始化绿色初始化绿色LED、红色LED和蜂鸣器初始化按键测试的引脚初始化按键测试的引脚返回返回图4-2系统初始化流程图4.3系统自检低电平点亮LED,高电平熄灭LED。首先4个LED和米字型LED对应的引脚输出低电平,然后延迟1秒,最后输出高电平。如图4-3所示:开始开始4个4个LED和米字型LED对应的引脚输出低电平延迟延迟1秒44个LED和米字型LED对应的引脚输出高电平返回返回图4-3系统自检流程图4.4开始键设为中断模式STM32的所有GPIO管脚都可以作为中断输入源,通过复用的方式使其对处理器来说来自GPIO的一共有16个中断Px[15:0]。开始键接在PE14上,所以中断是外中断线14。如图4-4所示:开始开始打开端口时钟,引脚设为输入浮空打开端口时钟,引脚设为输入浮空配置中断源、外中断线、中断触发方式配置中断源、外中断线、中断触发方式设置中断通道、优先级设置中断通道、优先级启动中断启动中断返回返回图4-4开始键设为中断模式4.5进入停止模式停止模式是在Cortex-M3的深睡眠模式基础上结合了外设的时钟控制机制。进入停止模式:首先设置Cortex-M3系统控制寄存器中的SLEEPDEEP位,清除电源控制寄存器(PWR_CR)中的PDDS位,然后通过设置PWR_CR中LPDS位选择电压调节器模式,最后执行WFI指令。如图4-5所示:开始开始清除清除PWR_CR寄存器的PDDS位设置设置PWR_CR寄存器的LPDS位设置系统控制寄存器的设置系统控制寄存器的SLEEPDEEP位执行执行WFI(等待中断)指令返回返回图4-5进入停止模式流程图4.6配置系统时钟任一个外部中断即可唤醒系统,唤醒后需要配置系统时钟。激活HSE(高速外部时钟),待HSE稳定后,激活PLL,把PLL作为系统时钟源。如图4-6所示:开始开始激活激活HSE(高速外部时钟)激活激活PLL选择选择PLL作为系统时钟源返回返回图4-6配置系统时钟4.7电机控制电机控制部分对应两个管脚A和B,管脚A为高电平管脚B为低电平时,电机正转;管脚A为低电平管脚B为高电平时,电机反转;管脚A和管脚B的电平相同时,电机停止转动。如图4-7所示:开始开始管脚管脚A设为高电平,管脚B设为低电平,电机正转延迟延迟4秒管脚管脚A和管脚B都设为低电平,电机停止延迟延迟1秒管脚管脚A设为低电平,管脚B设为高电平,电机反转延迟延迟4秒管脚管脚A和管脚B都设为低电平,电机停止返回返回图4-7电机控制流程图4.8韦根通信测试这是设计的难点,SXG系列CPU智能卡读卡器要读取低频卡和高频卡的数据,而且无先后顺序,低频卡26位韦根数据,高频卡34位韦根数据。韦根数据输出由二根线组成,分别是DATA0和DATA1;二根线分别将‘0’或‘1’输出。输出‘0’时:DATA0线上出现负脉冲;输出‘1’时:DATA1线上出现负脉冲;负脉冲宽度TP=100微秒;周期TW=1600微秒。韦根的接收对时间的实时性要求比较高,如果用查询的方法接收会出现丢帧的现象:假设查询到DATA0为0时主程序正在指向其他任务,等主程序执行完该任务时DATA0已经变为1了,那么这样就导致了一个0位丢了,这样读出的卡号肯定奇偶校验通不过,所以表现出CPU接收不到ID模块发送的卡号了,唯一的办法是在外部中断里接收每个位。当有韦根数据传输时产生中断,在中断里接收韦根数据,接收完后需要对韦根数据的位数进行判断。如果是26位数据,调用26位韦根数据校验程序进行校验,若数据正确,面板上的指示灯LED1和LED4亮1秒;如果是34位数据,调用34位韦根数据校验程序进行校验,若数据正确,面板上的指示灯LED2和LED4亮1秒。如图4-8所示:开始开始中断里读取韦根数据中断里读取韦根数据高频卡标志high置1,调用高频卡标志high置1,调用34位韦根数据校验程序进行校验数据是26位?YLED4亮1秒数据正确?LED4亮1秒数据正确?低频卡标志low置1,调用26位韦根数据校验程序进行校验YLED2和LED2和LED4亮1秒数据正确?LED4亮1秒数据正确?LED4亮1秒YLED1LED1和LED4亮1秒低频卡和高频卡标志都是1?低频卡和高频卡标志都是1?Y返回返回图4-8韦根通信测试4.9按键测试仅适用于型号SXG6701K,首先判断型号选择开关的状态,若是高电平则进行按键测试。主设备通过控制逻辑电路模拟按键,读卡器上一共有12个按键。按键接收到低电平时,会通过韦根输出对应的4位二进制按键编码,韦根数据不需要校验,同时12个按键的引脚不能同时为低电平。如图4-9所示:开始开始型号选择开关是高电平?型号选择开关是高电平?NNY给下一个按键引脚输出低电平给下一个按键引脚输出低电平读取按键的韦根数据读取按键的韦根数据米字型米字型LED显示相应的数字或字符12个按键测试完?12个按键测试完?Y返回返回图4-9按键测试5系统调试单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统利用JLINK仿真器进行了在线调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。5.1软件调试本设计是利用Proteus软件进行调试的,完全用仿真软件在PC机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。经过多次修改程序最后调试出来理想的效果,用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以在PC机上开发和调试。调试和修改完毕后可以直接使用编程器将软件固化在目标系统ROM中,然后投入运行。5.2硬件调试单片机应用系统的硬件调试和软件调试是分不开的,许多硬件故障在软件调试时才能发现,但通常要先排除系统中明显的硬件故障。调试工作可以分为四步:线路检查:根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。电源调试:样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。调试的方法有两种:一种是断开样机稳压电源的输出端,检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载能力(用假负载)。确保电源无故障并性能符合设计要求。通电检查:在确保电源良好前提下,接通电源。最好在电源与其余电路之间串接一个电流表。若接通后电流很大,必须立即切断电源。电源大得超出正常范围,说明电路中有短路或故障。通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。检查芯片的逻辑关系是否出错:加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。硬件检测完毕后,使用JLINK仿真器连接PC和JTAG接口,下载程序和进行在线单步调试,使用JLINK仿真器可以通过硬件直观地看到每段代码的执行结果。本设计特点突出,性价比高,适合于工厂检测,有很高应用价值。结束语硬件系统关系到所要设计的电子产品好坏,如系统抗干扰性等,所以要合理地安排尽量减少干扰提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。软件设计是核心部分,具有多样化、灵活性高、易移植等优点,要深深理会各指令的含义才能更加熟练应用。低功耗处理是本设计的一大特色,当系统不工作时,进入停止模式节省功耗,需要运行时唤醒系统,进入正常工作模式开始工作。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。在这次设计中我学到了很多知识,包括软件方面的和硬件方面的。STM32F107VCT6这个芯片是我第一次使用,刚开始完全不知道怎么办,还好官方提供了不少例程,学习了一段时间了解了大概。在硬件设计上,每个芯片的电源端通常要加一个电容进行滤波,晶振的位置最好紧挨主芯片。画PCB时,要查清楚各元器件的封装,电源线要尽可能的粗些,PCB尽可能的紧凑和美观。致谢

参考文献[1]肖硕,荆刚,李莉娜等.单片机数据通信典型应用大全[M].北京:中国铁道出版社,2021[2]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2021[3]喻金钱,喻斌.STM32F系列ARMCortex-M3核微控制器开发与应用[M].北京:清华大学出版社,2021[4]谢宜仁.单片机实用技术问答[M].北京:人民邮电出版社,2021[5]房小翠,王金凤.单片机实用系统设计技术[M].北京:国防工业出版社,2021[6]何立民.单片机高级教程应用与设计[M].北京:北京航空航天大学出版社,2021[7]范书瑞.Cortex-M3嵌入式处理器原理与应用[M].西安:电子工业出版社,2021[8]姚文详.ARMCortex-M3权威指南[M].北京:北京航空航天大学出版社,2021[9]刘国荣.单片微型计算机技术[M].北京:机械工业出版社,1996[10]王迎旭.单片机原理与应用[M].北京:机械工业出版社,2021[11]刘军.例说STM32[M].北京:北京航空航天大学出版社,2021[12]高峰.单片微型计算机原理与接口技术[M].北京:科学出版社,2021[13]何宏.单片机原理与接口技术[M].北京:国防工业出版社,2021[14]杨西明,朱骐.单片机编程与应用入门[M].北京:机械工业出版社,2021[15]蒙博宇.STM32自学笔记[M].北京:北京航空航天大学出版社,2021[16]廖义奎.Cortex-M3之STM32嵌入式系统设计[M].北京:中国电力出版社,2021[17]李宁.ARMMCU开发工具MDK使用入门[M].北京:北京航空航天大学出版社,2021[18]杨刚.32位嵌入式系统与SoC设计导论[M].西安:电子工业出版社,2021[19]陈志旺.STM32嵌入式微控制器快速上手[M].西安:电子工业出版社,2021[20]JosephYiu.TheDefinitiveGuideToTheARMCortex-M3[M].California:InformationStorageDevices,2021附录附录1硬件电路图附录2PCB板附录3主程序源代码/****************************主文件***********************************//*Includes*/#include"stm32f10x.h"#include<stdio.h>/*Privatemacro*//*延迟时间*/#defineONESECONDS 25000000//1秒#defineSECONDS 100000000//4秒/*Privatevariables*/ErrorStatusHSEStartUpStatus;//HSE启动状态u8high=0,low=0;//高频卡和低频卡的标志u8temp=0;//韦根数据的位数u8buffer[35]; //存放韦根数据/*Privatefunctionprototypes*/voidSYSCLKConfig_STOP(void);//从停止模式唤醒后,配置系统时钟voidLED_config(void); //初始化FCT上4个LEDvoidstart_Int(void); //初始化开始键为中断模式voidMI_LED_config(void);//初始化FCT上米字LEDvoidMOTOR_config(void);//初始化FCT上电机引脚voidSW_config(void); //初始化6701选择引脚voidWG_config(void); //初始化韦根通信引脚voidGRB_config(void); //初始化绿色LED、红色LED、蜂鸣器响应的引脚voidKEY_config(void); //初始化按键voidOP1_config(void); //初始化防拆引脚voidFCT_test(void); //系统自检voidGRB_LED_test(void);//测试PCBA上的绿色LED、红色LED、蜂鸣器voidMotor_control(void);//控制电机voidWG_test(void); //检测高频卡和低频卡 voidKey_test(void);//按键测试(仅适用于6701)/*Privatefunctions*//**@brief延迟*/staticvoidDelay_ARMJISHU(__IOuint32_tnCount){for(;nCount!=0;nCount--);}/*@briefMainprogram*/intmain(void){LED_config();//初始化LED指示灯MI_LED_config();//初始化米字型LED指示灯MOTOR_config();//初始化电机OP1_config(); //防拆输入SW_config();//初始化6701选择键WG_config();//初始化韦根通信接口GRB_config(); //初始化绿色LED、红色LED、蜂鸣器KEY_config(); //初始化键盘FCT_test();//系统自检start_Int();//初始化开始键为中断模式/*激活PWR时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);while(1){ high=0;//刷高频卡标志 low=0;//刷低频卡标志 /*进入停止模式*/ PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI); /*从停止模式退出后,配置系统时钟*/SYSCLKConfig_STOP(); /*绿色LED、红色LED、蜂鸣器响应1秒*/ GRB_LED_test(); /*控制电机*/ Motor_control(); WG_test();//韦根测试 /*如果6701选择开关是高电平*/ if(GPIO_ReadInputDataBit(GPIO_SW_PORT,GPIO_SW)) { Key_test();//按键测试 }}}/**@brief将开始键设为中断*/voidstart_Int(void){ GPIO_InitTypeDefGPIO_InitStructure; EXTI_InitTypeDefEXTI_InitStructure; NVIC_InitTypeDefNVIC_InitStructure;/*设置中断向量表的起始地址0x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000);/*配置优先级组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /*激活按键时钟*/ RCC_APB2PeriphClockCmd(RCC_START|RCC_APB2Periph_AFIO,ENABLE); /*配置按键引脚为输入浮空*/ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin=GPIO_START;GPIO_Init(GPIO_START_PORT,&GPIO_InitStructure);/*外中断线与按键引脚相连*/GPIO_EXTILineConfig(GPIO_START_EXTI_PORT_SOURCE,GPIO_START_EXTI_PIN_SOURCE);/*配置外中断线*/EXTI_InitStructure.EXTI_Line=GPIO_START_EXTI_LINE;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/*激活和设置中断*/NVIC_InitStructure.NVIC_IRQChannel=GPIO_START_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}/**@brief配置控制电机的两个引脚*/voidMOTOR_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_MOTOR1|RCC_APB2Periph_AFIO,ENABLE);/*引脚配置*/GPIO_InitStructure.GPIO_Pin=GPIO_MOTOR1_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_MOTOR1_PORT,&GPIO_InitStructure);/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_MOTOR2|RCC_APB2Periph_AFIO,ENABLE);/*引脚配置*/GPIO_InitStructure.GPIO_Pin=GPIO_MOTOR2_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_MOTOR2_PORT,&GPIO_InitStructure);/*输出低电平*/GPIO_ResetBits(GPIO_MOTOR1_PORT,GPIO_MOTOR1_ALL);GPIO_ResetBits(GPIO_MOTOR2_PORT,GPIO_MOTOR2_ALL);}/**@brief配置6701选择键引脚*/voidSW_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_SW|RCC_APB2Periph_AFIO,ENABLE);/*引脚配置*/GPIO_InitStructure.GPIO_Pin=GPIO_SW;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;GPIO_Init(GPIO_SW_PORT,&GPIO_InitStructure);}/**@brief配置防拆状态接收引脚为输入上拉*/voidOP1_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_OP1|RCC_APB2Periph_AFIO,ENABLE);/*引脚配置*/GPIO_InitStructure.GPIO_Pin=GPIO_OP1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIO_OP1_PORT,&GPIO_InitStructure);}/*@brief韦根通信采用中断模式,将韦根通信的两个引脚设为中断模式,输入上拉*/voidWG_config(void){ GPIO_InitTypeDefGPIO_InitStructure; EXTI_InitTypeDefEXTI_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_WG|RCC_APB2Periph_AFIO,ENABLE); /*引脚配置为输入浮空*/ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin=GPIO_WG_ALL; GPIO_Init(GPIO_WG_PORT,&GPIO_InitStructure); /*将DATA0的外中断线连接到相应引脚*/ GPIO_EXTILineConfig(GPIO_DATA0_EXTI_PORT_SOURCE,GPIO_DATA0_EXTI_PIN_SOURCE); /*配置DATA0外中断线*/ EXTI_InitStructure.EXTI_Line=GPIO_DATA0_EXTI_LINE; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); /*开启和设置DATA0的外中断*/ NVIC_InitStructure.NVIC_IRQChannel=GPIO_DATA0_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure); /*将DATA1的外中断线连接到相应引脚*/ GPIO_EXTILineConfig(GPIO_DATA1_EXTI_PORT_SOURCE,GPIO_DATA1_EXTI_PIN_SOURCE); /*配置DATA01外中断线*/ EXTI_InitStructure.EXTI_Line=GPIO_DATA1_EXTI_LINE; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); /*启和设置DATA1的外中断*/ NVIC_InitStructure.NVIC_IRQChannel=GPIO_DATA1_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);}/**@brief工作状态指示灯4个LED引脚设为输出*/voidLED_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_LED|RCC_APB2Periph_AFIO,ENABLE);//RCC_APB2Periph_AFIO/*配置引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_LED_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_LED_PORT,&GPIO_InitStructure);GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);}/**@brief绿色LED、红色LED、蜂鸣器引脚设为输出*/voidGRB_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_GRB|RCC_APB2Periph_AFIO,ENABLE);/*配置引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_GRB_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_GRB_PORT,&GPIO_InitStructure);GPIO_ResetBits(GPIO_GRB_PORT,GPIO_GRB_ALL);}/**@brief进行按键测试的引脚设为输出*/voidKEY_config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启端口A时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_KEY1|RCC_APB2Periph_AFIO,ENABLE);/*配置引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_KEY1_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_KEY1_PORT,&GPIO_InitStructure);/*开启端口C时钟*/RCC_APB2PeriphClockCmd(RCC_GPIO_KEY2,ENABLE);/*配置引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_KEY2_ALL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_KEY2_PORT,&GPIO_InitStructure);GPIO_ResetBits(GPIO_KEY1_PORT,GPIO_KEY1_ALL);GPIO_ResetBits(GPIO_KEY2_PORT,GPIO_KEY2_ALL);GPIO_ResetBits(GPIO_KEY3_PORT,GPIO_KEY3_ALL);GPIO_ResetBits(GPIO_KEY4_PORT,GPIO_KEY4_ALL);}/**@brief系统自检*/voidFCT_test(void){ Led_Turn_on(0); //4个LED亮 Mi_Turn_on(0); //米字LED亮Delay_ARMJISHU(ONESECONDS);//延迟1秒Led_Turn_off(0);//4个LED灭 Mi_Turn_off(); //米字LED灭}/**@brief绿色LED、红色LED、蜂鸣器响应1秒*/voidGRB_LED_test(void){ GPIO_SetBits(GPIO_GRB_PORT,GPIO_GLED); //绿色LED亮 GPIO_SetBits(GPIO_GRB_PORT,GPIO_RLED); //红色LED亮GPIO_SetBits(GPIO_GRB_PORT,GPIO_BEEP); //蜂鸣器响 Delay_ARMJISHU(ONESECONDS);//延迟1秒 GPIO_ResetBits(GPIO_GRB_PORT,GPIO_GLED);//绿色LED灭 GPIO_ResetBits(GPIO_GRB_PORT,GPIO_RLED);//红色LED灭GPIO_ResetBits(GPIO_GRB_PORT,GPIO_BEEP);//蜂鸣器不响}/**@brief控制电机正转4秒,反转4秒*/voidMotor_control(void){ GPIO_SetBits(GPIO_MOTOR1_PORT,MOTOR_A);//A为高电平 GPIO_ResetBits(GPIO_MOTOR2_PORT,MOTOR_B);//B为低电平 Delay_ARMJISHU(SECONDS);//延迟 GPIO_ResetBits(GPIO_MOTOR1_PORT,MOTOR_A);//A为低电平 GPIO_ResetBits(GPIO_MOTOR2_PORT,MOTOR_B);//B为低电平 if(!GPIO_ReadInputDataBit(GPIO_OP1_PORT,GPIO_OP1)) Led_Turn_on(3); Delay_ARMJISHU(ONESECONDS);//延迟1秒 GPIO_ResetBits(GPIO_MOTOR1_PORT,MOTOR_A);//A为低电平 GPIO_SetBits(GPIO_MOTOR2_PORT,MOTOR_B);//B为高电平 Delay_ARMJISHU(SECONDS);//延迟 if(GPIO_ReadInputDataBit(GPIO_OP1_PORT,GPIO_OP1)) Led_Turn_off(3); GPIO_ResetBits(GPIO_MOTOR1_PORT,MOTOR_A);//A为低电平 GPIO_ResetBits(GPIO_MOTOR2_PORT,MOTOR_B);//B为低电平}/**@brief检测26位韦根数据*/u8check26(u8buf[]){u8i,j,even=0,odd=1;for(j=1;j<13;j++){if(buf[j]==1)even=(~even)&0x01;}if(even!=buf[0])return0;odd=1;for(i=13;i<25;i++){if(buf[i]==1)

温馨提示

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

评论

0/150

提交评论