APP下载

基于STM32数码相框的设计与实现

2016-12-26北方工业大学电子信息工程学院通信工程系崔晓康范馨予

电子世界 2016年21期
关键词:相框解码数码

北方工业大学电子信息工程学院通信工程系 崔晓康 范馨予

基于STM32数码相框的设计与实现

北方工业大学电子信息工程学院通信工程系 崔晓康 范馨予

数码相框作为嵌入式设计的典型应用,相对于普通相框来说更加灵活多变。基于STM32系列嵌入式开发板丰富的外围设备,使得数码相框的到了进一步的发展。本系统采用STM32作为控制核心,添加了多种格式汉字显示、并移植了FATFS去读取相关文件信息的功能,研究实现了对SD卡里多幅图片多种格式(如bmp、jpg/jpeg、gif)以幻灯片形式在TFT屏上动态显示的效果,同时连接显示了相应图片内容的文字信息,并且增加了按键控制,使得数码相框的设计更加人性化。

嵌入式;STM32微处理器;数码相框;图片解码

1.引言

近年来,随着数字技术的快速发展,各种数字类产品遍布全球,数字图像的数量也正以惊人的速度增长,为了更加方便快捷的查看图像,高速浏览图片的设备应运而生,数码相框采用传统的外观造型,只是把传统外观部分换成了液晶显示屏,加上外围设备以及供电模块等,就可以实现数码照片的直接显示,与此同时还可以循环显示照片,实现幻灯片的效果。这给日益增多的数字照片和摄影爱好者们提供了一个很好的照片展示平台和空间。数码相框拥有相当大的优势,使用简单,直接从数码相机中取出记忆卡插入到数码相框卡槽中即可浏览;无需像之前那样繁琐,无需电脑,更不需要冲洗打印,各种格式的数字图片均能够快速显示。

嵌入式是当今最热门的概念之一,它具有体积小、性能强、功耗低、可靠性高以及面向行业应用等突出特征。嵌入式系统将先进的半导体技术、计算机技术和电子技术,以及各个行业的具体应用相结合,是一个技术密集、资金密集、学科交叉和不断创新的知识集成系统。因此基于嵌入式的各种数码相框的设计已经成为目前研究的热点。通常来说,嵌入式系统可以划分为硬件和软件两部分。嵌入式硬件由嵌入式微处理器、片内周边电路和外围设备三部分组成。其中嵌入式微处理器是嵌入式硬件系统的核心,直接影响嵌入式产品的应用范围和开发复杂度。典型的嵌入式微处理器有Motorola公司。

本课题所研究的数码相框主要实现以下功能:插入SD卡后对指定文件夹中的图片进行寻址与读取,即通过SD卡进入SPI模式对数据进行读写。通过系统读取以及解码SD卡内存储的BMP、JPEG、JPG以及GIF格式图片,把多幅图片以幻灯片的形式在TFTLCD屏幕上显示出来,并且通过按键控制实现对屏幕显示图片的控制包括开启/暂停幻灯片显示、上一张/下一张显示等功能,并且显示图片的同时在图片下方会同时显示基于MATLAB自动标注的结果内容。

2.系统硬件设计

2.1 系统结构

基于STM32的数码相框的系统设计如图1所示,由图中可知,本系统设计由SD_CARD模块(SD卡通常支持两种操作模式:SD卡模式与SPI模式。本设计采用SPI模式)、SPI模块、FLASH缓存模块、MCU主控模块、按键(Key)模块、LCD显示模块、LED状态显示模块共七个模块组成。下面依据顺序说明各个模块以及连接方法。

第一个SD_CARD模块,SD卡通过SDIO接口进行通讯,所有的通信都要遵从SD卡通信协议(SD卡协议相对复杂,这里只说明有关应用的部分,具体讲解可查看具体的协议手册),首先,可以使用SDIO接口通讯的不只是常见的单纯用于储存数据的SD储存卡,还有SD I/O卡,MMC卡。这几种卡的类型是有区别的,其中,SD I/O卡就是利用SDIO接口的一些模块,通过插入特定的SD卡槽中由SD卡槽中,使设备的功能得到扩展。SDIO的基本构架如图1所示。从图中可以看出,SDIO接口包含了CMD(命令信号线,由主时钟产生时钟信号)、CLK及DAT[7 :0]信号线(主机和从机之间的数据信号在这八条线上传输)。图中这三条信号线都是在通信中共用的总线,SDIO主机是通过命令来和SD从设备的相应来寻址的。 SDIO的所有命令以及命令相应都是通过SDIO-CMD引脚来进行传输的。并且命令只能是由主机的SDIO控制器发出。

图1 STM32的SDIO接口

SPI模块,是一种串行外围设备接口,是作为一种高速全双工的通信总线,如图2所示,共包含了四条总线,分别为SS、SCK、MOSI、MISO。其中SS(Slave Select)为片选信号线,每个设备的的片选信号线都是与MCU单独的引脚相连,其他几个引脚则以并联的方式连接到相同的SPI总线上,当片选引脚有效时开始通信。

图2 SPI接口模块原理图

MCU主控模块(见图3),本系统设计采用的CPU是STM-32F103RBT6,具备有内置的128KB的Flash、20K的RAM、12位的AD、4个16位定时器以及三路UART通讯接口等多种资源,其时钟频率最高可达到72MHZ。

按键(Key)模块,按键模块主要借助系统时钟进行定时扫描完成,采取非CPU阻塞方法,提高了系统执行效率以及响应灵敏度等。通过按键识别来进行相应的系统响应。

LCD显示模块,此模块主要对解码得到的最直接的图像数据进行处理显示。

整个系统实现了经过软件解码图片相关数据,解码后再将数据传输到LCD模块进行显示得到数码相框显示图片的效果。在进行图片显示的同时,有LED模块进行LED灯闪烁,同时增加按键中断控制,通过按键可以控制LCD的显示模式,控制循环显示文件夹数据还是单一显示、上一张和下一张等。与此同时在LCD屏幕上还留有一段文字显示区,在图片显示的同时进行相应内容的说明展示等。

2.2 系统硬件设计

系统硬件分为数据储存端、数据处理端、数据显示端三大部分电路组成。数据储存端主要包括SD卡储存设备以及相应的数据传输电路等组成。数据处理端主要有STM32开发板的MCU主控模块(见图4)处理完成,主要对数据进行处理,通过读取文件头信息对图片类型进行判别,然后依据不同类型文件进行相应解码流程,最终将处理后的数据送到下一端数据显示端(图5)进行显示。数据显示端接收固定模式的数据格式通过LCD驱动电路对数据进行输出显示。

图3 系统硬件方框图

图4 STM32开发板的MCU主控模块原理图

图5 LCD显示模块原理图

3.系统软件设计

3.1 数据读入模块

本模块包含FATFS文件系统MALLOC内存分配单元,USMART终端操作等。

首先,需要用MALLOC内存分配单元的函数申请一定格式的内存空间,为FATES文件系统进行文件打开以及文件读写做准备。在申请完内存空间并判定申请成功后(某一步申请不成功就释放所有已申请空间,并返回相应错误参数)进入文件打开以及读写阶段。首先通过FATFS文件系统的f_opendir()函数打开相应文件夹目录,然后通过返回参数判定是否打开成功,如果打开成功,则通过f_readdir()读取目录下的一个文件,并通过while(1)循环全部查询确定文件数目。

3.1.1 FATFS文件系统

FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。具有Windows兼容的FAT文件系统;不依赖于平台,易于移植;代码和工作区占用空间非常小;多种配置选项等优点。FATFS 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,而不需要做任何修改。FAT文件系统用"簇"作为数据单元。每一个"簇"都有一组连续的删去组成,并且其所含的扇区数必须是2的整倍数。簇的最大值是32KB。在使用FATFS文件系统的时候,首先需要将其移植到开发平台,移植主要分为三步,依次是数据类型定义(在interger。h内部定义)、配置(在ffconf。h)、和函数编写(6个接口函数)。有关详细的移植步骤请参见参考文献[5]和[6]。

3.1.2 MALLOC内存分配单元

该单元主要用于进行内存的分配和释放,下面介绍一下主要函数的基本用法:

内存分配函数:malloc()

函数原型:(类型说明符 *)malloc (unsigned size);

参数说明:"类型说明符"用于表示此内存区域用于何种数据类型。

"类型说明符 *"用于表明返回值类型强制类型转换为该类型指针。

"size"要求是一个无符号数,用以表示申请内存的长度。使用举例:cxk=(char *)malloc(1000);

作用:在内存的动态储存区中分配申请一块数据长度为"size"字节的连续内存区域,该函数的返回值是该区域的首地址。

内存空间释放函数:free()

函数原型:free(void *ptr)

参数说明:*ptr ptr是一指针变量,指向一块需要被释放内存空间的首地址(该区域是被malloc函数或其他内存分配函数所分配的)。

使用举例:

cxk=(char *)malloc(1000);

free(ps);

3.1.3 USMART终端操作单元

USMART组件是由广州市星翼电子科技公司开发的,是一个串口调试交互组件,主要有可以调用百分之九十以上的用户直接编写的函数,并且占用的资源极少支持数据类型多、支持函数返回显示,使用方便,具有很好的移植性等优点。USMART组件包含有六个文件: usmart。c、usmart。h、readme。txt、usmart_conFig.c、usmart_str。c、smart_ str。h。其中readme。txt是说明文档,是对组件使用的具体说明,usmart。c是负责与外部实时交互等,usmat_str。c 内部主要负责命令和参数的解析等,usmart_conFig.c主要由用户添加,添加需要由usma进行调试的函数。通过 USMART 和串口助手可以任意调用源程序中的任何函数并执行,进行调试。详细内容请参考参考文献[9]。

3.2 图片格式识别以及解码模块

本系统设计可以识别解码出如bmp、jpg/jpeg、gif等多种格式的图片,首先从格式识别来说,主要是通过代码实现文件名的读取,然后进行其后缀部分的截取,通过后缀识别得到图片文件类型,在得到图片类型后并不能直接对其进行显示,因为同一种图片格式也有不同的类型,例如16位颜色图、24位颜色图、32位颜色图、RGB(5.5.5)、RGB(5.6.5)等。进而针对不同的文件类型采用对应的解码方式进行解码,最终解析出图片数据,再以LCD所需的数据格式把数据传送到LCD硬件模块开始显示。对应的流程图如图6所示。

图6 图片解码流程

3.3 TFT-LCD显示模块

本模块主要通过画点函数实现数据的写入,关键代码如下:

pic_phy。draw_point函数原型以及参数介绍

函数原型:pic_phy。draw_point(int a,int b,int color);

参数说明:a表示在显示屏上的x坐标,b表示显示屏上的y坐标,color为要显示的像素值,其中color的计算需要对取出的像素点数据进行相应移位转换操作才能转换成正确的显示数据。

图7 LCD显示

4.测试结果

本实验对BMP、JPEG、JPG以及GIF等多种格式图片进行按键控制播放以及幻灯片播放测试,均得到了正确快速地显示,并通过按键控制检测实现了显示模式的转换等功能。如图8(a)(b)给出了显示结果示例。

图8 (a) 通过按键控制播放

图8 (b) 自动幻灯片播放

5.结论

整个系统实现了经过软件解码图片相关数据,解码后再将数据传输到LCD模块进行显示得到数码相框显示图片的效果。在进行图片显示的同时,有LED模块进行LED灯闪烁,同时增加按键中断控制,通过按键可以控制LCD的显示模式,控制循环显示文件夹数据还是单一显示、上一张和下一张等。与此同时在LCD屏幕上还留有一段文字显示区,在图片显示的同时进行相应内容的说明展示等功能。本系统显示效果良好,系统的功能有待进一步研究与发展,下一步的研究方向是实现更智能化的显示,例如连接MABLAB自动标注图像特征的结果数据实现跨平台显示等。

致谢:

在此感谢北京市教委面上项目(KM201510009008)支持。

[1]吴嘉慧。JPEG图像解码方案[J]。现代计算机,2007,03:49-53.

[2]徐寿芳。BMP图像的文件格式及显示方法探究[J]。湖州职业技术学院学报,2005,02:80-82.

[3]李世清,陈春光,鞠晓光,潘照新。GIF图像格式及压缩方法的分析[J]。微型机与应用,1994,09:13-14.

[4]陈雪芳。基于STM32F103的电子相框的设计[J]。东莞理工学院学报,2012,01:49-52.

[5]顾春洋,李鑫,张强。基于SD卡的FAT32文件系统的设计与实现[J]。产业与科技论坛,2013,02:96-98.

[6]史胜伟,潘冀宁,孙慧洋。基于STM32的MicroSD卡Fat文件系统快速实现[J]。通讯世界,2016,17:81-83.

[7]戴春燕,徐智文。对c++中malloc/free和new/delete的探讨[J]。包钢科技,2009,01:59-60+66.

[8]陆金江。深入探究C中的malloc()和free()函数[J]。计算机光盘软件与应用,2013,21:120+122.

[9]胡仕刚,曹会祎,吴笑峰,席在芳,唐志军。USMART调试方法在嵌入式系统教学中的应用[J]。信息通信,2016,05:130-131.

[10]刘军。精通STM32F4[M]。北京:北京航空航天大学出版社,2015.

猜你喜欢

相框解码数码
《解码万吨站》
相框
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
Naim Audio Uniti Nova数码播放/放大器一体机
相框
沙滩相框
数码暗房
Who am I?5款不可貌相的数码利器