嵌入式 电子相册解读.docx

上传人:牧羊曲112 文档编号:5179245 上传时间:2023-06-11 格式:DOCX 页数:23 大小:380.71KB
返回 下载 相关 举报
嵌入式 电子相册解读.docx_第1页
第1页 / 共23页
嵌入式 电子相册解读.docx_第2页
第2页 / 共23页
嵌入式 电子相册解读.docx_第3页
第3页 / 共23页
嵌入式 电子相册解读.docx_第4页
第4页 / 共23页
嵌入式 电子相册解读.docx_第5页
第5页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《嵌入式 电子相册解读.docx》由会员分享,可在线阅读,更多相关《嵌入式 电子相册解读.docx(23页珍藏版)》请在三一办公上搜索。

1、1956GUILIN UNIVERSITY OF TECHNOLOGY信息科学与工程学院基于STM32的电子相册系统设计专业班级:通信工程12-2班姓 名:覃模广号:3120731231教 师:梁贵芹摘 要本设计是一款基于STM32F103的电子相框系统读取SD卡中的图像文件通过 LCD屏幕将其显示。系统主要由SD驱动、LCD驱动和功能控制模块组成。SD驱 动主要由SD接口驱动程序、FAT文件操作程序组成;LCD驱动主要由LCD屏驱动 芯片的驱动程序和图片显示程序组成;功能控制模块包括了系统初始化,显示初 始页面,显示方式的设置,驱动程序调用等功能,功能控制模块是系统的主模块。 在介绍了文件系

2、统与图像操作的基础上逐步说明了整个系统的实现。文件系统支 持FAT16/32,图像系统支持BMP等多种文件格式。整个系统的设计以模块化为基 础,易于升级。关键词:STM32F103电子相框系统SD卡LCD屏幕 FAT文件系统嵌入式系统的特点简介嵌入式系统具有以下几个重要特征: 系统内核小,由于嵌入式系统一般应用于小型电子装置,系统资源相对有限, 所以内核较之传统的操作系统要小得多。比如,ENEA公司的OSE分布式系统, 内核只有5KB,而Windows的内核则要大得多。 专用性强,嵌入式系统的个性化很强,其中的软件系统和硬件结合非常紧密, 一般要针对硬件进行系统的移植,同时针对不同的任务,往往

3、需要对系统进行较 大的更改。另外,程序的编译下载要和系统相结合。 嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能的设计及 实现过于复杂,这样既利于控制系统成本,也利于实现系统安全。 高实时性的操作系统软件是嵌入式软件的基本要求,而且软件要求固化存储, 以提高速度,软件代码要求高质量和高可靠性。 嵌入式软件开发要想走向标准化,就必须使用多任务操作系统。嵌入式系统的 应用程序可以没有操作系统而直接在芯片上运行,但为了更合理的调度多任务, 利用系统资源、系统函数,用户必须自行选配RTOS开发平台。 执行的实时性、可靠性,并减少开发时间,保障软件质量。嵌入式系统开发需 要专门的开发工具和

4、环境。由于嵌入式系统本身不具备自主开发能力,即使完成 设计后,用户通常也不能对其中的程序功能进行修改,因此必须有一套基于通用 计算机的开发工具和环境才能进行开发。任务分析-确定方案-重难点-软件设计-硬件设计调试一 *任务分析*基于STM32设计一个电子相册系统,系统通电后能够正常进行图片的演示并且可 以通过按键控制上下张照片显示。二*确定方案*基于ARM单片机STM32F103RBT6的存储程序控制,从SD卡读取图片,解码后 输出到TFT-LCD上显示,同时通过按键可以控制上下张显示。1)硬件电路原理图的绘制;2)硬件资料的研究;3)软件方案的选择与论 证;4)软件运行与调试;三*重难点*F

5、AT文件系统、TFT-LCD显示方法以、ARM单片机STM32F103RBT6开发版的应用 和SD存储卡模块的正确使用。通过查相关的资料得:3.1 SD存储卡模块SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种 基于半导体快闪记忆器的新一代记忆设备,它被广泛地应用于便携式装置上,例 如数码相机、个人数码助理(PDA)和多媒体东播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发 研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、 快速数据传输率、极大的移动灵活性以及很好的安全性,此外它可存多种格式数 据文

6、件,具有很强的可扩展性;用户可方便使用SD卡读卡器对其进行用户信息 修改。2G金士顿SD卡实物如下图2-5所示。SD卡一般支持两种操作模式:SD卡模式与SPI模式。主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传 输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相 比就是丧失了速度。SD卡的引脚排序如下图2-6所示1 2 3 4 56 7 8&图2-5 Kingston SD卡脚排序图图2-6 SD卡引SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效 电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发

7、送74个时钟, 这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK 用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大 不能超过400KHZ。3.2 LCD模块Thin Film Transistor(薄膜场效应晶体管),是指液晶显示器上的每一液 晶象素点都是由集成在其后的薄膜晶体管来驱动。从而可以做到高速度、高亮度、 高对比度显示屏幕信息,TFT-LCD (薄东南大 膜晶体管液晶显示器)是多数液晶显示器的一种。TFT屏幕的优点如下:1).大 面积2).高集成度3).功能强大4).低成本5).工艺灵活6).应用领 域广泛TFT液晶显示屏亮度

8、好、对比度高、层次感强、颜色鲜艳,其广泛应用于手 机、MP4等消费品。因此,本系统选用2.8英寸TFT-LCD屏(如图2-2所示)可 显26万色,分辨率320*240,控制器为ILI9320,采用16位的80并口,配合触 摸屏专用芯片XPT2046,可对屏幕进行触摸操作,更显智能化和个性化。为了方 便用户使用,我们存储方式采用兼容FAT的文件系统,同时该文件系统也兼容 FAT32等电脑主流的 文件系统方式进行存储。2.8英寸TFT-LCD模块该模块的80并口有如下一些信号线:CS: TFT-LCD片选信号。WR:向TFT-LCD写入数据。RD:从TFT-LCD读取数据。D15:0: 16位双向

9、数据 线。RST:硬复位TFT-LCD。 RS:命令/数据标志(0,读写命令;1,读写数 据)。TFT-LCD模块的RST信号线是直接接到STM32的复位脚上,并不由软 件控制,这样可以省下来一个I/O 口。另外我们还需要一个背光控制线来控制 TFT-LCD的背光。所以我们总共需要的I/O 口数目为21个。该控制器自带显存, 其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。 模块的16位数据线与显寸的对应关系为565方式,如下图所示16位数据与显存对应关系图最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜 色越深。接下来介绍一下I

10、LI9320的几个重要命令,因为ILI9320的命令很多, 这里不一一介绍。通过以上介绍,我们可以得出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模块就可以 了,这

11、些函数将在软件设计部分向大家介绍。通过以上三步,我们就可以使用 TFT-LCD模块来显示字符和数字了,并且可以显示各种颜色的背景。3.3液晶显示部分电路设计液晶显示部分主要由微控制器STM32F103RBT6驱动AM240320LSTNQW-00H完成 人机界面状态的显示,通过发送命令字,完成液晶模块的初始化,完成对内容的 显示,显示部分的硬件电路接口图如图2所示lOQtiFOOnFk 亍r L 13,_L G.OlpFCy IDDnF4)4244GNDC*50岫轩BOO】。.姬RST 7PAOJfU甲PBOPUPB1PA?PB2/BQ0T1PA3PB3/JTD0PHPBVJNTRSTPASF

12、B5PA6PB6PA?PB7F-CS U 17 q SPIL5CI j: 甲【5。项 spiisrnJLi111U DO TTjT Is D2_Dpi157D5D23蜀_D6D3 _45922叫_* 皿DO 161 P862 D9JFdIo jpil 33 D123j DI 335 PH3 & DI 51)6PAg PA9 PAID PAH PA12PAB/JTMS/SVD1O PA14/JTC&/SVCLC PA15/JTDIOSC W/PDO OSC.OUT/PDl8 9 0 12 3 4 5 0 12 3 4 5 6 7 B B I 11 1A 11 11 IX c c- PL- c c

13、- c- nL PPBBBBBBptpppiHPPP p ppp p pPC8BOOTHPC9NRSTPC10penPC12VB.r PCI3.TWER.ITCPC14.QSC32JSVP。 PC15-OSC32-OLTVDD-2V$VM.3VSS-2VDD_4VSS.3VSS.4VDDAV5SASTH32F1O3R8T0D7 81?FD1U 11Dll 12dU bDI J H8 LEDO DI4 15dlee-专-1124wlLH3i皿乂乂 HL2 D6 51918 sllLfl 2 OH吾1812系统液晶接口原理图3.4 ARM单片机STM32F103RBT6开发版简介STM32F103

14、RBT6使用高性能的ARM Cortex-M3 32位的RISC内核,工作频 率为72 MHz,内置高速存储器(高达128 K字节的闪存和20 K字节的SRAM), 丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含2 个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的 通信接口 :多达2个I2C和SPI、3个USART、一个USB和一个CAN.供电电压2.03.6 V, 一系列的省电模式保证低功耗应用的要求3.5 FAT文件系统常用的文件系统有FAT12/16/32等,FAT12是最古老的文件系统,只能管理8 M左右的空间。现在基本淘汰了。FAT

15、16则可以管理2 G的空间(通过特殊处理 也能管理2 G以上的空间),而FAT32则能管理到2 TB(2 048 GB)的空间。 FAT32较FAT16的优势还在于FAT32采用了更小的簇,可以更有效的保存信息, 而不会造成多的浪费。本系统设计过程中采用了 FAT32文件系统,它的主要组成部分如下:1、MBR称为主引导记录区,该区存储了分区表等信息,位于SD卡的扇区0 (物理扇区),在其分区信息里面记录了 DBR所在的位置,SD卡一般只会有一个分区,所以也就只要找到分区1的DBR所在位置就可以了。2、DBR称为操作系统引导记录区,如果没有MBR,那么DBR就位于0扇区;如 果有,则必须通过MB

16、R区得到DBR所在的地址,然后读出DBR信息。在DBR区, 可以知道每个扇区所占用的字节数、每个簇的扇区数、FAT表的份数、每个FAT 表的扇区敷、跟目录簇号、FAT表1所在的扇区等一系列非常重要的信息。3、FAT称为文件分配表(FAT表),一个卡上会存在2个FAT表,一个用作 备份,一个使用。FAT表一般紧随DBR,另一个FAT表则紧随第一个FAT表,这样 只要知道了第一个FAT表的位置及大小,那么第二个FAT表的位置也就确定了。 FAT表记录了每个文件的位置和区域,是一种链式结构。4、FDT称为文件根目录表,这个区域固定为32个扇区,假设每个扇区为512 个字节。那么根目录下最多存放512

17、个文件(假设都用短文件名存储,每个短文 件名占32个字节)。文件目录表是另一个重要的部分,FAT文件系统中(仅以 短文件名介绍),文件目录项在目录表下以32个字节的方式记录。四、软件设计由于本设计直接在ARM单片机STM32F103RBT6开发版实现,而且程序的工程 是直接通过利用现有的通过修改而来的,所以在这里只是重点说明主函数程序。4.1这是主程序的流程图开始KJ显和初始信息4.2主函数如下:#define TEXTSize);#include stm32f10x.h#include hardware.h”#include usart.h”#include ili932x.h#includ

18、e fat.h”#include picture.h”#define EEPROM_WriteAddress0#define EEPROM_ReadAddress0(Get_Size(TEXT_Buffer)-1)#define Get_Size(a) (sizeof(a) / sizeof(*(a)uint8_t TEXT_Buffer=MINI-STM32 SD TEST);uint8_t REXT_BufferTEXT_Size;uint8_t Fill_Buffer=( extern uint8_t gImage_11;static _IO uint32_t TimingDelay;v

19、oid GPIO_Configuration(void);void NVIC_Configuration(void);void Time_Display(uint32_t TimeVar);uint8_t KEY_Scan(void);void Delay(_IO uint32_t nTime);int main(void) /主函数(void) /主函数uint8_t i;uint8_t key;FileInfoStruct *FileInfo;uint16_t pic_cnt=0;/当前目录下图片文件的个数uint16_t index=0; /当前选择的文件编号uint16_t time=

20、0;SystemInit();/配置系统时钟 72M(包括 clock, PLL and Flashconfiguration)while(SysTick_Config(SystemFrequency / 1000); /Systick 配置延 时 n*msGPIO_Configuration();/ 引脚配置USART_Configuration();异步通信初始化NVIC_Configuration();/系统中断配置LCD_Init();/ LCD 初始化LCD_Clear(WHITE);清屏SPI_Configuration(); /SPI 初始化M45PE_Init();/M45PE

21、16 初始化SD_Init();/SD 卡初始化USART_Send_Str(menu);POINT_COLOR=RED;Show_Str(60,50,Mini STM32 开发板,16,0);Show_Str(60,70,简易电子相册 ,16,0);Show_Str(60,90,通信 12-2 班,16,0);Show_Str(60,110,2015 年 7 月 1 日 ,16,0);SD_Init();while(FAT_Init()/FAT 错误(Show_Str(60,130,文件系统错误!”,16,0);i= SD_Init();if(i)Show_Str(60,150,SD 卡错误

22、!”,16,0);/SD 卡初始化失败Delay(500);LCD_Fill(60,130,240,170,WHITE);/清除显示Delay(500);LED1=!LED1;while(SysInfoGet(1)/得到图片文件夹(Show_Str(60,130,图片文件夹未找到!,16,0);Delay(500);FAT_Init();SD_Init();LED1=!LED1;LCD_Fill(60,130,240,170,WHITE);/清除显示Delay(500);Show_Str(60,130, 开始显示.,16,0);Delay(1000);Cur_Dir_Cluster二PICCL

23、USTER;while(1)(pic_cnt=0;Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPEG|T_JPG|T_BMP,&pic_cn t);/获取当前文件夹下面的目标文件个数if(pic_cnt=0)/没有图片文件(LCD_Clear(WHITE);/清屏while(1)(if(time%2=0)Show_Str(32,150,没有图片,请先 COPY 图片到SD卡的PICTURE文件夹,然后后重启!,16,0);else LCD_Clear(WHITE);time+;Delay(300);FileInfo=&F_Info0;/开辟暂存空间.in

24、dex=1;while(1)(Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPEG|T_JPG|T_BMP,&index) ;/得到这张图片的信息/LCD_Clear(WHITE);/清屏,加载下一幅图片的时候,一定清屏AI_LoadPicFile(FileInfo,0,0,240,320);/显示图片POINT_COLOR=RED;while(1)/延时 3s(key=KEY_Scan();if(key=1)break;/下一张else if(key=2)/上一张(if(index1)index-=2;else index=pic_cnt-1;break

25、;Delay(1);time+;if(time%100=0)LED1=!LED1;if(time3000)(time=0;break;index+;if(indexpic_cnt)index=1;/显示第一副,循环/* * 函数名称:GPIO_Configuration*功能描述:配置IO 口* 作者:Dream*日期:2010年12月17日*/void GPIO_Configuration(void)(GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph

26、_GPIOB| RCC_APB2Periph_USART1, ENABLE); / 使能端 口时钟,重要!/* 配置 LED1、LED2 引脚的功能 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/通用推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / 输出最 大频率为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);/初始化 PA2、

27、PA3/* 配置 KEY1、KEY2 引脚的功能 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;/ 上拉输入模式GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化 PA0、PA1/* 配置 USART1 Tx (PA9) */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/ 复用

28、开漏输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/ 输出最大频率为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);/* 配置 USART1 Rx (PA10) */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; / 浮空输 入模式GPIO_Init(GPIOA, &GPIO_InitStructure);/PB0映射到通道8作为模拟输入引脚,ADC转换G

29、PIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOB, &GPIO_InitStructure);/*函数名称:KEY_Scan*功能描述:按键处理函数0,没有任何按键按下1,KEY1按下2,KEY2按下* 作者:Dream*日期:2010年12月17日*/uint8_t KEY_Scan(void)(static uint8_t KEY_UP=1; 按键按松开标志if(KEY_UP&(KEY1=0|KEY2=0)(Delay(10);/去抖动KE

30、Y_UP=0;if(KEY1=0)return 1;else if(KEY2=0)return 2;else if(KEY1=1&KEY2=1)KEY_UP=1;return 0;无按键按下/*函数名称:Delay*功能描述:用Systick延时* 作者:Dream*日期:2010年12月17日*/void Delay(_IO uint32_t nTime)(TimingDelay = nTime;while(TimingDelay != 0);/* 函数名称:TimingDelay_Decrement*功能描述:Systick中断进入函数* 作者:Dream*日期:2010年12月17日*/

31、void TimingDelay_Decrement(void)(if (TimingDelay != 0x00)(TimingDelay-;/* 函数名称:NVIC_Configuration*功能描述:系统中断管理*/void NVIC_Configuration(void)(#ifdef VECT_TAB_RAM/* Set the Vector Table base location at 0x20000000 */NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH */* Set the Vector

32、Table base location at 0x08000000 */NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t* file, uint32_t line)(/* User can add his own implementation to report the file name and line number,ex: printf(Wrong parameters value: file %s on line %drn, file,

33、line) */* Infinite loop */while (1)(#endif4.3程序工程如右图所示:编译没有问题后用Jlink下载。打开JFlashARM 软件,选定对应的芯片,步凑如下图a图片显示实验口- 、CM SISMammain.cstm32flOx_it.cstm32flOx_coi ccunrrion.hUSART.CLCD Driver因 ILI932X.C团 hzl&.c:加 bmp.cM45PE160SEGGERJ第 1 步.?2)istudyqianrustiLlnkARM V4File Edit View口a口口口偷SD DriverFATTEXTPicture

34、Window HelpSysFileSTM32F10x_StclPeriphDocumentationProject setting?Gifeftfiral Target lEitei*&ce CFI| Flash | PrcducliciD, |EJUseJM 翊陷JLTAIRICP1山艺 |lrislepirSelect device神加妙IQf plifManUsctuefI DevicegFlash 细 |RAMsiasI$TM32F1 倒opt 晒$6555? BjCa!e:-M3STST20 KB43 KBSTM32F10GRB Oowopt bytes)STM32F10GRCi?

35、iom帅25$ KB五、硬件设计调试5.1打开hex文件并把程序成功下载到系统板之后,系统板上的LED开始闪烁。 按下板子上的RESET键,系统开始工作。系统自动按序显示图片时(3s自动显示),若按下key2键,则显示上一张图片,按下keyl键,则显示下一张图片。5.2实物图:六、总结由于本次短时间的设计作品,因此这个成品大都是通过修改而来,并且其 中还有很多内在的知识未能深入的理解,只是能实现要求的功能。在这代码中还 存在一个漏洞,比如当要显示的中文在Flash字库中不存在那么怎么办?因此, 代码存在缺陷!解决的方法:就是更新字库,检测是否有,再显示相关的提示。 这次也是第一次接触到嵌入式S

36、TM32F103,了解尚浅,所以往后的路还很长呢!读书的好处1、行万里路,读万卷书。2、书山有路勤为径,学海无涯苦作舟。3、读书破万卷,下笔如有神。4、我所学到的任何有价值的知识都是由自学中得来的。达尔文5、少壮不努力,老大徒悲伤。6、黑发不知勤学早,白首方悔读书迟。颜真卿7、宝剑锋从磨砺出,梅花香自苦寒来。8、读书要三到:心到、眼到、口到9、玉不琢、不成器,人不学、不知义。10、一日无书,百事荒废。陈寿11、书是人类进步的阶梯。12、一日不读口生,一日不写手生。13、我扑在书上,就像饥饿的人扑在面包上。高尔基14、书到用时方恨少、事非经过不知难。陆游15、读一本好书,就如同和一个高尚的人在交谈歌德16、读一切好书,就是和许多高尚的人谈话。笛卡儿17、学习永远不晚。高尔基18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。刘向19、学而不思则惘,思而不学则殆。孔子20、读书给人以快乐、给人以光彩、给人以才干。培根

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号