基于stm32的数码相框设计与实现_第1页
基于stm32的数码相框设计与实现_第2页
基于stm32的数码相框设计与实现_第3页
基于stm32的数码相框设计与实现_第4页
基于stm32的数码相框设计与实现_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

基于STM32的数码相框设计与实现摘要嵌入式系统是当前最有发展前途的IT应用领域之一,近年来数字摄影业的兴起带动了嵌入式产品数码相框的发展。本设计是一款基于ARMCORTEXM3内核的STM32嵌入式硬件平台设计的数码相框,主要优势是应用了STM32杰出的功耗控制和极低的开发成本、超多的外设等特点。设计主要本设计是一款基于包括主控制器核心板、LCD液晶显示、SD卡存储器等多个功能模块。开发过程大致为在PC机WIN7系统中使用RVMDK380版本的编译器撰写工程代码,之后通过MCUISP串口下载软件将编译器编译生成HEX下载到开发板内,最终实现通过FAT文件系统读取SD卡内存储的BMP、JPEG、JPG格式图片,把多幅图片以幻灯片的形式从TFT屏上显示出来。实现了对SD卡里多幅图片以幻灯片形式在TFT屏上动态显示的效果。关键词数码相框STM32LCD液晶显示SD卡THEDESIGNOFDIGITALPHOTOFRAMESBASEDONTHESTM32ABSTRACTEMBEDDEDSYSTEMSISONEOFTHEMOSTPROMISINGAPPLICATIONSOFITINRECENTYEARS,DRIVENBYTHERISEOFDIGITALPHOTOGRAPHYEMBEDDEDPRODUCTSDIGITALPHOTOFRAMEDEVELOPMENTTHEDESIGNISBASEDONASTM32ARMCORTEXM3COREEMBEDDEDHARDWAREPLATFORMDESIGNDIGITALPHOTOFRAME,BOTHOFTODAYSDIGITALPHOTOFRAMEINDUSTRY,MARKETDEMANDANDSTM32EXCELLENTPOWERCONTROLANDLOWDEVELOPMENTCOSTSCOREDESIGNINCLUDESTHEMAINCONTROLLERBOARD,LCDLIQUIDCRYSTALDISPLAY,ANUMBEROFFUNCTIONALMODULESSDCARDMEMORYDEVELOPMENTPROCESSISROUGHLYUSERVMDK380VERSIONOFTHECOMPILERWRITINGPROJECTCODEINTHEPCWIN7SYSTEM,AFTERPASSINGTHROUGHMCUISPSERIALDOWNLOADSOFTWARECOMPILERTOGENERATEHEXDOWNLOADEDTOTHEDEVELOPMENTBOARD,ANDULTIMATELYTHESYSTEMBYREADINGTHEFATFILESYSTEMWITHINTHESDCARDSTORAGEBMP,JPEG,JPGFORMATIMAGES,THEPIECESOFTHEPICTUREINTHEFORMOFASLIDEFROMTHETFTSCREENISDISPLAYEDKEYWORDSDIGITALPHOTOFRAMESTM32;LCDLIQUIDCRYSTALDISPLAY;SDCARDMEMORY目录摘要1ABSTRACT2目录1第一章绪论111数码相框的技术背景112数码相框的市场背景113本课题主要研究内容与特点1131本课题的主要研究内容1132本设计的主要特点1第二章硬件介绍321MCU主控模块322LCD模块423SD存储卡模块7第三章软件介绍1031安装MDK38A1032注册LICENSE1033新建工程1234MCUISP与SSCOM软件18第四章程序设计2041整体描述2042各模块描述20421SD卡图片文件读取20422图像解码与显示2143主程序设计2843程序调试31第五章结束语33参考文献(REFERENCES)34致谢35外文文献36外文译文45第一章绪论引言111数码相框的技术背景嵌入式是以应用为中心,以计算机技术为基础,软件硬件可裁剪适合于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统无疑是当前最热门最有发展前途的作为如今最有发展前途的IT应用领域之一。嵌入式系统一般用在一些专用设备上,通常这些设备的硬件资源如处理器、存储器等非常有限,并且对成本很敏感、对成本很敏感,有时对实时响应要求很高。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCDDVD、MP3播放器、数码相机、数字摄像机、UDISK、机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控设备、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式产品。随着数字摄影的兴起不可避免地引起了数码相框产业得以的发展,因为仅有不到35的数码照片被打印出来。数码相框的基本原理就是采用普通相框的造型是,将把原来相框中间放的照片的部分换成了液晶显示屏,外加配上电源,存储介质等,使得同一个相框内可以循环播放照片比普通相框的优势是在同一个相框内可以循环播放照片,比普通照片的单一显示功能更有优势。此外,本设计属于数字影音娱乐产品,需要较为强劲的处理器进行图像解码的工作,而STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性能、杰出的功耗控制和极低的开发成本等特点。因此,进行基于STM32平台的数码相框系统的设计具有重要的理论意义和实用价值。12数码相框的市场背景市场方面,自从2007年开始,数码相框的市场关注度开始激增。在2008年开始,数码相框市场就呈现出了高速发展的态势,并一直持续至今,因此本课题的研究具有极高的商业潜在市场价值与意义。121数码相框的发展现状数码相框产品的首次出现是在是2001年开始出现的,但直至2003年市场都一直低迷,由于当时消费者的接受度及价格过高的因素其原因在于产品的价格过高,使这一市场一直到2003年都很低迷。之后在随着主要器件价格的下降等因素的促使下,数码相框的价格也逐步下降其价格也得以下降,于是市场自在2004年开始有了起色,尤其在2005年,数码相框产品开始在欧美热销,但出货量也只有150万台左右,到了2006年的出货量同比上涨133,为280万台,2007年的出货量同比上涨185,为800万台,预计到2011年出货量将达到4000万台。从屏幕尺寸来看,2006年569英寸产品占主流,2007年7、8、9英寸产品成为最大市场。预计2011年,7、8、9英寸产品的供货比例将持续保持首位,而平均销售单价将以每年165左右的速度降低。2006年以前,中国生产的数码相框绝大多数出口国外。2005年底PHILIPS率先将数码相框在中国推广,在礼品市场上取得了一些成绩,但由于销售价格较高,约为2050元/台,这一年中国数码相框的销售量仅有17万台。2006年下半年,开始有更多的国内厂商在中国市场推出数码相框,因而也带动了此产品价格的下降,这一年的平均售价为1150元/台,仍然较高,市场也以商务礼品为主,但由于2005年销售量的基数较低,2006年的销售量同比增长了4706,达到97万台。直到2007年下半年,业界才感到这个一直处于培育期的市场,开始了真正的起飞。这得益于对数码相框产品认知度的提高、价格的下滑和需求量的提高。从IT厂商来看,仅2007年下半年以来,就有惠普、三星、优派、AOC、明基、柯达、长城等众多新军加入数码相框阵营。其中,巨头惠普2007年7月底在美国宣布进入数码相框市场,2007年数码相框出货量设定为50万台。除新军外,数码相框老牌劲旅的出货量表现也令业界振奋,如飞利浦2006年数码相框出货量达到50万台,而2007年上半年出货量已达去年总和,2007年全年出货量达150万台。而从上游面板厂商的动作来看,也显示出乐观的发展态势。中华映管、群创等厂商均显著调高了配套数码相框产品的中尺寸面板的出货量目标,2007年出货量达1000万台,预计2008年更将倍增至2000万台。其中,中华映管目前已调配一座45代面板厂来支持生产中尺寸面板,主要生产可携式DVD播放机面板与数码相框面板,其数码相框面板以7英寸、8英寸、102英寸为主要尺寸,数码相框面板占其中尺寸面板的比重提高到40。122数码相框的发展趋势从长远来看,2008年及今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场将处在逐渐步入走向成熟期的阶段,其产销量和市场需求依然将仍会保持大幅度的增长,在未来的三年内,市场尚无萎缩的可能。从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;另一部分产品将会添加一些新的功能,如WIFI,还可即时报告天气、股票等信息,从而有望成为“桌面信息中心”。此外,触摸面板会成为一个应用的新亮点。从产品形态上来说,数码相框的市场将会有非常明确的细分。1数码相框这将是以数字照片的重显为主要功能的产品,其功能更接近于传统意义上的相框。由于人机界面的限制,为了更方便的重显和浏览以及确定重显的规则,这类产品并不强调有大容量的内存以及丰富的存储卡接口,这类产品的主要特征是1)支持USBDEVICEINTMAINVOIDSYSTEMINITRCC_APB2PERIPHCLOCKCMDRCC_APB2PERIPH_GPIOD,ENABLEGPIO_INITSTRUCTUREGPIO_PINGPIO_PIN_0|GPIO_PIN_2GPIO_INITSTRUCTUREGPIO_SPEEDGPIO_SPEED_50MHZGPIO_INITSTRUCTUREGPIO_MODEGPIO_MODE_OUT_PPGPIO_INITGPIOD,WHILE1/SETPD0ANDPD2/GPIODBSRR0X00000005/RESETPD0ANDPD2/GPIODBRR0X00000005IFDEFUSE_FULL_ASSERTVOIDASSERT_FAILEDUINT8_TFILE,UINT32_TLINEWHILE1ENDIF这次编译可以看出,已经成功了。这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成HEX文件。同样点击魔术棒,进入配置菜单,选择OUTPUT。然后勾上下三个选项。其中CREATEHEXFILE是编译生成HEX文件,BROWSERINFORMATION是可以查看变量和函数定义,这里我们不做过多解释,在我们的不完全手册里面有讲解。重新编译代码,可以看到生成了HEX文件,这个文件我们用MCUISP下载到MCU即可。选中之后点击OK,重新编译,编译结果如下图所示图315重新编译结果从上图中可以看到,编译器已经产生了HEX文件了,然后我们打开USER文件夹,看看里面发生了什么变化重新编译产生了很多文件,其中就有我们所需要的HEX文件(图中红圈圈中),至此,我们就可以开始下载了。34MCUISP与SSCOM软件用MCUISP软件打开USER文件夹,找到TESTHEX,打开并进行相应设置后。编程前重装文件,该选项也比较有用,当选中该选项之后,MCUISP会在每次编程之前,将HEX文件重新装载一遍,这对于代码调试的时候是比较有用的。最后,我们选择的DTR的低电平复位,RTS高电平进BOOTLOADER,这个选择项选中,MCUISP就会通过DTR和RTS信号来控制板载的一键下载功能电路,以实现一键下载功能。如果不选择,则无法实现一键下载功能。这个是必要的选项(在BOOT0接GND的条件下)。在装载了HEX文件之后,我们要下载代码还需要选择串口,这里MCUISP有智能串口搜索功能。每次打开MCUISP软件,软件会自动去搜索当前电脑上可用的串口,然后选中一个作为默认的串口(一般是您最后一次关闭时所选则的串口)。也可以通过点击菜单栏的搜索串口,来实现自动搜索当前可用串口。串口波特率则可以通过BPS那里设置,对于STM32,该波特率最大为230400BPS,这里我们一般选择最高的波特率460800,让MCUISP自动去同步。从之前USB串口的安装可知,开发板的串口被识别为COM5了,所以我选择COM5。选择了相应串口之后就可以通过按”开始编程(P)”这个按钮,一键下载代码到STM32上,下载成功后如下图所示图316下载完成下载完成上图中,我用圈圈圈出了MCUISP对一键下载电路的控制过程,其实就是控制DTR和RTS电平的变化,控制BOOT0和RESET,从而实现自动下载。另外界面提示已经下载完成(如果老提示开始连接,需要检查一下,开发板的设置是否正确,是否有其他因素干扰等),并且从0X80000000处开始运行了,我打开串口调试助手选择COM5,会发现从硬件板发回来的信息,如下图所示图317串口调试助手SSCOM图340程序开始运行了接收到的数据和我仿真的是一样的,证明程序没有问题。至此,说明下载代码成功了,并且也从硬件上验证了代码的正确性。第四章程序设计与调试41整体系统描述本设计实现了对SD卡里多幅图片以幻灯片形式在TFT屏上动态显示的效果。主要的三大部分为SD卡图片文件读取、图像解码与显示、系统主程序。本系统采用基于ARMCORTEXM3内核的STM32作为主控制器,外扩SD卡以及TFT彩屏。系统通过文件系统读取SD卡内存储的BMP、JPEG、JPG格式图片,把多幅图片以幻灯片的形式从TFT屏上显示出来。同时,通过STM32内部的RTC模块使系统具有掉电不遗失日期及时钟的功能。系统框图如图41所示。图41系统框图42各模块描述421SD卡图片文件读取软件设计421文件读取本次试验读取SD卡上的字库以及UNICODE到GBK的转换码表到W25X16部分需要用到FAT文件系统。常用的文件系统有FAT12/16/32等,FAT12,现在基本淘汰了。FAT16则可以管理2G的空间通过特殊处理也能管理2G以上的空间,而FAT32则能管理到2TB(2048GB)的空间。FAT32较FAT16的优势还在于FAT32采用了更小的簇,可以更有效的保存信息,而不会造成较多的浪费。WIN7在格式化SD卡的时候建立的,通常SD卡上的数据信息由MBR、DBR、FAT、FDT和数据区5个部分组成(有的也没有MBR)。我们以FAT32为例做介绍。MBR称为主引导记录区,该区存储了分区表等信息,位于SD卡的扇区0(物理扇区),在其分区信息里面记录了DBR所在的位置,SD卡一般只会有一个分区,所以也就只要找到分区1的DBR所在位置就可以了。DBR称为操作系统引导记录区,如果没有MBR,那么DBR就位于0扇区,如果有则必须通过MBR区得到DBR所在的地址,然后读出DBR信息。在DBR区,我们可以知道每个扇区所占用的字节数包含了每个扇区所占用的字节数、每个簇的扇区数、FAT表的份数、每个FAT表的扇区数、跟目录簇号、FAT表1所在的扇区等一系列非常重要的信息。FAT称为文件分配表(FAT表),一般一个卡上会存在2个FAT表,一个用作备份,一个用作使用。FAT表一般紧随DBR,另一个FAT表则紧随第一个FAT表,这样只要知道了第一个FAT表的位置及大小,那么第二个FAT表的位置也就确定了。FAT表记录了每个文件的位置和区域,是一种链式结构,FAT以“F8FFFF0FFFFFFFFF”这样的8个字节为表头,用以表示FAT表的开始,后面的数据每四个字节为一个簇项(从第2簇开始),用来标记下一个簇所在的位置,这样每个位置都存储了下一个簇,只要按着这个表走,就可以找到文件的所有内容。如果找到下一个簇位置,里面记录的是最后一个簇的标记是“FFFFFF0F”,代表这个文件到此就结束了,没有后续簇了,这样一个文件的读取就结束了。FDT称为文件根目录表,这个区域固定为32个扇区,假设每个扇区为512个字节,那么更目录下最多存放512个文件(假设都用短文件名存储,每个短文件名占32个字节)。文件目录表是另一个重要的部分,FAT文件系统中(仅以短文件名介绍),文件目录项在目录表下以32个字节的方式记录,各字段定义如下表41文件目录项各字节定义从上表可知,我们在文件的目录项就可以找到该文件的其实簇,然后在FAT表里面找到该簇开始的下一个簇,依次读取这些簇就可以把整个文件读出来了。42222图像解码与显示BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选LBIT、4BIT、8BIT及24BIT。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。典型的BMP图像文件由三部分组成位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。JPEG是JOINTPHOTOGRAPHICEXPERTSGROU的缩写,是最常用的图像文件格式。其特点是用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像。JPEG具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在101到401之间,压缩与图像品质成反比。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24BIT真彩色,也普遍应用于需要连续色调的图像。JPEG/JPG的解码过程可以简单的概述为如下几个部分1从文件头读出文件的相关信息。JPEG文件数据分为文件头和图像数据两大部分,其中文件头记录了图像的版本、长宽、采样因子、量化表、哈夫曼表等重要信息。2从图像数据流读取一个最小编码单元MCU,并提取出里边的各个颜色分量单元。3将颜色分量单元从数据流恢复成矩阵数据。利用文件头给出的哈夫曼表,对分割出来的颜色分量单元进行解码,把其恢复成88的数据矩阵。488的数据矩阵进一步解码。此部分解码工作以88的数据矩阵为单位,其中包括相邻矩阵的直流系数差分解码、利用文件头给出的量化表反量化数据、反ZIGZAG编码、隔行正负纠正、反向离散余弦变换等5个步骤,最终输出仍然是一个88的数据矩阵。5颜色系统YCRCB向RGB转换。将一个MCU的各个颜色分量单元解码结果整合起来,将图像颜色系统从YCRCB向RGB转换。6排列整合各个MCU的解码数据。不断读取数据流中的MCU并对其解码,将解码后的数据正确排列成完整的图像直至读完所有MCU为止。主要代码INCLUDE“JPEGBMPH“/全局变量声明,BMP和JPEG共用FILEINFOSTRUCTCURFILE/当前解码/操作的文件/图像信息TYPEDEFSTRUCTU32IMGWIDTH/图像的实际宽度和高度U32IMGHEIGHTU32DIV_FAC/缩放系数扩大了10000倍的U32S_HEIGHT/设定的高度和宽度U32S_WIDTHU32S_XOFF/X轴和Y轴的偏移量U32S_YOFFU32STATICX/当前显示到的坐标U32STATICYPIC_POSPIC_POSPICINFO/图像位置信息/VOIDAI_DROW_INITVOID/智能画图,初始化得到比例因子PICINFODIV_FAC/在JPEG函数里面用到的变量SHORTSAMPRATE_Y_H,SAMPRATE_Y_VSHORTSAMPRATE_U_H,SAMPRATE_U_VSHORTSAMPRATE_V_H,SAMPRATE_V_VSHORTH_YTOU,V_YTOU,H_YTOV,V_YTOVSHORTY_IN_MCU,U_IN_MCU,V_IN_MCUUNSIGNEDCHARLP/取代LPJPEGBUFSHORTQT_TABLE364SHORTCOMP_NUMU8COMP_INDEX3U8YDCINDEX,YACINDEX,UVDCINDEX,UVACINDEXU8HUFTABINDEXSHORTYQTTABLE,UQTTABLE,VQTTABLESHORTCODE_POS_TABLE416,CODE_LEN_TABLE416UNSIGNEDSHORTCODE_VALUE_TABLE4256UNSIGNEDSHORTHUF_MAX_VALUE416,HUF_MIN_VALUE416SHORTBITPOS,CURBYTE/BYTE的第几位,当前BYTESHORTRRUN,VVALUESHORTMCUBUFFER1064SHORTQTZZMCUBUFFER1064SHORTBLOCKBUFFER64SHORTYCOEF,UCOEF,VCOEFBOOLINTERVALFLAGSHORTINTERVAL0SHORTY464,U464,V464/DWORDSIZEI,SIZEJSHORTRESTARTLONGICLIP1024/4KBYTESLONGICLP/反Z字形编码表CONSTINTZIG_ZAG880,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63CONSTBYTEAND90,1,3,7,0XF,0X1F,0X3F,0X7F,0XFF/数据缓冲区U8JPG_BUFFER1024/数据缓存区/初始化智能画点VOIDAI_DROW_INITVOIDFLOATTEMP,TEMP1TEMPFLOATPICINFOS_WIDTH/PICINFOIMGWIDTHTEMP1FLOATPICINFOS_HEIGHT/PICINFOIMGHEIGHTIFTEMP1TEMP11/使图片处于所给区域的中间PICINFOS_XOFFPICINFOS_WIDTHTEMP1PICINFOIMGWIDTH/2PICINFOS_YOFFPICINFOS_HEIGHTTEMP1PICINFOIMGHEIGHT/2TEMP110000/扩大10000倍PICINFODIV_FACTEMP1PICINFOSTATICX500PICINFOSTATICY500/放到一个不可能的值上面/判断这个像素是否可以显示/X,Y像素原始坐标/CHG功能变量/返回值0,不需要显示1,需要显示_INLINEU8ISELEMENTOKU16X,U16Y,U8CHGIFXPICINFOSTATICX|YPICINFOSTATICYIFCHG1PICINFOSTATICXXPICINFOSTATICYYRETURN1ELSERETURN0/智能画图/FILENAME要显示的图片文件BMP/JPG/JPEG/SX,SY开始显示的坐标点/EX,EY结束显示的坐标点/图片在开始和结束的坐标点范围内显示BOOLAI_LOADPICFILEFILEINFOSTRUCTFILENAME,U16SX,U16SY,U16EX,U16EYINTFUNCRET/返回值/得到显示方框大小IFEYSYPICINFOS_HEIGHTEYSYELSEPICINFOS_HEIGHTSYEYIFEXSXPICINFOS_WIDTHEXSXELSEPICINFOS_WIDTHSXEX/显示区域无效IFPICINFOS_HEIGHT0|PICINFOS_WIDTH0PICINFOS_HEIGHTLCD_HPICINFOS_WIDTHLCD_WRETURNFALSE/影响速度/SD_INIT/初始化SD卡,在意外拔出之后可以正常使用/显示的开始坐标点PICINFOS_YOFFSYPICINFOS_XOFFSX/文件名传递CURFILEFILENAMEIFCURFILEF_TYPET_BMP/得到一个BMP图像FUNCRETBMPDECODECURFILE/得到一个BMP图像RETURNFUNCRETELSEIFCURFILEF_TYPET_JPG|CURFILEF_TYPET_JPEG/得到JPG/JPEG图片/得到JPEG/JPG图片的开始信息F_OPENCURFILE/开始时读入1024个字节到缓存里面方便后面提取JPEG解码的信息F_READCURFILE,JPG_BUFFER/读第一次F_READCURFILE,JPG_BUFFER512/读第二次INITTABLE/初始化各个数据表IFFUNCRETINITTAGFUNC_OKRETURNFALSE/初始化表头不成功IFSAMPRATE_Y_H0|SAMPRATE_Y_V0RETURNFALSE/采样率错误AI_DROW_INIT/初始化PICINFODIV_FAC,启动智能画图FUNCRETDECODE/解码JPEG开始ELSERETURNFALSE/非图片格式IFFUNCRETFUNC_OKRETURNTRUE/解码成功ELSERETURNFALSE/解码失败/解码这个BMP文件BOOLBMPDECODEFILEINFOSTRUCTBMPFILENAMEU16COUNTU8RGB,COLOR_BYTEU16X,Y,COLOR,TMP_COLORU16UITEMP/X轴方向像素计数器U16COUNTPIX0/记录像素/X,Y的实际坐标U8REALX0U16REALY0U8YOK1BITMAPINFOPBMP/临时指针CURFILEBMPFILENAMEF_OPENCURFILE/打开文件F_READCURFILE,JPG_BUFFER/读出512个字节PBMPBITMAPINFOJPG_BUFFER/得到BMP的头部信息COUNTPBMPBMFHEADERBFOFFBITS/数据偏移,得到数据段的开始地址COLOR_BYTEPBMPBMIHEADERBIBITCOUNT/8/彩色位16/24/32PICINFOIMGHEIGHTPBMPBMIHEADERBIHEIGHT/得到图片高度PICINFOIMGWIDTHPBMPBMIHEADERBIWIDTH/得到图片宽度/水平像素必须是4的倍数IFPICINFOIMGWIDTHCOLOR_BYTE4UITEMPPICINFOIMGWIDTHCOLOR_BYTE/414ELSEUITEMPPICINFOIMGWIDTHCOLOR_BYTEAI_DROW_INIT/初始化智能画图/开始解码BMPX0YPICINFOIMGHEIGHTRGB0REALYYPICINFODIV_FAC/10000WHILE1WHILECOUNT3COLOR|TMP_COLORBREAKCASE1TMP_COLORJPG_BUFFERCOUNT2TMP_COLOR3TMP_COLOR5TMP_COLOR3BREAKCASE1TMP_COLORJPG_BUFFERCOUNTTMP_COLOR2COLOR|TMP_COLOR3COLOR|TMP_COLORUITEMP/水平方向像素值到了换行YIFYBMFHEADERBFOFFBITS/数据偏移,得到数据段的开始地址COLOR_BYTEPBMPBMIHEADERBIBITCOUNT/8/彩色位16/24/32PICINFOIMGHEIGHTPBMPBMIHEADERBIHEIGHT/得到图片高度PICINFOIMGWIDTHPBMPBMIHEADERBIWIDTH/得到图片宽度/水平像素必须是4的倍数IFPICINFOIMGWIDTHCOLOR_BYTE4UITEMPPICINFOIMGWIDTHCOLOR_BYTE/414ELSEUITEMPPICINFOIMGWIDTHCOLOR_BYTEAI_DROW_INIT/初始化智能画图/开始解码BMPX0YPICINFOIMGHEIGHTRGB0REALYYPICINFODIV_FAC/10000WHILE1WHILECOUNT3COLOR|TMP_COLORBREAKCASE1TMP_COLORJPG_BUFFERCOUNT2TMP_COLOR3TMP_COLOR5TMP_COLOR3BREAKCASE1TMP_COLORJPG_BUFFERCOUNTTMP_COLOR2COLOR|TMP_COLOR3COLOR|TMP_COLORUITEMP/水平方向像素值到了换行YIFYPICINFOIMGWIDTHSIZEJ0SIZEISAMPRATE_Y_V8IFSIZEJ0RETURNFUNCRET/智能画图/FILENAME要显示的图片文件BMP/JPG/JPEG/SX,SY开始显示的坐标点/EX,EY结束显示的坐标点/图片在开始和结束的坐标点范围内显示BOOLAI_LOADPICFILEFILEINFOSTRUCTFILENAME,U16SX,U16SY,U16EX,U16EYINTFUNCRET/返回值/得到显示方框大小IFEYSYPICINFOS_HEIGHTEYSYELSEPICINFOS_HEIGHTSYEYIFEXSXPICINFOS_WIDTHEXSXELSEPICINFOS_WIDTHSXEX/显示区域无效IFPICINFOS_HEIGHT0|PICINFOS_WIDTH0PICINFOS_HEIGHTLCD_HPICINFOS_WIDTHLCD_WRETURNFALSE/显示的开始坐标点PICINFOS_YOFFSYPICINFOS_XOFFSXCURFILEFILENAME/文件名传递IFCURFILEF_TYPET_BMP/得到一个BMP图像FUNCRETBMPDECODECURFILE/得到一个BMP图像RETURNFUNCRETELSEIFCURFILEF_TYPET_JPG|CURFILEF_TYPET_JPEG/得到JPG/JPEG图片F_OPENCURFILE/得到JPEG/JPG图片的开始信息/开始时读入1024个字节到缓存里面方便后面提取JPEG解码的信息F_READCURFILE,JPG_BUFFER/读第一次F_READCURFILE,JPG_BUFFER512/读第二次INITTABLE/初始化各个数据表IFFUNCRETINITTAGFUNC_OKRETURNFALSE/初始化表头不成功IFSAMPRATE_Y_H0|SAMPRATE_Y_V0RETURNFALSE/采样率错误AI_DROW_INIT/初始化PICINFODIV_FAC,启动智能画图FUNCRETDECODE/解码JPEG开始ELSERETURNFALSE/非图片格式IFFUNCRETFUNC_OKRETURNTRUE/解码成功ELSERETURNFALSE/解码失败此部分代码包含了JPEG/JPG以及BMP的解码代码,解码通过AI_LOADPICFILE函数来实现,在该函数里面先判断文件的类型,然后调用不同的解码函数,解码JPEG由DECODE函数实现,而解码BMP则由BMPDECODE函数实现。AI_LOADPICFILE函数会将图片以合适的大小显示在液晶上(总是不会超过你给定的区域),对比输入尺寸大的图片,会自动压缩。解码图片完成后返回解码是否成功的信息。4243主程序设计本系统先对STM32及其外设进行初始化,再对界面进行初始化,之后实现照片浏览播放,按键RESET系统复位。主程序代码INCLUDEINCLUDE“SYSH“INCLUDE“USARTH“INCLUDE“DELAYH“INCLUDE“LEDH“INCLUDE“KEYH“INCLUDE“EXTIH“INCLUDE“WDGH“INCLUDE“TIMERH“INCLUDE“LCDH“INCLUDE“RTCH“INCLUDE“WKUPH“INCLUDE“ADCH“INCLUDE“DMAH“INCLUDE“24CXXH“INCLUDE“FLASHH“INCLUDE“TOUCHH“INCLUDE“24L01H“INCLUDE“MMC_SDH“INCLUDE“REMOTEH“INCLUDE“DS18B20H“INCLUDE“MOUSEH“INCLUDE“TEXTH“INCLUDE“FATH“INCLUDE“FONTUPDH“INCLUDE“SYSFILEH“INCLUDE“SPIH“INCLUDE“JPEGBMPH“INTMAINVOIDU8IU8KEYFILEINFOSTRUCTFILEINFOU16PIC_CNT0/当前目录下图片文件的个数U16INDEX0/当前选择的文件编号U16TIME0STM32_CLOCK_INIT9/系统时钟设置DELAY_INIT72/延时初始化UART_INIT72,9600/串口1初始化LCD_INIT/初始化液晶KEY_INIT/按键初始化LED_INIT/LED初始化SPI_FLASH_INIT/SPIFLASH使能IFFONT_INIT/字库不存在,则更新字库POINT_COLORREDLCD_SHOWSTRING60,50,“MINISTM32“LCD_SHOWSTRING60,70,“FONTERROR“WHILE1POINT_COLORREDSHOW_STR60,50,“太原理工大学毕业设计“,16,0SHOW_STR60,70,“数码相框设计与实现“,16,0SHOW_STR60,90,“薛晶文“,16,0SHOW_STR60,110,“2014年4月12日“,16,0SD_INITIALIZEWHILEFAT_INIT/FAT错误SHOW_STR60,130,“文件系统错误“,16,0ISD_INITIALIZEIFISHOW_STR60,150,“SD卡错误“,16,0/SD卡初始化失败DELAY_MS2000LCD_FILL60,130,240,170,WHITE/清除显示DELAY_MS2000LED0LED0WHILESYSINFOGET1/得到图片文件夹SHOW_STR60,130,“图片文件夹未找到“,16,0DELAY_MS2000FAT_INITSD_INITIALIZELED0LED0LCD_FILL60,130,240,170,WHITE/清除显示DELAY_MS2000SHOW_STR60,130,“开始显示“,16,0DELAY_MS2000CUR_DIR_CLUSTERPICCLUSTERWHILE1PIC_CNT0GET_FILE_INFOCUR_DIR_CLUSTER,FILEINFO,T_JPEG|T_JPG|T_BMP,/获取当前文件夹下面的目标文件个数IFPIC_CNT0/没有图片文件LCD_CLEARWHITE/清屏WHILE1IFTIME20SHOW_STR32,150,“没有图片,请先COPY图片到SD卡的PICTURE文件夹,然后后重启“,16,0ELSELCD_CLEARWHITETIMEDELAY_MS2000FILEINFO/开辟暂存空间INDEX1WHILE1GET_FILE_INFOCUR_DIR_CLUSTER,FILEINFO,T_JPEG|T_JPG|T_BMP,/得到这张图片的信息LCD_CLEARWHITE/清屏,加载下一幅图片的时候,一定清屏AI_LOADPICFILEFILEINFO,0,0,240,320/显示图片POINT_COLORREDSHOW_STR0,0,FILEINFOF_NAME,16,1/显示图片名字WHILE1/延时3SKEYKEY_SCANIFKEY1BREAK/下一张ELSEIFKEY2/上一张IFINDEX1INDEX2ELSEINDEXPIC_CNT1BREAKDELAY_MS1TIMEIFTIME1000LED0LED0IFTIME3000TIME0BREAKINDEXIFINDEXPIC_CNTINDEX1/显示第一副,循环43程序调试图412无SD卡运行情况图41最终运行结第五章结束语本次设计最主要取得的研究成果是从需求分析到系统的实现。虽然这次设计相对于正规的ARM开发系统简单了很多,但却比8位单片机系统设计又复杂了不少。从产品需求分析到系统实现,使我真正体会到了作为一名系统开发人员真的是不容易,要循序渐进,要学会不断地去面对难题和解决问题;本次设计软件的编写、调试与运行,但一款运行稳定的系统必然是硬件与软件配合的较为恰当,因此,对于原理图的绘制,相关硬件资料的研究,这些都是必不可少的步骤。通过这次课程设计,我熟悉了嵌入式开发的步骤,也学到了一些知识,增加了自己的动手能力。课程设计以前没做过,也缺少整体明确的认识,从开始的时候很迷茫,不知所措,到逐渐明确目标,清析思路,我们也一直在不断进步,一步步的工作使我对以后做好其他的工作也充满了信心。当然还有很多知识没有掌握,希望通过这次实践能明白自己的薄弱环节,以后的工作学习中积极动手,多与他人合作交流,努力强化自己的专业知识,并多多反思出现的问题,及时纠正错误参考文献(REFERENCES)1STMICROELECTRONICSCORPORATIONSTM32F105/107XXDATASHEET,20102LEENGHEFFERNANDTTCANANEWTIMETRIGGEREDCONTROLLERAREANETWORK外文期刊2002023STMICROELECTRONICSUM0424USERMANUALSTM32F10XXXUSBDEVELOPMENTKIT,20084丁鑫蕾一种简易数码相框的设计J微型机与应用,2010315刘军例说STM32J北京北京航空航天大学,2011106谭浩强C程序设计M北京清华大学出版社,200857朱永金等单片机应用技术C语言M北京中国劳动社会保障出版社,20078何加铭主编嵌入式32位微处理器系统设计与应用M电子工业出版社,20069田泽主编嵌入式系统开发与应用M北京北京航空航天大学,200510许海燕,付炎著嵌入式系统技术与应用M北京机械工业出版社,200211LUPALINUX软件工程师实用教程科学出版社,2011,1112张勇ARM原理与C程序设计西安电子科技大学出版社,2009,413韦东山嵌入式LINUX应用软件开发完全手册人民邮电出版社,2008,814成洁,卢紫毅LINUX窗口程序设计清华大学出版社,2008,1115百度文库,中国IT实验室网站,CHINAUNIX网站致谢从选题到开题报告,外文翻译与论文正文,导师不厌其烦的给我提出设计中存在的问题,及时指出我不足的地方并讨论解决方法,使我的设计工作得以顺利进行。本次设计让我深入地了解了STM32程序编写的原理,学到了许多理论,遇到了不少问题,使我做了许多有益的思考。最后,再一次感谢所有在毕业设计中帮助过我的老师和同学一个人的成长,也离不开周围的同学,同学们的交流与帮助使我更加懂得友谊的珍贵,三年的相处中,不断进步,一起成长,也让人终身难忘。最后也祝愿同学们都能健康快乐成长,工作顺利外文文献AINTRODUCTIONOFSTM32STM32ISBASEDONTHEFAMILYOFARMCORTEXM3COREDESIGNEDSPECIFICALLYFOREMBEDDEDAPPLICATIONSTHATREQUIREHIGHPERFORMANCE,LOWCOST,LOWPOWERCONSUMPTIONTHEPERFORMANCEISDIVIDEDINTOTWODIFFERENTSERIESSTM32F103THE“ENHANCED“SERIESANDSTM32F101THE“BASIC“SERIESTHECLOCKFREQUENCYOFENHANCEDSERIESISUPTO72MHZ,THEHIGHESTPERFORMANCEOFSIMILARPRODUCTSTHECLOCKFREQUENCYOFBASICSERIESIS36MHZ,ANDTHEPRICESOF16POSITIONPRODUCTSSIGNIFICANTLYENHANCETHEPERFORMANCEOFMORETHAN16POSITIONPRODUCTS,ISTHEBESTCHOICEUSERSTOBUYTHEMTHETWOSERIESAREBUILTINFLASHFROM32KTO128K,ISTHECOMBINATIONOFTHEMAXIMUMCAPACITYOFTHESRAMANDPERIPHERALINTERFACESWHENTHECLOCKFREQUENCYREACHES72MHZ,ITEXECUTESFROMFLASHANDTHESTM32POWERCONSUMPTIONIS36MA,THELOWESTPOWERCONSUMPTIONINTHE32BITMARKETPRODUCTS,THEEQUIVALENTANIMPRESSIVE05MA/MHZASTMICROELECTRONICSGROUPSTMICROELECTRONICSGROUPWASESTABLISHEDINJUNE1987,ISAMERGEROFITALYSSGSMICROELECTRONICSANDTHEFRENCHTHOMSONSEMICONDUCTORCOMPANYINMAY1998,SGSTHOMSONMICROELECTRONICSWILLCHANGETHECOMPANYNAMETOSTMICROELECTRONICSLIMITEDSTMICROELECTRONICSISONEOFTHELARGESTSEMICONDUCTORCOMPANIESINTHEWORLDFROMITSINCEPTIONTODATE,STSGROWINGFASTERTHANTHEOVERALLRATEOFGROWTHOFTHESEMICONDUCTORINDUSTRYSINCE1999,STHASALWAYSBEENONEOFTHEWORLDSTOPTENSEMICONDUCTORCOMPANIESACCORDINGTOTHELATESTINDUSTRYSTATISTICS,STMICROELECTRONICSISTHEWORLDSFIFTHLARGESTSEMICONDUCTORMANUFACTURERANDAWORLDLEADERINMANYMARKETSFOREXAMPLE,STMICROELECTRONICSISTHEWORLDSLARGESTDEDICATEDANALOGCHIPS

温馨提示

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

评论

0/150

提交评论