嵌入式系统原理与应用文档格式.docx
《嵌入式系统原理与应用文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与应用文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![嵌入式系统原理与应用文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/27/45968e56-47a5-4893-a6b8-d9395e03df68/45968e56-47a5-4893-a6b8-d9395e03df681.gif)
电子相册相比传统相册而言,具有存储容量大、操作简单方便、外形美观、能够动态显示图片、易于长期保存等突出特点,因此受到越来越多的人群的喜爱,包括一些商家也在运用这些数码产品当作产品,比如婚纱摄影的公司把电子相册当作产品开始加在套系中。
这种既新潮又方便携带的数码产品发展速度很快,更新内存大小和外观、速度等方面也越来越快,而且价格不是很贵,性价比很高[3]。
其主要适用人群也有很多,家庭或者单位都可以。
观赏性很强,而且性价比很高,同时这个产业有较强的发展势头。
因此数码相册设计课题能够使我结合课本知识了解数码相册的基本工作模块和基本原理,做到课本知识与社会需求紧密结合,活学活用所学知识,紧跟时代潮流的意义[4]。
数字摄影的兴起不可避免地引起了数码相框的发展,因为仅有不到35%的数码照片被打印出来。
数码相框的基本原理就是采用普通相框的造型,把原来相框中间的照片部分换成液晶显示屏,配上电源,存储介质等,使得同一个相框内可以循环播放照片,比普通照片的单一显示功能更有优势。
从2007年开始,数码相框的市场关注度开始激增。
在2008年,数码相框市场呈现高速发展的态势,本课题的研究具有极高的潜在市场价值。
此外,本设计属于数字影音娱乐产品,需要较为强劲的处理器进行图像解码的工作,而STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性能、杰出的功耗控制和极低的开发成本等特点。
因此,进行基于STM32平台的数码相框系统的设计具有重要的理论意义和实用价值[5]。
1.2电子相册的发展
基于STM32F103的电子相框系统读取SD卡中的图像文件通过LCD屏幕将其显示。
系统主要由SD驱动、LCD驱动和功能控制模块组成。
SD驱动主要由SD接口驱动程序;
LCD驱动主要由LCD屏驱动芯片的驱动程序和图片显示程序组成;
功能控制模块包括了系统初始化,驱动程序调用等功能,功能控制模块是系统的主模块。
在介绍了文件系统与图像操作的基础上逐步说明了整个系统的实现。
整个系统的设计以模块化为基础,易于升级。
未来数码相框的发展将向两极分化。
一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;
另一部分产品将会添加一些新的功能,如WiFi,还可即时报告天气、股票等信息,从而有望成为“桌面信息中心”。
2008年及今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。
未来几年,数码相框的市场将处在逐渐走向成熟期的阶段,其产销量和市场需求依然将保持大幅度的增长,在未来的三年内,市场尚无萎缩的可能。
但数码相框拓展中国市场需克服两大难点:
一是价格;
二是拓展应用空间。
价格下降是必然趋势,中国消费者接受只是时间的问题,而根据中国消费者的需求和特点,开发出相应的应用产品,则是需要数码相框厂商亟待解决的问题[6]。
1.3课题设计整体功能
本课题是基于ARM单片机STM32F103RB的存储程序控制,从SD卡读取图片,输出到TFT-LCD上显示,同时通过按键可以切换自动循环播放,上翻页,下翻页以及通过按键控制照片。
从SD卡读取图片,输出到LCD上显示,该电子相册可以实现以下功能:
1)实现SD内的照片循环播放;
2)通过按键控制暂停,开始,上翻,下翻;
3)实现外设每个LED对应一张照片;
4)通过外设按键控制任意图片显示;
5)软件运行与硬件调试。
2电子相册硬件模块
2.1STM32开发板
STM32系列闪存微控制器是意法半导体公司(ST)基于ARM公司具有突破性的Cortex-M3内核的处理器,该处理器是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。
此次设计采用的具体型号是STM32F103RBT6,如图2.1所示[7]。
图2.1STM32开发板
STM32F103RBT6嵌入式处理器具有以下特点:
1)32位RISC性能处理器;
2)32位ARMCortex-M3结构优化;
3)72MHZ运行频率,单周期访问时速度可达1.25DMIPS/MHz;
4)硬件除法和单周期乘法;
5)快速可嵌套中断,6~12个时钟周期;
6)具有MPU保护设定访问规则;
7)片内具有256KBFLASH,48KBRAM;
8)80个快速I/O端口,16个I/O可映射到外部中断,几乎所有的I/O可以忍受5V电压;
9)片上集成12BitA/D、D/A、PWM、CAN、USB、SDIO、FSMC等资源;
ARMCortex-M3是一种基于ARM7v架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下,数据和指令共用一条总线)。
从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快。
根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值[8]。
除了使用哈佛结构,Cortex-M3还具有其它显著的优点:
具有更小的基础内核,价格更低,速度更快。
与内核集成在一起的是一些系统外设,如中断控制器、总线矩阵、调试功能模块,而这些外设通常都是由芯片制造商增加的。
Cortex-M3还集成了睡眠模式和可选的完整的八区域存储器保护单元,只支持最新的Thumb-2指令集,最大限度降低了汇编器使用率。
Cortex-M3这样设计的优势在于:
免去Thumb和ARM代码的互相切换,对于早期的处理器来说,这种状态切换会降低性能[9]。
Thumb-2指令集的设计是专门面向C语言的,且包括If/Then结构(预测接下来的四条语句的条件执行)、硬件除法以及本地位域操作。
Thumb-2指令集允许用户在C代码层面维护和修改应用程序,C代码部分非常易于重用[10]。
Thumb-2指令集也包含了调用汇编代码的功能:
Luminary公司认为没有必要使用任何汇编语言。
综合以上这些优势,新产品的开发将更易于实现,上市时间也大为缩短。
STM32F103RBT6的资源完全满足此次的嵌入式数码相框设计,通过设计电路开发一个支持TFT彩色液晶屏的驱动电路,在设计中搭配2.8寸TFT真彩触摸屏模块作为显示界面,同时支持一个SD卡可用于存储图片、数据等。
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技术[11],其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等电脑主流的文件系统方式进行存储[12]。
图2-22.8英寸TFT-LCD模块
该模块共有如下一些信号线:
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万色)下的显存量。
2.3外设
通过外接按键实现照片控制,LED指示当前显示照片,LED焊接外加下拉电阻,按键通过对角线链接正负极以使其正常工作。
外设如图2.3所示。
图2.3外设
2.4硬件设计
本系统采用基于ARMCortex-M3内核的STM32作为主控制器,外扩SD卡以及TFT彩屏。
系统通过文件系统读取SD卡内存储的图片,把多幅图片默认以幻灯片的形式从TFT屏上显示出来,可以通过按键进行控制。
同时,通过STM32内部的读写显示模块在LCD屏的左上角显示图片的名字,再通过我们自己焊接的外设(包括按键,LED)来控制和指示照片的显示情况,并且每张图片都对应一个按键,按下按键可以控制对应的照片显示在LCD屏幕。
系统框图如图2.4所示。
其中,外设按键初始化为默认上拉模式,LED初始化为默认通用推挽模式。
本次课程设计主要使用的是直接对寄存器操作的模设计对电子相册的程序部分进行设计。
图2.4系统框图
3程序设计
3.1主程序设计
本系统先对STM32及其外设进行初始化,再对界面进行初始化按键具体功能如下:
按键KEY0:
播放下一张图片;
按键KEY1:
播放上一张图片;
按键WK_UP:
切换幻灯片模式与手动显示模式;
外设上的每一个按键对应一张照片,每一个照片对应一个LED灯;
按键RESET:
系统复位。
3.2GPIO端口寄存器定义
GPIO总线扩展器,是利用工业标准I2C、SMBus™或SPI™接口简化了I/O口的扩展。
当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
STM32单片机,有了端口才能和外界联系,学会了端口控制,才能更好地利用外设。
对于寄存器的输入输出端口定义需要对寄存器配置相应的端口值。
寄存器相应配置见下表3.1和表3.2所示:
表3.1(低寄存器端口配置)
GPIOx_CRL(端口配置低寄存器x=A…E)
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
CNF7
[1:
0]
MODE7
CNF6
MODE6
CNF5
MODE5
CNF4
MODE4
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
CNF3
MODE3
CNF2
MODE2
CNF1
MODE1
CNF0
MODE0
在输入模式[1:
0]=00下:
00(模拟输入),01(浮空输入(复位后状态),10(上/下拉输入),11(保留)
在输出模式(MODE[1:
0]>
00)下:
00(通用推挽),01(通用开漏),10(复用推挽),11(复用开漏)
表3.2(高寄存器端口配置)
GPIOx_CRH(端口配置高寄存器x=A…E)
CNF15
CNF14
CNF13
CNF12
CNF11
CNF10
CNF9
MODE9
CNF8
MODE8
对于本次课程设计中分别设置PA_1为暂停循环,开始循环按键;
PA_13为上翻页;
PA_15为下翻页。
相应端口定义程序设计如下:
GPIOA->
CRL&
=0XFFFFFFF0;
//PA0设置成输入
CRL|=0X00000008;
CRH&
=0X0F0FFFFF;
//PA13,15设置成输入
CRH|=0X80800000;
ODR|=1<
<
13;
//PA13上拉,PA0默认下拉
15;
//PA15上拉
3.3部分功能程序设计(开始、暂停、上翻、下翻)
TFT-LCD显示需要的相关设置步骤如下:
1)设置STM32与TFT-LCD模块相连接的I/O。
这一步,先将我们与TFT-LCD模块相连的I/O口设置为输出,具体使用哪些I/O口,这里需要根据连接电路以及TFT-LCD模块的设置来确定。
2)初始化TFT-LCD模块。
通过向TFT-LCD写入一系列的设置程序,来启动TFT-LCD的显示,读取SD卡图片,并为后续显示图片做准备。
4)初始化按键接入的GPIO口
通过向开发板上的GPIO口写入相应需要使用的GPIO初始化程序,对GPIO口进行调用,并定义GPIO端口的输入输出模式。
3)通过函数将图片显示到TFT-LCD模块上。
4)通过函数调用控制按键相应的GPIO口输入从而实现按键控制照片的开始循环,暂停上翻页,下翻页。
这里就是通过我们设计的程序,将要显示的图片送到TFT-LCD模块就可以了。
通过以上几步,我们就可以使用TFT-LCD模块来显示图片,并通过按键控制显示的状态。
LCD显示实现图片循环,暂停,翻页流程图如图3.3所示
图3.3部分功能流程图
4硬件运行与调试
开机按下WK_UP键硬件开始运行LCD屏幕初始化显示制作者基本信息并开始加载图片如图4.1所示
图4.1开机初始化
开始运行,以幻灯片模式开始显示照片当所有照片循环显示一轮时LED灯亮3秒提示循环一周如图4.2所示。
图4.2开始运行
再次按下WK_UP键幻灯片模式暂停,定格在当前显示照片,左上角显示照片名字LED灯指示当前为暂停状态如图4.3所示。
图4.3暂停循环
按下KEY1或KEY0进行上翻页或下翻页操作,翻页时LED灯闪烁指示当前照片正在切换如图4.4所示。
图4.4翻页功能
5结束语
经过了为期两个星期的课程设计,今天终于基本完成了,期间参考了网上相关资料,上届师兄师姐的课程设计论文,还有老师的细心教导,以及查阅了相关书籍,这期间最大的感受,就是做好课程设计,不仅要细心,更要有耐心,而且富有责任心。
细心能避免自己因错误,而需要大量程序修改,浪费精力和时间。
耐心就是得坚持做下去,一步一步做下去,虽然还有好些问题不大懂,理解不透,但是自己坚持下来了,就是最大的胜利而在课程设计期间,在设计中,对于其中过程的步骤该如何进行的考虑,锻炼我们处理事情的能力。
同时在这次设计,我也学到了做事情要一步一个脚印,细心处理每个数据,这样才可以顺利地完成设计。
作为一名通信专业的学生,希望多学点这方面的知识,总之,通过这次课程设计,自己还是有收获的,希望自己以后做任何事都要有这态度。
参考文献
[1]周立功等.ARM嵌入式系统基础教程[M].北京:
北京航空航天大学出版,2009.4.
[2]任松岩.基于ARM的数码相框的设计[J].电子制作,2010.3.
[3]梁明亮.齐公博.基于ARM9的简易数码相框[J].电子制作,2010.10.
[4]王永佳.基于STM32的数码相框设计[D].南京:
东南大学,2012.5.
[5]谭浩强.C程序设计[M].北京:
清华大学出版社,2010.5.
[6]陈章龙,唐志强.嵌入式技术与系统[M].北京:
北京航空航天大学出版社,2014.2.
[7]张筑生.微分半动力系统的不变集[D].北京:
北京大学数学系数学研究所,2014.
[8]葛家样.林志军.现代西方财务会计理论[M].厦门:
厦门大学出版社,2001.4.2.
[9]Great.Z.MasteringEnglishLiterature[M].London:
Macmillan,2012.
[10]王海提.浅议会计信息披露模式[J].财政研究,2012.10.5.
[11]夏鲁.高等学校毕业论文教学情况调研报告[J].高等理科教育,2013.1.
[12]Shannon,E.R.&
D.C.Oliver.Thestructureofcolorspaceinnamingandmemoryoftwolanguages[J].ForeignLanguageTeachingandResearch,2009.
附录
主程序部分:
intmain(void)
{
u8i;
u8key;
FileInfoStruct*FileInfo;
u16pic_cnt=0;
//当前目录下图片文件的个数
u16index=0;
//当前选择的文件编号
u16time=0;
Stm32_Clock_Init(9);
//系统时钟设置
delay_init(72);
//延时初始化
uart_init(72,9600);
//串口1初始化
LCD_Init();
//初始化液晶
KEY_Init();
//按键初始化
LED_Init();
//LED初始化
SPI_Flash_Init();
//SPIFLASH使能
if(Font_Init())//字库不存在,则更新字库
{
POINT_COLOR=RED;
LCD_ShowString(60,50,"
MiniSTM32"
);
LCD_ShowString(60,70,"
FontERROR"
while
(1);
}
POINT_COLOR=BLACK;
Show_Str(60,30,"
嵌入式课程设计"
16,0);
Show_Str(80,80,"
电子相册"
Show_Str(80,120,"
通信一班"
Show_Str(60,270,"
王航张欢黄运德"
Show_Str(70,300,"
2014年6月20日"
SD_Initialize();
LED0=1;
while(FAT_Init())//FAT错误
{
i=SD_Initialize();
if(i)Show_Str(70,180,"
请插入SD卡!
"
//SD卡初始化失败
delay_ms(500);
LCD_Fill(60,130,240,170,WHITE);
//清除显示
LED0=0;
LED0=1;
while(SysInfoGet
(1))//得到图片文件夹
Show_Str(60,130,"
图片文件夹未找到!
FAT_Init();
SD_Initialize();
LED0=!
LED0;