基于STM32的数码相框设计与实现本科论文.docx
《基于STM32的数码相框设计与实现本科论文.docx》由会员分享,可在线阅读,更多相关《基于STM32的数码相框设计与实现本科论文.docx(57页珍藏版)》请在冰点文库上搜索。
北京邮电大学毕业设计
基于STM32的数码相框设计与实现
摘 要
嵌入式系统是当前最有发展前途的IT应用领域之一,近年来数字摄影业的兴起带动了嵌入式产品——数码相框的发展。
本设计是一款基于ARMCortex-M3内核STM32嵌入式硬件平台设计的数码相框,主要优势是应用了Stm32杰出的功耗控制和极低的开发成本、超多的外设等特点。
设计主要包括主控制器核心板、LCD液晶显示、SD卡存储器等多个功能模块。
开发过程大致为:
在PC机win7系统中使用RVMDK3.80版本的编译器撰写工程代码,之后通过mcuisp串口下载软件将编译器编译生成.hex下载到开发板内,最终实现通过FAT文件系统读取SD卡内存储的BMP、JPEG、JPG格式图片,把多幅图片以幻灯片的形式从TFT屏上显示出来。
关键词:
数码相框;STM32;LCD液晶显示;SD卡
2
ThedesignofdigitalphotoframesbasedontheSTM32
Abstract
EmbeddedsystemsisoneofthemostpromisingapplicationsofITinrecentyears,drivenbytheriseofdigitalphotographyembeddedproducts-digitalphotoframedevelopment.ThedesignisbasedonaSTM32ARMCortex-M3coreembeddedhardwareplatformdesigndigitalphotoframe,bothoftoday'sdigitalphotoframeindustry,marketdemandandStm32excellentpowercontrolandlowdevelopmentcosts.
Core designincludesthemaincontrollerboard,LCDliquidcrystaldisplay,anumberoffunctionalmodulesSDcardmemory.Developmentprocessisroughly:
UseRVMDK3.80versionofthecompilerwritingproject codeinthePCwin7system,afterpassingthroughmcuispserialdownloadsoftwarecompilertogeneratehexdownloadedtothedevelopmentboard,andultimatelythesystembyreadingtheFATfilesystem.withintheSDcardstorageBMP,JPEG,JPGformatimages,thepiecesofthepictureintheformofaslidefromtheTFTscreenisdisplayed.
Keywords:
DigitalPhotoFrame;STM32;LCDliquidcrystaldisplay;SDcardmemory.
北京邮电大学毕业设计
目录
摘要 1
ABSTRACT 2
目录 1
第一章绪论 1
1.1数码相框的技术背景 1
1.2数码相框的市场背景 1
1.3本课题主要研究内容与特点 1
1.3.1本课题的主要研究内容 1
1.3.2本设计的主要特点 1
第二章硬件介绍 3
2.1MCU主控模块 3
2.2LCD模块 4
2.3SD存储卡模块 7
第三章软件介绍 10
3.1安装MDK3.8A 10
3.2注册LICENSE 10
3.3新建工程 12
3.4MCUISP与SSCOM软件 18
第四章程序设计 20
4.1整体描述 20
4.2各模块描述 20
4.2.1SD卡图片文件读取 20
4.2.2图像解码与显示 21
4.3主程序设计 28
4.3程序调试 31
第五章结束语 33
参考文献(REFERENCES) 34
致 谢 35
外文文献 36
外文译文 45
北京邮电大学毕业设计
第一章绪论
1.1数码相框的技术背景
嵌入式是以应用为中心,以计算机技术为基础,软件硬件可裁剪适合于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
作为如今最有发展前途的IT应用领域之一嵌入式系统一般用在一些专用设备上,通常这些设备的硬件资源非常有限、对成本很敏感,有时对实时响应要求很高。
像我们平常常见到的手机、VCD、MP3播放器、数字摄像机、机顶盒、高清电视、游戏机、路由器、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是嵌入式产品。
随着数字摄影的兴起数码相框产业得以发展。
数码相框的造型是将原来相框中间放照片的部分换成了液晶显示屏,外加电源,存储介质等,比普通相框的优势是在同一个相框内可以循环播放照片。
1.2数码相框的市场背景
市场方面,自2008年开始数码相框市场就呈现出了高速发展的态势,并一直持续至今,因此本课题的研究具有极高的商业价值与意义。
数码相框产品的首次出现是在2001年,但直至2003年市场都一直低迷,其原因在于产品的价格过高。
之后在器件价格的下降等因素的促使下,其价格也得以下降,于是市场自2004年有了起色,2005年,数码相框产品开始在欧美热销,但出货量也只有150万台左右,2006年的出货量同比上涨133%,为280万台,2007年的
出货量同比上涨185%,为800万台,2011年出货量达到4000万台。
从长远来看,未来几年数码相框的市场将逐渐步入成熟期,其产销量和市场需求仍会保持大幅度增长。
1.3本课题主要研究内容与特点
1.3.1本课题的主要研究内容
本课题是基于ARM单片机STM32的存储程序控制,从SD卡读取图片,解码之后输出到TFT-LCD(薄膜晶体管液晶显示器)上显示。
实现了对SD卡里多幅图片以幻灯片形式在TFT屏上动态显示的效果。
1)硬件资料的研究;
2)软件方案的选择与论证;
3)软件运行与调试;
1.3.2本设计的主要特点
从以往的市场发展来看,数码相框产品市场化的两大阻碍因素为:
一是价格;二是应用功能。
低廉的价格将赢得更多顾客的青睐,拓展应用空间指的是消费者的需求开发出相应的应用产品。
STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性能、杰出的功耗控制和极低的开发成本等
超低的价格:
以8位机的价格,得到32位机,是STM32最大的优势。
极低的开发成本:
STM32的开发不需要昂贵的仿真器,只需要一个串口即可下载代码,并且支持SWD和JTAG两种调试口。
SWD调试可以为您的设计带来跟多的方便,只需要2个IO口,即可实现仿真调试。
34
超多的外设:
STM32拥有包括:
FSMC、TIMER、SPI、IIC、USB、CAN、IIS、
SDIO、ADC、DAC、RTC、DMA等众多外设及功能,具有极高的集成度。
丰富的型号:
STM32拥有F101、F102、F103、F105、F107等5个系列数十种型号,具有QFN、LQFP、BGA等封装可供选择。
优异的实时性能:
84个中断,16级可编程优先级,并且所有的引脚都可以作为中断输入。
杰出的功耗控制:
STM32各个外设都有自己的独立时钟开关,可以通过关闭相应外设的时钟来降低功耗。
第二章硬件介绍
2.1MCU主控模块
STM32系列闪存微控制器是意法半导体公司(ST)基于ARM公司具有突破性的Cortex-M3内核的处理器,该处理器是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。
此次设计采用的具体型号是STM32F103RBT6,如图2-1所示。
图2-1STM32F103RBT6处理器
STM32F103RBT6嵌入式处理器具有以下特点:
32位RISC性能处理器;
32位ARMCortex-M3结构优化;
72MHZ运行频率,单周期访问时速度可达1.25DMIPS/MHz;硬件除法和单周期乘法;
快速可嵌套中断,6~12个时钟周期;具有MPU保护设定访问规则;
片内具有256KBFLASH,48KBRAM;
80个快速I/O端口,16个I/O可映射到外部中断,几乎所有的I/O可以忍受5V
电压;
片上集成12BitA/D、D/A、PWM、CAN、USB、SDIO、FSMC等资源;
ARMCortex-M3是一种基于ARM7v架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下,数据和指令共用一条总线)。
从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快。
根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值。
除了使用哈佛结构,Cortex-M3还具有其它显著的优点:
具有更小的基础内核,价格更低,速度更快。
与内核集成在一起的是一些系统外设,如中断控制器、总线矩阵、调试功能模块,而这些外设通常都是由芯片制造商增加的。
Cortex-M3还集成了睡眠模式和可选的完整的八区域存储器保护单元,只支持最新的Thumb-2指令集,最大限度降低了汇编器使用率。
Cortex-M3这样设计的优势在于:
免去Thumb和ARM代码的互相切换,对于早期的处理器来说,这种状态切换会降低性能。
Thumb-2指令集的设计是专门面向C语言的,且包括If/Then结构(预测接下来
的四条语句的条件执行)、硬件除法以及本地位域操作。
Thumb-2指令集允许用户在C代码层面维护和修改应用程序,C代码部分非常易于重用。
Thumb-2指令集也包含了调用汇编代码的功能:
Luminary公司认为没有必要使用任何汇编语言。
综合以上这些优势,新产品的开发将更易于实现,上市时间也大为缩短。
STM32F103RBT6的资源完全满足此次的嵌入式数码相框设计,通过设计电路开发一个支持TFT彩色液晶屏的驱动电路,在设计中搭配2.8寸TFT真彩触摸屏模块作为显示界面,同时支持一个SD卡(SPI方式)可用于存储图片、数据等。
2.2LCD模块
ThinFilmTransistor(薄膜场效应晶体管),是指液晶显示器上的每一液晶象素点都是由集成在其后的薄膜晶体管来驱动。
从而可以做到高速度、高亮度、高对比度显示屏幕信息,TFT-LCD(薄膜晶体管液晶显示器)是多数液晶显示器的一种。
TFT屏幕的优点如下:
大面积。
九十年代初第一代大面积玻璃基板(300mm×400mm)TFT-LCD生产线投产,到2000年上半年玻璃基板的面积已经扩大到了680mm×880mm),最近950mm×1200mm的玻璃基板也将投入运行。
高集成度。
用于液晶投影的1.3英寸TFT芯片的分辨率为XGA含有百万个象素。
分辨率为SXGA(1280×1024)的16.1英寸的TFT阵列非晶体硅的膜厚只有50nm,以及TABONGLASS和SYSTEMONGLASS技术,其IC的集成度,对设备和供应技术的要求,技术难度都超过传统的LSI。
功能强大。
TFT最早作为矩阵选址电路改善了液晶的光阀特性。
对于高分辨率显示器,通过0-6V范围的电压调节(其典型值0.2到4V),实现了对象元的精确控制,从而使LCD实现高质量的高分辨率显示成为可能。
TFT-LCD是人类历史上第一种在显示质量上超过CRT的平板显示器。
现在人们开始把驱动IC集成到玻璃基板上,整个TFT的功能将更强大,这是传统的大规模半导体集成电路所无法比拟的。
低成本。
玻璃基板和塑料基板从根本上解决了大规模半导体集成电路的成本问题,为大规模半导体集成电路的应用开拓了广阔的应用空间。
工艺灵活。
除了采用溅射、CVD(化学气相沉积)MCVD(分子化学气相沉积)等传统工艺成膜以外,激光退火技术也开始应用,既可以制作非晶膜、多晶膜,也可以制造单晶膜。
不仅可以制作硅膜,也可以制作其他的Ⅱ-Ⅵ族和Ⅲ-Ⅴ族半导体薄膜。
应用领域广泛。
以TFT技术为基础的液晶平板显示器是信息社会的支柱产业,技术可应用到正在迅速成长中的薄膜晶体管有机电致发光(TFT-OLED)平板显示器也在迅速的成长中。
TFT液晶显示屏亮度好、对比度高、层次感强、颜色鲜艳,其广泛应用于手机、MP4等消费品。
因此,本系统选用2.8英寸TFT-LCD屏(如图2-2所示)可显26万色,分辨率320*240,控制器为ILI9320,采用16位的80并口,配合触摸屏专用芯片XPT2046,可对屏幕进行触摸操作,更显智能化和个性化。
为了方便用户使用,我们存储方式采用兼容FAT的文件系统,同时该文件系统也兼容FAT32等电脑主流的文件系统方式进行存储。
图2-22.8英寸TFT-LCD模块
该模块的80并口有如下一些信号线:
CS:
TFT-LCD片选信号。
WR:
向TFT-LCD写入数据。
RD:
从TFT-LCD读取数据。
D[15:
0]:
16位双向数据线。
RST:
硬复位TFT-LCD。
RS:
命令/数据标志(0,读写命令;1,读写数据)。
TFT-LCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个I/O口。
另外我们还需要一个背光控制线来控制TFT-LCD的背光。
所以我们总共需要的I/O口数目为21个。
模块的控制器为ILI9320(可能为其他型号,但是他们的设置很相似,除了初始化序列有些区别,其他大都是一摸一样的,这里仅以9320为例介绍),该控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。
模块的16位数据线与显寸的对应关系为565方式,如下图所示:
图2-316位数据与显存对应关系图
最低5位代表蓝色,中间6位为绿色,最高5位为红色。
数值越大,表示该颜色越深。
接下来介绍一下ILI9320的几个重要命令,因为ILI9320的命令很多,这里不一一介绍。
这里我们要介绍的命令列表如下:
表2.1ILI9320常用命令表
R0,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。
而如果对它读操作,则返回的是控制器的型号。
这个命令最大的功能就是通过读它可以得到控器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。
因为93xx系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。
R3,入口模式命令。
我们重点关注的是I/D0、I/D1、AM这3个位,因为这3个位控制了屏幕的显示方向。
AM:
控制GRAM更新方向。
当AM=0的时候,地址以行方向更新。
当AM=1
的时候,地址以列方向更新。
I/D[1:
0]:
当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系如下图:
图2-4GRAM显示方向设置图
通过这几个位的设置,我们就可以控制屏幕的显示方向了。
R7,显示控制命令。
该命令CL位用来控制是8位彩色,还是26万色。
为0时
26万色,为1时八位色。
D1、D0、BASEE这三个位用来控制显示开关与否的。
当
全部设置为1的时候开启显示,全0是关闭。
我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。
R32,R33,设置GRAM的行地址和列地址。
R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。
当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。
R34,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。
该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。
R80~R83,行列GRAM地址位置设置。
这几个命令用于设定显示区域的大小,我们整个屏的大小为240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。
此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。
通过以上介绍,我们可以得出TFT-LCD显示需要的相关设置步骤如下:
1)设置STM32与TFT-LCD模块相连接的I/O。
这一步,先将我们与TFT-LCD模块相连的I/O口设置为输出,具体使用哪些I/O
口,这里需要根据连接电路以及TFT-LCD模块的设置来确定。
2)初始化TFT-LCD模块。
通过向TFT-LCD写入一系列的设置,来启动TFT-LCD的显示。
为后续显示字符和数字做准备。
3)通过函数将字符和数字显示到TFT-LCD模块上。
这里就是通过我们设计的程序,将要显示的字符送到TFT-LCD模块就可以了,这些函数将在软件设计部分向大家介绍。
通过以上三步,我们就可以使用TFT-LCD模块来显示字符和数字了,并且可以显示各种颜色的背景。
2.3SD存储卡模块
SD卡(SecureDigitalMemoryCard)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地应用于便携式装置上,例如数码相机、个人数码助理(PDA)和多媒体播放器等。
SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,此外它可存多种格式数据文件,具有很强的可扩展性;用户可方便使用SD卡读卡器对其进行用户信息修改。
2G金士顿SD卡实物如下图2-5所示。
SD卡一般支持两种操作模式:
SD卡模式与SPI模式。
主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。
SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。
SD卡的引脚排序如下图2-6所示:
图2-5KingstonSD卡 图2-6SD卡引脚排序图
SD卡引脚功能描述如下表所示:
表2.2SD卡引脚功能表
SD卡只能使用3.3V的I/O电平,所以,MCU一定要能够支持3.3V的I/O端口输出。
在SPI模式下,CS/MOSI/MISO/CLK都需要加10~100K左右的上拉电阻。
SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。
不过在发送CMD0之前,要发送>74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400KHZ。
本次硬件电路板使用的是SPI模式来读写SD卡,下面我们就重点介绍一下SD
卡在SPI模式下的相关操作。
SPI模式下几个重要的操作命令,如下表所示:
表2.3SPI模式下SD卡部分操作指令
其中R1的回应格式如下表所示:
表2.4SD卡R1回应格式
SD卡的典型初始化过程如下:
1)初始化与SD卡连接的硬件条件(MCU的SPI配置,I/O口配置);
2)上电延时(>74个CLK);
3)复位卡(CMD0);
4)激活卡,内部初始化并获取卡类型(CMD1(用于MMC卡)、CMD55、CMD41);
5)查询OCR,获取供电状况(CMD58);
6)是否使用CRC(CMD59);
7)设置读写块数据长度(CMD16);
8)读取CSD,获取存储卡的其他信息(CMD9);
9)发送8CLK后,禁止片选;
这样我们就完成了对SD卡的初始化,这里面我们一般设置读写块数据长度为
512个字节,并禁止使用CRC。
在完成了初始化之后,就可以开始读写数据了。
SD卡读取数据,这里通过CMD17来实现,具体过程如下:
1)发送CMD17;
2)接收卡响应R1;
3)接收数据起始令牌0XFE;
4)接收数据;
5)接收2个字节的CRC,如果没有开启CRC,这两个字节在读取后可以丢掉;
6)8CLK之后禁止片选;
以上就是一个典型的读取SD卡数据过程,SD卡的写与读数据差不多,写数据通过CMD24来实现,具体过程如下:
1)发送CMD24;
2)接收卡响应R1;
3)发送写数据起始令牌0XFE;
4)发送数据;
5)发送2字节的伪CRC;
6)8CLK之后禁止片选;
第三章软件介绍
3.1安装MDK3.8a
找到MDK的安装文件并点击安装,点击之后出现界面,选择Next:
选择”IAgree…Licenceagreement”同意协议,选择安装目录,这里选择安装的目录后,点击Next即可,输入邮箱之类的信息即可,点击Next开始安装,按图配置,然后点击Finish,左面会出现keil快捷图标。
图3-1完成安装
3.2注册License
在MDK针对每台机会有一个CID,copy这个CID到注册机处生成LicenseKey,然后再将这个LicenseKey添加到MDK里面去注册。
右键点击左面的MDK快捷方式,选择“以管理员身份运行”。
点击:
File->LicenseManagement,弹出一个LicenseManagement界面,copy界面中的(CID):
图3-2CID
打开目录为ALIENTEK开发板资料\软件\MDK3.80A\注册下的注册机