电子相册.docx_第1页
电子相册.docx_第2页
电子相册.docx_第3页
电子相册.docx_第4页
电子相册.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

目录摘要3引言3第一章系统概述5第二章硬件设计62.1 SD卡62.2 TFT-LCD72.3 FATFS文件系统9第三章软件设计103.1实现的功能103.2SD卡的子程序123.3LCD的子程序123.4图片解码的子程序13第四章心得体会14附录15摘要摘要: 基于STM32F407 的电子相框系统读取 SD 卡中的图像文件通过 LCD 屏幕将其显示。系统主要由 SD 驱动、LCD 驱动和功能控制模块组成。SD 驱动主要由 SD 接口驱动程序、FAT 文件操作程序组成; LCD 驱动主要由 LCD 屏驱动芯片的驱动程序和图片显示程序组成; 功能控制模块包括了系统初始化,驱动程序调用等功能,功能控制模块是系统的主模块。在介绍了文件系统与图像操作的基础上逐步说明了整个系统的实现。文件系统支持 FAT16 /32,图像系统支持 BMP 等多种文件格式。整个系统的 设计以模块化为基础。 关键词: STM32F407; 电子相册; SD; LCD; FAT引言嵌入式系统无疑是当前最热门最有发展前途的 IT 应用领域之一。 嵌入式系统用在一些专用设备上, 通常这些设备的硬件资源(如处理器、 存储器等) 非常有限, 并且对成本很敏感, 有时对实时响应要求很高。 特别是随着消费家电的智能化, 嵌入式更显重要。 像我们平常常见到的手机、 PDA、 电子字典、 可视电话、 VCD/ DVD/ MP3 播放器、 数码相机、 数字摄像机、 U-Disk、 机顶盒、 高清电视、游戏机、 智能玩具、 交换机、 路由器、 数控设备、 汽车电子、 家电控制系统、 医疗仪器、 航天航空设备等都是典型的嵌入式产品。 数字摄影的兴起不可避免地引起了电子相册的发展, 因为仅有不到 35%的数码照片被打印出来。电子相册的基本原理就是采用普通相框的造型, 把原来相框中间的照片部分换成液晶显示屏, 配上电源, 存储介质等, 使得同一个相框内可以循环播放照片, 比普通照片的单一显示功能更有优势。从 2007 年开始, 数码相框的市场关注度开始激增。 在 2008 年, 电子相册市场呈现高速发展的态势,本课题的研究具有极高的潜在市场价值。 此外, 本设计属于数字影音娱乐产品, 需要较为强劲的处理器进行图像解码的工作, 而 STM32 具有超低的价格、 超多的外设、 丰富的型号、 优异的实时性能、 杰出的功耗控制和极低的开发成本等特点。 因此, 进行基于 STM32 平台的数码相框系统的设计具有重要的理论意义和实用价值。从产品形态上来说, 电子相册的市场将会有非常明确的细分。 1 电子相册: 这将是以数字照片的重显为主要功能的产品, 其功能更接近于传统意义上的相框。 由于人机界面的限制, 为了 更方便的重显和浏览以及确定重显的规则, 这类产品并不强调有大容量的内存以及丰富的存储卡接口, 这类产品的主要特征是: 1) 支持 USB Device&Host 以便于更新和同步数据。 2) 在某些情况下(如从 PC 端通过相框的 USB Device 同步数据) , 允许修改数字照片的格式使得有最佳的重显效果。 3) 仅依靠内置的半导体存储器存放需要重显的数字照片。 4) 文件(照片) 查询和播放规则设定非常简洁易用。 5) 产品大致分为桌面和壁挂两种。 2 数码相册: 这是以数字照片的存储和浏览为主要功能的产品, 由于需要满足跟 PC 相类似功能, 所以这类产品的主要特征是: 1) 有大容量的内置数据存储器。 2) 支持 USB Device&Host 及各种存储卡接口, 并支持内部存储器与各种数据存储器之间的同步以及相互拷贝。 3) 强大的文件管理功能: 浏览, 搜寻, 命名(重命名) , 复制, 删除, 备份等。 4) 带或不带内建显示单元, 有能支持其它高分辨率显示设备的接口(如色差, VGA 甚至是 HDMI) 。第一章 系统概述此次电子相册的设计已STM32系列的CortexM4内核的处理器,以STM32F407ZG为主控芯片,硬件电路包括主控芯片、LCD、SD三大模块。此方案的优势在于:(1) 成本低,系统结构简单,设计方便。STM32系列由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成而研发的芯片,具有高性能的“CortexM4”的内核,既具有图像和视频的解码、处理能力,又具有丰富的接口资源。可方便的进行电子相册系统的设计。(2) 系统具有较高的灵活性和适应性。开机的时候先检测字库,然后检测SD 卡是否存在,如果SD 卡存在, 则开始查找SD 卡根目录下的PICTURE 文件夹,如果找到则显示该文件夹下面的图片文件(支持bmp、jpg 、jpeg 或gif 格式),循环显示,通过按KEY0 和KEY2 可以快速浏览下一张和上一张,KEY_UP 按键用于暂停/继续播放,DS1 用于指示当前是否处于暂停状态。如果未找到PICTURE 文件夹/任何图片文件,则提示错误。同样我们也是用DS0 来指示程序正在运行。 所要用到的硬件资源如下: 1)指示灯DS0 和DS1 2 )KEY0 、KEY2 和KEY_UP 三个按键 3 )串口 4 )TFTLCD 模块 5 )SD 卡 6 )SPI FLASH系统框图如下:SPI FLASH按键STM32F407ZGLCDSD卡第二章 硬件设计2.1 SD卡STM32F4 的SDIO 控制器支持多媒体卡(MMC 卡)、SD 存储卡、SD I/O 卡和CE-ATA 设备等。SDIO 的主要功能如下: 与多媒体卡系统规格书版本4.2 全兼容。支持三种不同的数据总线模式:1 位(默认)、4 位和8 位。 与较早的多媒体卡系统规格版本全兼容(向前兼容)。 与SD 存储卡规格版本2.0 全兼容。 与SD I/O 卡规格版本2.0 全兼容:支持良种不同的数据总线模式:1 位(默认)和4 位。 完全支持CE-ATA 功能(与CE-ATA 数字协议版本1.1 全兼容)。 8 位总线模式下数据传输速率可达48MHz(分频器旁路时)。 数据和命令输出使能信号,用于控制外部双向驱动器。 STM32F4 的SDIO 控制器包含2 个部分:SDIO 适配器模块和APB2 总线接口,其功能框图如图所示:SDIO控制器功能框图复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6 命令设置)。 如果一个多媒体卡接到了总线上,则 SDIO_D0、SDIO_D3:0或 SDIO_D7:0可以用于数据传输。MMC 版本V3.31 和之前版本的协议只支持1 位数据线,所以只能用SDIO_D0(为了通用性考虑,在程序里面我们只要检测到是MMC 卡就设置为1 位总线数据)。 如果一个 S的或 SDI/O 卡接到了总线上,可以通过主机配置数据传输使用 SDIO_D0 或SDIO_D3:0 。所有的数据线都工作在推挽模式。 SDIO_CMD 有两种操作模式: 1. 用于初始化时的开路模式(仅用于MMC 版本V3.31 或之前版本) 2. 用于命令传输的推挽模式(SD/SD I/O 卡和MMC V4.2 在初始化时也使用推挽驱动)2.2 TFT-LCDTFT-LCD即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display 。TFT-LCD 与无源TN-LCD 、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT ),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。该模块的80 并口有如下一些信号线: CS :TFTLCD 片选信号。 WR :向TFTLCD 写入数据。 RD :从TFTLCD 读取数据。 D15 :0 :16 位双向数据线。 RST :硬复位TFTLCD 。 RS :命令/数据标志(0,读写命令;1,读写数据)。ILI9341是液晶控制器,其显存总大小为172800 (240*320*18/8 ),即18 位模式(26万色)下的显存量。在16位模式下,ILI9341 采用RGB565 格式存储颜色数据,此时ILI9341的18位数据线与MCU 的16 位数据线以及LCD GRAM 的对应关系如图下图所示:16 位数据与显存对应关系图2.3 FATFS文件系统FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC 、AVR 、SH、Z80 、H8、ARM 等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持 多个存储媒介;有独立的缓冲区,可以对多个文件进行读写,并特别对8 位单片机和16位单片机做了优化。 FATFS 的特点有: Windows 兼容的FAT 文件系统(支持FAT12/FAT16/FAT32 ) 与平台无关,移植简单 代码量少、效率高 多种配置选项 支持多卷(物理驱动器或分区,最多10个卷) 多个ANSI/OEM 代码页包括DBCS 支持长文件名、ANSI/OEM 或Unicode 支持RTOS 支持多种扇区大小 只读、最小化的API 和I/O 缓冲区等FATFS 的这些特点,加上免费、开源的原则,使得FATFS 应用非常广泛。FATFS 模块的层次结构如图所示:FATFS层次结构图第三章 软件设计3.1实现的功能:开机的时候先检测字库,然后检测SD 卡是否存在,如果SD 卡存在, 则开始查找SD 卡根目录下的PICTURE 文件夹,如果找到则显示该文件夹下面的图片文件(支持bmp、jpg 、jpeg 或gif 格式),循环显示,通过按KEY0 和KEY2 可以快速浏览下一张和上一张,KEY_UP 按键用于暂停/继续播放,DS1 用于指示当前是否处于暂停状态。如果未找到PICTURE 文件夹/任何图片文件,则提示错误。同样我们也是用DS0 来指示程序正在运行。整个系统的工作流程图如下所示:关机重启显示上一张暂停或播放显示下一张picture文件夹存在SD存在存在图片显示图片KEY0按下KEY2按下KEY-UP按下延时3S开始 否 是 是 否 是 否 是 否 是 是 否 是 否 是 否程序流程图3.2SD卡的子程序:检测是否有插入SD卡,进而对SD进行卡初始化。按照总程序的需求调用SD卡的读取程序对SD卡内的图片进行读取。流程图如下所示:3.3LCD的子程序LCD显示程序的主要作用是驱动LCD模块将图片数据发送至ILI9341芯片中驱动LCD,从而实现图片显示功能。流程图如下所示:3.4图片解码的子程序bmp 、jpg/jpeg 和gif 图片的显示,根据输入文件的后缀名,判断文件格式然后交给相应的解码程序(bmp 解码/jpeg 解码/gif 解码),执行解码,完成图片显示。流程图如下所示:开始BMPBMP解码 YES NOJPEG解码JPEG YES NOGIFGIF解码 YES报错 NO第四章 心得体会这次制作加强了软件编程和硬件调试的实战能力,提高了项目开发水平。有关于C语言的使用进一步熟悉,认识了工程的代码量和培养了做工程的代码习惯。认识了STM32的部分开发技巧和技能,给予了我关于学习开发的知识。由于此次主要是利用库函数进行开发的,因此大量的工作在于程序的移植,也参考了很多该方面的书籍。任然在移植过程中遇到了许多问题,和同学之间的交流成为了解决这一问题的良方。但是以后的道路还有很长,还有足够多的东西需要学习,来加强自己对于程序的理解和应用。实物图如下所示: 附录#include sys.h#include delay.h#include usart.h#include led.h#include lcd.h#include key.h #include sram.h #include malloc.h #include usmart.h #include sdio_sdcard.h #include malloc.h #include w25qxx.h #include ff.h #include exfuns.h #include fontupd.h#include text.h#include piclib.h#include string.h#include math.hu16 pic_get_tnum(u8 *path) u8 res;u16 rval=0; DIR tdir; /临时目录FILINFO tfileinfo;/临时文件信息u8 *fn; res=f_opendir(&tdir,(const TCHAR*)path); /打开目录 tfileinfo.lfsize=_MAX_LFN*2+1;/长文件名最大长度tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize);/为长文件缓存区分配内存if(res=FR_OK&tfileinfo.lfname!=NULL)while(1)/查询总的有效文件数 res=f_readdir(&tdir,&tfileinfo); /读取目录下的一个文件 if(res!=FR_OK|tfileinfo.fname0=0)break;/错误了/到末尾了,退出 fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname); res=f_typetell(fn);if(res&0XF0)=0X50)/取高四位,看看是不是图片文件rval+;/有效文件数增加1 return rval;int main(void) u8 res; DIR picdir; /图片目录FILINFO picfileinfo;/文件信息u8 *fn; /长文件名u8 *pname;/带路径的文件名u16 totpicnum; /图片文件总数u16 curindex;/图片当前索引u8 key;/键值u8 pause=0;/暂停标记u8 t;u16 temp;u16 *picindextbl;/图片索引表 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/设置系统中断优先级分组2delay_init(168); /初始化延时函数uart_init(115200);/初始化串口波特率为115200LED_Init();/初始化LED usmart_dev.init(84);/初始化USMART LCD_Init();/LCD初始化 KEY_Init();/按键初始化 W25QXX_Init();/初始化W25Q128my_mem_init(SRAMIN);/初始化内部内存池 my_mem_init(SRAMCCM);/初始化CCM内存池 exfuns_init();/为fatfs相关变量申请内存 f_mount(fs0,0:,1); /挂载SD卡 f_mount(fs1,1:,1); /挂载FLASH.POINT_COLOR=RED; while(font_init() /检查字库 LCD_ShowString(30,50,200,16,16,Font Error!);delay_ms(200); LCD_Fill(30,50,240,66,WHITE);/清除显示 delay_ms(200); Show_Str(30,70,200,16,图片显示程序,16,0); Show_Str(30,90,200,16,KEY0:NEXT KEY1:PREV,16,0); Show_Str(30,110,200,16,WK_UP:PAUSE,16,0); while(f_opendir(&picdir,0:/PICTURE)/打开图片文件夹 Show_Str(30,170,240,16,PICTURE文件夹错误!,16,0);delay_ms(200); LCD_Fill(30,170,240,186,WHITE);/清除显示 delay_ms(200); totpicnum=pic_get_tnum(0:/PICTURE); /得到总有效文件数 while(totpicnum=NULL)/图片文件为0 Show_Str(30,170,240,16,没有图片文件!,16,0);delay_ms(200); LCD_Fill(30,170,240,186,WHITE);/清除显示 delay_ms(200); picfileinfo.lfsize=_MAX_LFN*2+1;/长文件名最大长度picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize);/为长文件缓存区分配内存 pname=mymalloc(SRAMIN,picfileinfo.lfsize);/为带路径的文件名分配内存 picindextbl=mymalloc(SRAMIN,2*totpicnum);/申请2*totpicnum个字节的内存,用于存放图片索引 while(picfileinfo.lfname=NULL|pname=NULL|picindextbl=NULL)/内存分配出错 Show_Str(30,170,240,16,内存分配失败!,16,0);delay_ms(200); LCD_Fill(30,170,240,186,WHITE);/清除显示 delay_ms(200); /记录索引 res=f_opendir(&picdir,0:/PICTURE); /打开目录if(res=FR_OK)curindex=0;/当前索引为0while(1)/全部查询一遍temp=picdir.index;/记录当前index res=f_readdir(&picdir,&picfileinfo); /读取目录下的一个文件 if(res!=FR_OK|picfileinfo.fname0=0)break;/错误了/到末尾了,退出 fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname); res=f_typetell(fn);if(res&0XF0)=0X50)/取高四位,看看是不是图片文件picindextblcurindex=temp;/记录索引curindex+; Show_Str(30,170,240,16,开始显示.,16,0); delay_ms(1500);piclib_init();/初始化画图 curindex=0;/从0开始显示 res=f_opendir(&picdir,(const TCHAR*)0:/PICTURE); /打开目录while(res=FR_OK)/打开成功dir_sdi(&picd

温馨提示

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

评论

0/150

提交评论