1、沈阳理工大学学士学位论文摘 要近年来,掌上游戏机一直非常火爆。从较早的gameboy到现在高端的psp,掌上游戏机一直备受人们青睐。现在嵌入式行业发展很快,微控制器的性能也越来越强大,也使得制作一台掌上游戏机难度降低。基于此本设计基于STM32芯片设计了一款掌上游戏机。主要设计内容包括游戏机的硬件和软件设计。主要的应用模块和电路包括STM32核心电路、TFTLCD显示屏、陀螺仪(加速度计)传感器、独立按键、USB转串口芯片等。本设计的一个特点就是可以下载程序到STM32芯片中,所以这款掌上游戏机也是一个STM32的开发板,使用者可以使用该系统自行开发游戏和学习单片机的使用。本设计制作完成,经过
2、多次试验测试,系统正常工作,娱乐性较高。关键词:STM32;掌上游戏机;开发板IAbstractIn recent years, handheld game has been very popular. Gameboy from an earlier end to the current psp, handheld game has attracted people of all ages. Now embedded industry developed rapidly, the performance of the microcontroller more powerful, but als
3、o makes the production of a handheld video game to reduce the difficulty.The design is based on the STM32 chip based on the design of a handheld game. The main design elements including Game hardware and software design. The main application modules, and circuits including STM32 core circuit, TFTLCD
4、 display, gyroscope (accelerometers) sensor, separate buttons, USB to serial chip like. One feature of this design is that you can download to STM32 chip, so this is a handheld game console STM32 development board, the user can use the system self-developed games and learning microcontrollers. The d
5、esign is completed, after several trials testing, the system is working properly, entertaining high.Key words:STM32;Handheld game; development boardII目录1 绪论11.1 设计背景11.2 设计意义11.3 国内外研究现状21.4 本设计所做工作31.5 本章小结32 系统方案设计42.1 系统结构框图42.2 系统主控芯片介绍42.3 显示屏介绍62.4 操作方式介绍92.5 下载模块设计102.6 本章小结113 系统硬件设计123.1 ST
6、M32核心电路123.2 LCD显示模块电路133.3 按键电路143.4 陀螺仪接口电路153.5 程序下载电路163.6 供电电路183.7 系统电路原理图与PCB193.8 本章小结194 系统软件设计204.1 keil开发环境介绍204.2 主程序设计204.3 中断程序设计224.4 游戏程序设计234.5 输入信号检测程序设计244.6 本章小结255 系统调试与功能测试265.1 系统调试265.1.1 硬件检测265.1.2 软件调试265.2 系统功能测试275.2.1 测试步骤275.2.2 测试结果295.3 本章小结316 结论与展望326.1 结论326.2 展望3
7、27 致谢33参考文献34附录A:英文原文35附录B:中文翻译42附录C:原理图和PCB48V1 绪论1.1 设计背景近年来,社会发展十分迅速,我国的经济、科技等各领域都发展非常快,特别是以计算机技术、软件、通信等为核心的高新技术产业取得了十分迅速的发展。随着手机、电脑等各种智能产品产业的腾飞,嵌入式系统也深入到我们日常生活的方方面面。不仅仅是在日常生活当中我们离不开嵌入式产品,在工业、农业等各个领域都需要嵌入式产品的支持,嵌入式系统为人们的生活带来便捷,为工业、农业等生产提高效率1。嵌入式行业的兴起也带动了软件行业的发展,因为一个完整的嵌入式系统离不开硬件和软件的结合。单片机系统也属于嵌入式
8、系统中的一种,它因为可靠性高、成本低、功能强大等因素,被广泛应用在工业、农业以及我们的日常生活之中。单片机不仅可以开发工业类产品,也经常用于开发消费类的电子产品,如电子表、MP3、MP4、掌上游戏机等等。如今掌上游戏机非常盛行,从繁华的城市到宁静的乡村,从成年人到小孩,都喜爱玩游戏机。游戏机带给人们成功的兴奋和失败懊恼,给人们一种现实生活无法满足的奇妙体验。除了顺应嵌入式开发热门的潮流和游戏机热门潮流以外,开发此游戏机还有以下几点原因:1.当下城市中的人们生活节奏快,压力大,需要通过游戏等娱乐方式来消遣。而此款游戏机设计成可以玩一些经典的小游戏,让人们在怀旧中体验游戏的乐趣。2.此游戏机也被设
9、计成小型的开发板,而且硬件软件等资源将会在设计完成后开源,所有人都可以自己开发游戏,可以利用此游戏机学习嵌入式开发,可谓寓教于乐。结合上述几点,我认为此项目有着巨大发展潜力。1.2 设计意义掌上游戏机诞生于上世纪80年代,最早的掌机系列是由Mattel公司推出的掌机系列,但是真正意义上的掌上游戏机室任天堂的Game&Watch系列。Game&Watch系列掌机把游戏的乐趣带到了广大的玩家身边。它也是第一款只有手掌大小的游戏机。从此以后,各个游戏硬件公司都相继推出了自己的掌上游戏机。由于掌上游戏机的硬件、软件速度发展十分迅速,所以游戏的趣味性和掌机的可玩性也得到大幅度提升。掌上游戏机一度成为游戏
10、界的热门。由于现代半导体技术飞速发展,所以现在的处理器更新速度非常快。从早期的51单片机到现在的高级ARM处理器,微控制器从8位发展到32、64位,主频也从几MHz到现在的几GHz。现如今在微处理器领域,Cortex-M3内核芯片是最常用的一个系列。这种芯片性能较51内核单片机有大幅度的提升,外围的器件也十分丰富,但是价格却和8位单片机相差不多。所以现在的微控制器使用最多的就是Cortex-M3系列的芯片。所以,对于这种芯片的使用是现在电子类学生和从事电子行业的人员必须掌握的技能。本设计是采用Cortex-M3内核芯片-STM32作为主控设计了一款掌上游戏机。该掌上游戏机可以玩一些经典的游戏,
11、十分富有趣味性。本设计最大的特点是掌上游戏机可以作为STM32芯片的开发板使用,并且软件、硬件全部开源。所有的使用者不仅可以体验到掌上游戏的乐趣,也可以把它当做学习编程和STM32芯片的一款开发板。并且使用者可以自行开发游戏并下载到此游戏机中运行。所以,本设计不仅能让使用者体验到游戏的乐趣,放松身心,而且寓教于乐,可以使得使用者学习到专业的知识。可以说趣味性和实用性并存,十分具有现实意义和研究价值。1.3 国内外研究现状在电子方面,发达国家比国内起步早,技术更加先进,更加高度产业化。所以电子产品如掌上游戏机也是国外的较多较发达一点。国内市场上的掌上游戏机品牌众多,品质参差不齐。有众多的仿制国外
12、的PSP、3DS等知名产品的游戏机出现,但是其产品不是开源的。国内基于单片机的开源硬件可以说非常之多,基本上涉及到了8、16、32位的单片机。但是也没有以掌上游戏机作为开源硬件平台的。可以说国内的掌上游戏开源的硬件市场还是一片空白。国外的开源掌上游戏机也屈指可数,WIZ是韩国GAME PARK Holdings公司于2009年推出的开源掌机,除了官方游戏,玩家都可以开发自制软件或游戏,还能放上专属平台让人下载。Wiz整合了NDS跟PSP的功能,2.8寸触控屏幕,可听MP3、看AVi格式视频,内置1GB NAND Flash、支援SD卡,具备3D加速、533MHz的CPU。Arduboy是由一位
13、国外玩家开发的8位掌上游戏机,只有信用卡大小,厚度仅有5毫米,一块OLED黑白显示屏、六个按键、两个扬声器、金属材质的外壳,续航可以达到8小时。它是基于arduino的产品。现在是国外比较火爆的一个掌上游戏开源硬件。1.4 本设计所做工作对于基于STM32的掌上游戏开源硬件的设计的设计这一课题,主要做了以下工作:(1)深入调查掌上游戏机的和开源硬件的市场现状及发展前景和国内外研究现状。(2)熟练掌握STM32的应用和开发。包括熟STM32芯片的I/O口,定时器,中断等知识。(3)根据设计要求选择合适的显示屏、外围芯片的器件。(4)完成硬件电路原理图设计和PCB图的绘制,并且正确搭建硬件电路。(
14、5)完成软件系统的C语言程序编写。(6)对系统进行测试与分析,根据测试结果对系统软硬件进行相应的调整,使之达到设计要求 。(7)撰写论文。 1.5 本章小结本章节主要是说明设计的背景和意义,以及研究的内容。首先,结合现实分析了掌上游戏机产生和发展的社会背景。其次,结合实际以及本设计的目标阐述了本设计的现实意义。然后,阐述了国内外的同类的研究的成果,并且简单预测了一下掌上游戏机的未来发展趋势。最后,阐述本论文的研究的主要内容和所需要做的主要工作。512 系统方案设计2.1 系统结构框图本设计主要以STM32F103系列微控制器作为主要控制单元,以LCD显示屏、陀螺仪/加速度计模块、按键和USB转
15、串口芯片为主要应用,实现了一款简单的掌上游戏机的功能。陀螺仪(加速度计)和按键作为信号输入端,人通过重力感应或者按键输入来想系统发送控制信息。STM32接收控制信息并处理,运行游戏核心代码和算法,并控制LCD显示屏显示相应的游侠效果。USB转串口芯片和主控芯片自带的串口组成了下载模块,可以实现烧录程序的功能,所以本设计又可以作为一块STM32开发板使用。下面是本设计的系统结构框图。陀螺仪/加速度计计STM32主控芯片LCD显示屏 按键下载模块图2.1 系统结构框图2.2 系统主控芯片介绍STM32F103系列芯片是ST公司推出的新型的低功耗的32位微处理器。STM32F103的工作主频是72M
16、Hz,有数十K的片内RAM和众多的硬件通信接口和其他的外围设备6。STM32是基于ARM公司的Cortex-M3内核的一款芯片,它的处理性能相对于8位和16位的微控制器有着巨大的提升,但是功耗和成本却提升很小。STM32一般用在控制领域,能处理较为复杂的运算,丰富的外围设备为其提供了很好的控制能力和联接能力5。STM32F103系列处理器也有着不同的型号和规格。但是不同型号的芯片软件、外设有着极高的兼容性,这也为其应用带来更好的灵活性和便捷性。可以在不修改上层和中间层软件的情况下,仅仅修改下底层引脚、外围设备的初始化就可以实现不同型号的处理器的更换,或者改用不同的封装规格【7】。在stm32f
17、103系列处理器中,stm32fl03zet6信号的处理器十分符合本设计的要求。该型号的处理器的特点如下:(1)宽电源电压输入,电源电压的范围时2.0-3.6V;(2)低功耗模式有:睡眠模式、停机模式和待机模式;(3)内部集成一个12位的AD转换器,拥有16个转换通道,1us转换时间;(4)可以使用SWD和JTAG接口对程序进行调试;(5)有多达7个通道的DMA控制器,DMA支持的外设有定时器、ADC、IIC、SPI和UART;(6)IO口数量较多,可以和5V器件兼容;(7)所有的IO口都可以映像到外部中断;(8)有多个定时器,定时器可以设置产生PWM信号;(9)有多个硬件通信接口:2个IIC
18、硬件接口,3个串口、2个高速的SPI接口;(10)带有USB2.0接口。【4】正是因为stm32的这些特性,使得这款处理器十分符合嵌入式控制的要求,也十分符合本设计的控制要求。不仅如此,ST公司还专门为stm32系列处理器开发了相应的库函数,使得使用stm32的开发人员不用去操作底层的寄存器,大大加快了开发的进度。,节省了开发人员的时间【5】。所以本设计的主控芯片就是选择stm32f103zet6型号处理器,改型号处理器有多种封装,为了焊接方便,本设计选用的封装形式为LQFP封装形式,如图2.2所示:图2.2 STM32芯片引脚图2.3 显示屏介绍本设计中选用的显示屏幕是一款通用的TFTLCD
19、模块,采用LCD模块和钢化外屏组成,质量好,便于开发,该模块有如下特点:1. 2.8寸显示屏,显示区域为57.6mm*47.2mm。2. 分辨率高,为320240分辨率。3. 3.3V工作电压。4. 16位8080/6080并口接口方式。5. 16位色(65K)显示支持。6. 钢化玻璃外屏,坚固耐用。7. 采用排针将接口扩展出,接口通用,方便开发。TFTLCD显示屏模块实物图如图2.3所示。图2.3 TFTLCD显示屏模块实物图该驱动器具有26万色像素显示的能力。整个的芯片组成包括源极驱动器和栅极驱动器,一个用于显示图形的17K字节的GRAM。ILI9341支持多种数据总线的MCU接口,包括8
20、、9、16、18位数据总线格式,支持RGB接口和SPI接口。由于ILI9341是封装在LCD显示屏中,所以只要关注LCD的引脚定义。ILI9341为和MCU接口提供了引脚IM3:0来控制,该引脚和接口选择的对应关系如表所示。表2.1 LCD显示屏接口方式配置表IM3IM2IM1IM0MCU接口模式00008080并口8位数据总线接口I00018080并口16位数据总线接口I00108080并口9位数据总线接口I00118080并口18位数据总线接口I01013线9位SPI接口I01104线8位SPI接口10008080并口16位数据总线接口II10018080并口8位数据总线接口II10108
21、080并口18位数据总线接口II10118080并口9位数据总线接口II11013线9位SPI接口II11104线8位SPI接口II本设计TFTLCD模块选用的是16位的8080并口方式与MCU连接,之所以使用16位的方式,是因为彩屏的数据量较大,8位数据口传输数据的速度较慢,大约是16位方式速度的二分之一以下,所以为了提高彩屏刷新的速度,本设计使用的是8080并口的16位的接口【2】。模块的8080并口读写数据或者命令的过程为:1. .根据要读写的信号类型来设置RS引脚的电平,高电平(数据),低电平(命令)。2. 拉低CS片选信号,选中ILI9341。3. 根据是要读数据还是写数据来相应的置
22、RD/WR为低电平。4. 在RD或者是WR的上升沿将数据锁存起来5。ILI9341的8080并口的写时序如图2.4所示:图2.4 ILI9341的8080并口写时序ILI9341的8080并口的读时序如图2.5所示:图2.5 ILI9341的8080并口读时序TFTLCD的复位引脚直接连接到STM32的复位引脚上面,这样当系统上电的时候,TFTLCD的控制芯片ILI9341就会和STM32一起被复位了。2.4 操作方式介绍本设计考虑到游戏机的可玩性和玩家的游戏体验,设计了两种不同的操作游戏的方式。一种是常见的按键模式,另外一种是可玩性较高的重力感应模式。首先介绍常见的按键模式。本设计中总共设计
23、了9个按键,这9个按键按照功能可以分为方向按键、游戏按键、功能按键三类。其中方向按键为4个,分别是控制上、下、左、右的按键。游戏按键为2个,功能根据不同的游戏而不同。功能按键为3个,这3个按键主要的功能就是在菜单选择中,选择游戏模式和开始游戏。本设计选用的按键是常用的轻触按键,规格为6mm6mm5mm的4脚轻触按键。这种按键的优点是体积小、机械性能好【10】。下面是按键的实物图。图2.6 按键实物图本设计中重力感应功能是通过运用陀螺仪(加速度计)来实现的。使用的陀螺仪(加速度计)传感器型号是MPU6050。这款传感器模块是三轴陀螺仪和三轴加速度计融合的一款集成型传感器模块。模块内部采用低压差稳
24、压芯片,使得模块供电电压范围更加宽泛(3V-5V)。模块采用标准的IIC通信协议,芯片内置16位的AD转换器,16位数据输出,精度较高。陀螺仪范围可以软件配置为:250/s、500/s、1000/s、2000/s。加速度范围也可以通过软件配置为以下的精度:2g、4g、8g、16g。下面是mpu6050模块实物图。【1】图2.7 MPU6050实物图2.5 下载模块设计本设计的设计目标不仅仅是一个掌上游戏机,更重要的功能是作为一个开源硬件供使用者开发游戏和学习编程。所以本设计中设计了程序下载的功能。考虑到硬件的尺寸等因素,程序下载的方式是通过串口下载。串口下载程序需要使用USB转串口芯片来实现P
25、C机与STM32芯片串口的通信。本设计使用的USB转串口芯片是CH340。这款芯片具有以下特点:1. 外围器件需要少,只需要晶振和少量电容。2. 全速USB设备接口,兼容USB2.0。3. 硬件全双工串口,波特率支持范围50bps-2Mbps。4. 宽电源电压:3.0-5.5V。5. 具有多种封装。下面是ch340g芯片的实物图。图2.8 ch340g芯片实物图2.6 本章小结本章节主要是说明设计的方案和选用的主要器件的介绍。首先,根据设计要求确定系统的硬件框图,表明了各个硬件模块之间的联系和功能。其次,在系统框图的结构下,选择合适的符合设计要求的功能模块和芯片,并对这些功能模块和芯片进行简单
26、介绍。首先介绍的是本设计的主控芯片STM32,介绍了该芯片的主要的特点,并说明选择该芯片做为设计系统主控的理由。其次,介绍了系统的显示模块-LCD显示屏。说明了显示屏幕驱动芯片的主要的特性及其和主控芯片的通信的方式。然后,介绍了本设计中两种操作方式的设计以及选用的器件的特点。本设计的操作方式分为按键操作和重力感应操作两种,并分别对选用的按键和mpu6050传感器模块作了简单的介绍。最后,介绍了本系统下载程序的模块的设计方案。重点介绍了USB转串口芯片的特点。3 系统硬件设计3.1 STM32核心电路STM32核心电路中包括STM32芯片与扩展的接口、晶振电路、手动/自动复位电路。其电路原理图如
27、图3.1所示。图3.1 STM32核心电路原理图(1)扩展接口由于STM32芯片引脚较多,本设计中使用的只是其中的一部分,如果需要外接其他器件进行功能测试,则需要用到扩展 接口。通过扩展接口可以使用芯片的IO口、IIC接口、SPI接口、AD/DA转换接口等等芯片外围设备。这些扩展接口可以使用杜邦线和其他的功能模块进行连接,从而达到测试和使用其他功能模块的功能。(2)晶振电路STM32的OSCIN、OSCOUT引脚连接一个频率为8MHz的晶振,晶振两端分别连接一个20pf的电容,电容另一端接地。这个8M晶振作为芯片的主要的时钟来源,为芯片内部定时器、IO口等等提供精准的时钟。另外OSC32两个引
28、脚连接一个频率为32.768KHz的晶振,晶振两端也分别连接一个20pf的电容,电容另一端接地。这个晶振是为芯片内部的实时时钟模块(RTC)提供时钟输入的。设计中,晶振两端的电容的取值是十分重要的,晶振两端的电容的值如果太小,电路虽然容易起振,但是不稳定;如果电容值取的过大,虽然稳定,但是不容易起振。所以本设计选择了一个比较合适的值。这样就构成了STM32核心电路中的晶振电路。(3)复位电路设计中采用上电自复位与手动复位电路。复位电路的原理是STM32的RESET引脚接收到一小段时间的低电平电平信号,单片机就会复位。而本设计使用的STM32复位需要RESET引脚被拉低至少300ns,所以只要电
29、容的充放电时间比300ns要长,那么整个单片机就可以实现复位的功能。电路中的电容值是可以改变的。那么这里我们使用常用的10uf和10K电阻的组合。根据上图电路制作的复位电路,在系统上电时,单片机将被复位,如果按下按键,单片机也将被复位。由于人操作的速度不是很快,所以按下按键的时间理论上会大于300ns,所以在按下按键后,系统将复位。3.2 LCD显示模块电路TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接,接口定义如图3.2所示。图3.2 TFTLCD模块电路原理图从上图中可以看出,TFTLCD模块采用16位并口方式和STM32芯片相连接。该模块的16位的8080并口的有如下的
30、信号线:CS:LCD显示屏片选信号。WR:向LCD显示屏写入数据标志信号。RD:从LCD显示屏读出数据标志信号。D1515:0:16位数据信号线。RST:硬件复位引脚。RS:命令/数据选择标志(0:命令、1:数据)。为了节省主控芯片的IO口,将模块的RST引脚直接连接到STM32的RESET引脚上,这样当系统上电的时候,TFTLCD模块会被硬件复位。另外还需要一个IO口来控制模块的背光。所以,总共需要21个IO口来控制TFTLCD模块。需要注意的是,上图标注的DB1-DB8、DB10-DB17,是相对于 LCD 控制 IC 标注的,实际上可以把它们就等同于 D0D15(按从小到大顺序)4。通过
31、这16位的8080并口和其它几个控制端口,就可以实现主控芯片和TFTLCD驱动IC的通信了。主控芯片通过向驱动IC发送命令,可以设置驱动IC 的相应的寄存器,从而设置TFTLCD显示屏的相关参数。通过向驱动IC发送相应的命令和数据,可以使得显示屏显示相应的图案或者字符。3.3 按键电路如图3.3所示为键盘模块的电路原理图。图3.3 键盘模块原理图本设计中总共有9个按键,分别是3个功能选择按键(WK_UP、KEY0、KEY1),4个游戏方向按键,(KEY_UP、KEY_DW、KEY_R、KEY_L)和2个游戏功能按键(KEY_P1、KEY_P2)。WK_UP按键连接的是芯片的PA0口,按键另外一
32、端连接的3.3V电源正极,所以当WK_UP按键按下的时候,PA0口检测到的是高电平。其它的按键一端连接的主控芯片的IO口上,另外一端连接到电源地,所以这些按键按下的时候,相应的IO口检测到低电平。独立式键盘的组成是通过多个按键直接与主控芯片的IO口对应连接,程序扫描读取各个单片机串口的电平状态,通过单片机对相应端口电平的识别确定按键开关的闭合,一个按键只能对应一个单片机端口,但可以通过程序控制来实现一个按键对应多个功能。3.4 陀螺仪接口电路陀螺仪接口电路原理图如图3.4所示。图3.4 陀螺仪接口电路原理图由原理图可知,该模块总共有8个引脚,但是本设计中使用的是该模块的IIC总线接口来进行数据
33、的传输,所以只需要使用到模块的SDA、SCL、VVC和GND这4个引脚。SDA是IIC总线的数据线,SCL是IIC总线的时钟线。这两根线都通过一个4.7K的定值电阻连接到系统的3.3V电源上去,即外加上拉电阻,这样可以使得在总线空闲的时候,SDA和SCL的电平都是高电平,符合IIC协议传输的规范。MPU6050模块通过IIC总线和主控芯片传输数据。主控芯片向MPU6050模块传输相应的命令和数据,设置MPU6050内部集成的寄存器,MPU6050自动将得出的原始数据传输给主控芯片。3.5 程序下载电路程序下载电路原理图如图3.5所示。图3.5 程序下载电路原理图STM32 的程序下载有多种方法
34、: USB、串口、 JTAG、 SWD 等,这几种方式,都可以用来给 STM32 下载代码【2】。不过,其中最常用的,最经济的,就是通过串口给 STM32 下载代码。上图就是USB转串口模块的原理图,而USB转串口模块就是使用串口方式给STM32下载程序的硬件电路。STM32 的串口下载一般是通过串口 1 下载的,本设计不是通过 RS232 串口下载的,而是通过自带的 USB 串口来下载。看起来像是 USB 下载(只需一根 USB 线,并不需要串口线)的,实际上,是通过 USB 转成串口,然后再下载的。既然功能是将USB转串口,那么就必须用到USB转串口芯片了。本设计选用的USB转串口芯片是c
35、h340g,该芯片封装形式为SOP-16,下面对其引脚进行说明。表3.1 ch340g引脚说明表编号引脚名称类型说明1GND电源公共接地端,直接连到 USB 总线的地线2TXD输出串行数据输出3RXD输入串行数据输入,内置可控的上拉和下拉电阻4V3电源在 3.3V 电源电压时连接 VCC 输入外部电源,5UD+USB信号直接连到USB总线的D+数据线6UD-USB信号直接连到 USB 总线的 D-数据线7X1输入晶体振荡的输入端,需要外接晶体及振荡电容8X0输出晶体振荡的反相输出端,需要外接晶体及振荡电容9CTS#输入MODEM 联络输入信号,清除发送,低(高)有效10DSR#输入MODEM
36、联络输入信号,数据装置就绪,低(高)有效11RI#输入MODEM 联络输入信号,振铃指示,低(高)有效12DCD#输入MODEM 联络输入信号,载波检测,低(高)有效13DTR#输出MODEM 联络输出信号,数据终端就绪,低(高)有效14RTS#输出MODEM 联络输出信号,请求发送,低(高)有效15R232输入辅助 RS232 使能,高电平有效,内置下拉电阻16VCC电源正电源输入端由于STM32下载程序时需要选择启动模式。STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存=芯片内置的Flash。2)SRAM=芯片内置的RAM区,就是内存啦。3)系统存储器在每个STM3
37、2的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序:BOOT1=xBOOT0=0从用户闪存启动,这是正常的工作模式。BOOT1=0BOOT0=1从系统存储器启动,这种模式启动的程序功能由厂家设置。BOOT1=1BOOT0=1从内置SRAM启动,这种模式可以用于调试。【2】所以在选择使用串口下载程序的时候,需要设置BOOT引脚。在上面的电路图中,通过一个S8550三极管和一个S8050三极管来实现对BOOT引脚的自动设置。当DTR#引脚置为高电平时,三极管Q2导通,如果此时RESET引脚拉低(系统复位),则三极管Q1导通,BOOT
38、0连接到高电平。这样就可以实现从系统存储器启动,从而下载程序到系统存储器中。3.6 供电电路系统的供电电路原理图如图3.6所示。图3.6 供电电路原理图供电电路选用了两个Mini USB母座作为电源输入的接口。其中一个Mini USB母座的D+、D-引脚连接的USB转串口芯片的数据输入输出口,另外一个连接的STM32的USB引脚。两个Mini USB母座的VCC引脚都连接到自锁开关的一端,自锁开关的另外一端连接到稳压芯片的输入端口。这样,当自锁按键接通时,USB口的VCC通过稳压芯片给系统供电。稳压芯片的型号为常用的asm1117-3.3,输入端如果是5V,那么输出端是稳定的3.3v,正好为主
39、控芯片以及其他的器件供电。在稳压芯片的输入端和输出端,都连接了电容。电容在此电路中的作用是滤波,防止电源电压偶然发生抖动从而影响系统的正常工作。另外还接出了几个排针接口,方便为扩展的其他的功能模块供电。在USB母座的电源地一端,串联了一个500ma的自恢复保险丝,这样当系统中有短路发生,电流急剧增大,自恢复保险丝会自动切断电路,防止烧坏系统中的芯片。3.7 系统电路原理图与PCBAltium Designer是电子工程师与电子专业学生等电子行业人士常用的EDA软件。它是由原Protel软件开发公司Altium公司开发的新的电子产品的开发系统。该软件功能强大,具有原理图设计、PCB绘制、电路仿真
40、、信号完整性分析、拓扑逻辑自动布线和设计输出等功能8。根据设计要求与实际的情况,本设计采用Altium Designer软件绘制系统硬件电路的原理图和PCB图,如附录C所示。3.8 本章小结本章分模块介绍了基于stm32的掌上游戏开源硬件的设计实现原理及方案。首先,介绍了STM32核心电路的设计,给出了核心电路的原理图,并分析了核心电路中各个电路的功能。其次介绍了LCD显示屏的接口电路,介绍了接口的各个引脚的功能。然后介绍了按键电路和陀螺仪电路的设计过程和原理。其次介绍了下载电路的设计,重点介绍了USB转串口芯片的引脚功能和电路设计的细节。最后介绍了系统的供电电路的设计过程和思路。最后,简单介
41、绍了绘制原理图的软件工具Altium Designer,并且展示了系统的电路原理图和PCB图。4 系统软件设计4.1 keil开发环境介绍Keil公司是一家先进的MCU软件工具开发厂商。该公司由两家国外的先进的软件开发公司共同组成。这两家公司联合运营,共同开发了一系列的开发工具。其中包括实时操作系统核心、C编译器等。该公司开发的KEIL系列微控制器开发软件功能强大,集成度高。本设计使用的就是KEILuVision5集成开发环境。它能够在Windows系统下流畅运行,有可视化的操作界面,并且提供了众多的编译工具,还包含了丰富的库函数,使得我们单片机的开发更为便捷3。该集成开发环境优秀,受到单片机
42、设计者的广泛使用。其Keil ARM编译器受到众多的单片机的开发者的青睐,其可以支持几百种系列单片机。本系统软件设计全部在 Keil uVision5集成开发环境下编写、调试,并且编译成功。4.2 主程序设计系统以TFTLCD显示屏、陀螺仪/加速度计模块、按键模块、USB转串口模块为主要应用,实现了掌上游戏机及STM32开发板的功能。系统软件主要的功能是对各个功能模块进行初始化,配置相应的寄存器、设置相关的参数使得各个功能模块能够正常工作。首先显示系统界面,等待选择游戏操作模式和开始按键按下。游戏开始按键按下后,然后进行游戏初始化,初始化完毕游戏开始运行。同时采集输入的信号,根据输入的信号来操
43、作游戏运行。由于系统的功能不是特别复杂,没有特别多的功能模块和需要同时循环执行的功能代码,所以本系统软件的架构是采用简单的前后台的架构。前后台的结构是单片机编程中比较常用的一种架构,这种架构适合于简单的且实时性要求不高的系统。这种架构的优点是编程简单、结构清晰明了等,缺点是不能做复杂的浮点计算等占用COU时间较长的功能,因为那可能会导致系统反应变慢。所以本系统软件采用前后台架构十分符合本设计要求3。系统软件主函数程序如下所示。/主函数int main(void) Stm32_Clock_Init(16);/系统时钟设置 uart_init(72,9600); /串口初始化为9600 delay
44、_init(148); /延时初始化 LED_Init(); /初始化与LED连接的硬件接口 KEY_Init(); /初始化与按键连接的硬件接口 LCD_Init(); TIM3_Int_Init(1000,719);/定时 MPU_Init(); /初始化MPU6050 mpu_dmp_init();/初始化MPU6050 KEY_Menu_Init(); /板子上的按键初始化 Disply_Menu(); /显示开始菜单界面 GAME_START=1; LCD_Clear(BLACK); Init_SNAKE(); /贪吃蛇初始化 while(1) Run_SNAKE(); Key_Va
45、lue=key_detector(Play_Type); 系统主函数流程图如图4.1所示。图4.1 主程序流程图4.3 中断程序设计定时器中断的频率约为10ms中断一次,在中断程序中主要实现的功能是获取陀螺仪/加速度计的数据和控制游戏的进度,以及产生随机数。在系统初始化的时候,当系统初始化成功之后,会将一个开始标志位置1,在中断函数中首先对这个标志位进行判断,如果其为1,则运行上述的功能代码,否则,不运行。这样做的好处是当定时器初始化成功之后,如果其它的功能模块没有初始化成功,则在中断服务函数中不会做任何事情。只有系统全部初始化完成,才开始运行游戏,推进游戏进度和获取外部输入信号。整个中断服务
46、函数的流程是首先对开始标志位判断,如果是1,则获取一次MPU6050的数据,其次将游戏进度标志自减1,然后产生随机数,对游戏标志位判断,保证游戏标志位大于等于0,最后清除中断标志位,退出中断服务函数。定时器中断服务函数流程图如图4.2所示。图4.2 中断程序流程图4.4 游戏程序设计由于时间等因素,本设计中游戏只设计了一个贪吃蛇游戏。这个贪吃蛇游戏共有20个关卡,可以通过重力感应和按键两种操作方式来实现游戏的控制。贪吃蛇游戏的流程大致是首先绘制游戏界面,然后对输入的方向进行判断,根据输入的方向数据来移动蛇身,在蛇身移动后,判断蛇是否死亡,如果死亡,则重新开始。如果蛇没有死亡,则判断是否吃到食物,如果