首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
一种简易数码相框的设计
来源:本站整理  作者:佚名  2011-05-22 10:00:57



本文介绍一种简单、低成本的数码相框的设计,它可以幻灯片式地浏览SD卡中的bmp格式的照片。
1 硬件电路
 该数码相框的硬件平台以32 bit STM32系列的处理器STM32F103ZET6为核心,外围电路主要包括一个2.8英寸的TFT液晶模块、1个SD卡插座、5个LED灯和2个按键。硬件系统如图1所示。

 系统关键器件的电路原理图如图2所示。STM32系列MCU基于专为要求高性能、低成本、低功耗的嵌入式应用而设计的ARM Cortex-M3内核,包括了STM32F103增强型系列和STM32F101基本型系列。本设计使用的是增强型系列的高端型号STM32F103ZET6,其最高主频可以达到72 MHz,内置512 KB的闪存以及64 KB的SRAM。同时其外设资源丰富,包括并行LCD接口(FSMC)、12通道DMA控制器、定时器、ADC、DAC、SDIO、I2C、SPI、USB、UART等[1]。可以说,它完全超越了同价位的8 bit或者16 bit单片机的性能,而又不像一般32 bit处理器那样价格昂贵。

 本设计使用了一个带有通用并行接口(FSMC)的2.8英寸TFT液晶模块,这种液晶模块很常见,而且价格便宜,另外还有3.2英寸甚至更大的尺寸可供选择。STM32F103ZET6通过一个SPI接口与SD卡座连接,以便于控制和简化程序,而且对于静态图片,SPI的传输速度已足够。另外,还有用于调试的2个按键和5个LED。
2 软件设计
2.1 移植FATFS文件系统

 FATFS文件系统是一种完全免费开源的FAT文件系统模块,专为小型嵌入式系统而设计,用标准C语言编写,很方便移植[2]。本设计移植的FATFS版本为R0.07e,它支持FAT12、FAT16和FAT32,由于不涉及多个存储介质,因此,本设计仅移植了其简化版本Tiny-FATFS,其占用内存更少,只需要大约1 KB RAM。FATFS具有三层结构,如图3所示。

 应用层为用户提供了一系列接口函数,只需要简单的调用即可,而无需理会复杂的FAT协议。移植过程中,需要使用者修改的是底层接口(包括存储介质读写接口和供给文件创建修改时间的实时时钟)。
Tiny-FATFS包含5个文件,分别是tff.c、tff.h、diskio.c、diskio.h和integer.h,移植之前首先要编写初始化和读写SD卡的SPI接口代码。代码主要包括SD_Init()、SD_ReadSingleBlock()、SD_ReadMultiBlock ()、SD_WriteSingle
 Block()、SD_WriteMultiBlock()函数,而这些代码将在diskio.c中被调用。移植FATFS文件过程:
 (1)准备好SPI读写SD卡的代码后就可以修改diskio.c了,实际上只需要编写6个接口函数:
 ①存储媒介初始化函数:DSTATUS disk_initialize(BYTE drv)。由于存储媒介是SD卡,所以实际上是对SD卡的初始化。drv是存储媒介号码,由于Tiny-FATFS只支持一个存储媒介,所以drv应恒为0。执行无误返回0,错误返回非0。
 ②状态检测函数:DSTATUS disk_status(BYTE drV)。检测是否支持当前的存储媒介,对Tiny-FATFS来说,只要drv为0,就认为支持,然后返回0。
 ③读扇区函数:DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE.count)。在SD卡读接口函数的基础上编写,*buff存储已经读取的数据,sector是开始读的起始扇区,count是需要读的扇区数。1个扇区为512 B。执行无误返回0,错误返回非0。
 ④写扇区函数:DRESULT disk_write(BYTE drv,const BYTE*buff,DWORD sector,BYTE count)。在SD卡写接口函数的基础上编写,*buff存储要写入的数据,sector是开始写的起始扇区,count是需要写的扇区数。1个扇区为512 B。执行无误返回0,错误返回非0。
 ⑤存储媒介控制函数:DRESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff)。ctrl是控制代码,*buff存储或接收控制数据。可以在此函数里编写自己需要的功能代码,如获得存储媒介的大小、检测存储媒介的上电与否,存储媒介的扇区数等。如果是简单的应用,也可以不用编写,返回0即可。
 ⑥DWORD get_fattime(Void)。本设计未涉及到文件的创建和修改,因此实时时钟部分未编写,直接返回一个32 bit无符号整数即可。
 (2)对Tiny-FATFS进行配置,主要是修改tff.h和diskio.h。在diskio.h中,只需要配置一项:使能或者使能只读属性。由于本设计只涉及到SD卡的读操作,因此定义使能只读属性:#define_READONLY1。这样可以裁减掉关于写SD卡的那部分代码,从而使文件系统更精简。
在tff.h中,需要对整个文件系统做全面的配置,包括:
 ①#define_MCU_ENDIAN 1。STM32是小端模式,选择1。
 ②#define_FS_READONLY 1。使能只读操作,去掉写操作,节省空间。
 ③#define_FS_MINIMIZE 3。设为3表示使用最基本的FATFS函数,最大限度节省空间。
 ④#define_USE_STRFUNC 0。禁用字符串函数功能。
 ⑤#define_USE_FORWARD 0。禁用forward功能。
 ⑥#define_FAT321。支持FAT32文件系统。
 ⑦#define_USE_FSINFO 1。支持FAT32磁盘信息获取。
 ⑧#define_USE_SJIS 0。禁用shift-JIS码。
 ⑨#define_USE_NTFLAG 1。对文件名大小写敏感。
 到此为止,FATFS的移植就全部完成了。
 编写一段程序测试FATFS是否移植成功。以1 s的间隔循环读取SD卡中的bmp格式图片并显示,main函数的流程如图4所示。

 需要说明的是,为了便于循环读图,SD卡中存储的bmp格式图片被刻意用数字编号来命名(如:1.bmp~n.bmp),这样,在程序中只需要简单处理文件名就可以按顺序读取图片了。

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:62,503.91000 毫秒