当前位置:文档之家› 项目(7)-基于STM32的PDA

项目(7)-基于STM32的PDA

项目(7)-基于STM32的PDA
项目(7)-基于STM32的PDA

基于STM32的PDA

一、项目简介

目前市面上的手机、PDA等电子产品非常多,而为了满足用户日益更新变换的体验要求,它们的功能也越来越丰富强大。该项目并不要求实现十分强大出色的功能,而是旨在学习PDA的开发过程。同时把前面的项目整理并融合在一起,制作出一个实用的多功能的PDA。在PDA上实现音乐播放、图片解码、文件浏览、阅读电子书、实时时钟等功能。而开发人员也可以在这基础上自行添加代码增加更多的功能,如触摸屏画图、计算器、简单游戏、上位机通信等应用程序。从而在该项目上获得更多的用户体验。

二、项目要求

1、设计一个良好的用户GUI界面和人机交互接口。

2、实现文件浏览功能。

3、实现音乐播放器功能。

4、实现BMP/JPG/JPEG图片解码功能。

5、实现阅读电子书功能。

6、实现实时时钟功能。(时间掉电保存)

7、扩展要求1:实现触摸屏画图功能

8、扩展要求2:实现计算器功能

9、扩展要求3:增个游戏程序(如俄罗斯方块、贪食蛇、拼图等)

10、扩展要求4:设计上位机软件,能利用该软件从电脑传送文件到PDA上。

三、项目方案

处理器选择:该项目要实现比较多的功能,对处理器的ROM、RAM、速度等要求都会比较高。如果用51单片机,如增强型STC12LE5A60S2,虽然有60K 的flash,总够放下较多的程序代码,但是RAM只有1280字节,光一个JPEG 解码程序就差不多用完它的RAM了,因此是远远不够的。如果非要用51单片机,就必须外扩RAM、这会增加开发的复杂度,同时实验板硬件上难以外扩RAM。因此,自然想到选用与实验板配套的STM32核心板。处理器为

STM32F103CBT6。其内部有128K flash、20K RAM,足够放下较多的应用程序和数据。同时,STM32的主频高达72MHz,内部还自带RTC实时时钟、18M

高速SPI接口、多个16位定时器、多个中断源设置等等,这些对PDA的开发都

非常有利。因此选用STM32是一个相当适合的。

文件存储:对于大型的系统文件,比如图片文件、音频文件等等,应该放在SD卡内。而对于占用空间较小的文件,如常用ASCII码的字模等可以直接放在处理器的代码段。用户自己的音乐、图片、电子书等文件(非系统文件)也应该存放在SD卡上。

功能实现:因为要在同一个程序中实现多个功能。包括音乐播放、图片解码、电子书等功能。而项目还没有使用操作系统,因此各个功能只能分时使用。该项目使用的是状态机的方法来实现整个系统。利用状态机的方法,可能很方便地管理各个功能,也就是每一个功能对应一个状态。当进入某个状态时,处理器就只为对应的功能服务。而状态之间的切换通特定的用户接口来实现,常见的就是进入与退出按钮。如果对多任务管理有兴趣,可以考虑学习并运用简单的嵌入式操作系统,如ucosII,利用操作系统来实现多个任务同时运行。这一点超出该项目的要求,可以自行去研究并实现。

在早期的开发中,应先确定好早期的几个所需实现功能,然后再针对每个独立的功能,先用实验板上分别实现,当每个功能都能独立正常运行之后,再进行系统的整合。系统整合后,如果有想再添加应用程序,也应该先在实验板上单独测试实现该应用程序,最后再添加进系统里。这样的一个开发模式,就可以使PDA方便地进行升级了。

四、相关原理知识

在这个项目里,所用的大部分知识都是在此之前的项目用已涉及到的了,只是这里把这些知识综合起来应用。比如SD卡读写驱动、BMP图片解码、VS1003驱动、触摸屏驱动等。在此就不再过于详细地重复了。下面就几个重要的功能再作一些补充。

4.1、音乐播放器

该项目的重点之一就是要实现一个功能较完善的音乐播放器,支持MP3、WMA、MIDI、WAV等格式的音频文件播放;支持歌词显示,支持歌曲当前播放进度显示;支持快进和快退操作;支持单曲循环,全部循环两种播放模式;支持频谱显示。

在执行音乐播放之前,就首先初始化VS1003、SD卡,FAT文件系统。具体实现的方法请参照相应的教程文档。该功能对文件管理的要求比较高。因为要执行查找音频文件、浏览文件目录、查找歌词文件、获取文件详细信息等操作。所以必需有一个良好的文件管理程序。

音乐播放在此前已经有过分析。但是还有其他功能,包括频谱显示,歌词显示需要其他函数来执行。接下来介绍这些功能的实现方法。

频谱显示比较简单,主要频谱分析的工作不需要MCU来执行,是由VS1003执行的,通过在初始化VS1003后写入频谱分析的代码,就可以让其执行频谱分析的功能,MCU需要做的就是定时读出频谱分析后的结果,对其分析处理,并最终显示到液晶屏上,实现频谱显示。频谱分析数据的获取通过函数void GetSpec(u8 *p)实现,得到的频谱分析数据被存放在*p里面,该项目共取十四个频点进行显示。

歌词显示通过void LyricDisplayCtrl(void)来控制显示,但是最关键的却是开始对歌词的初始化处理过程,由函数u8 FindLrcFile(unsigned long dircluster,unsigned char *strName)实现。返回值,标记是否成功找到匹配歌词;dircluster 为当前目录的簇号;strName为要查找与之匹配歌词的音乐的名字。该函数对歌词的处理过程为:第一步,获取歌词TAG(通过Get_Tag(void)实现);第二步,对得到的TAG排序;第三步,把歌词,按照排序后的TAG顺序,读入到SRAM里面。

4.2、JPG/JPEG图片解码

JPEG解码算法原理:

JPEG压缩是一种有损压缩。它利用人的视角系统特性,使用量化和无损压缩编码相结合的方式去掉视角的冗余信息和数据本身的冗余信息来达到压缩的目的。JPEG算法可分为基本JPEG(Baseline system)和扩展JPEG(Extended system)。其中Baseline system应用尤其广泛。本文主要讨论Baseline system的解码。JPEG解码算法框图如图3.9 所示:

图3.9 JPEG解码算法框图

(1)颜色空间变换

JPEG算法本身与颜色空间无关,因此“RGB到YUV变换”和“YUV到RGB 变换”不包含在JPEG算法中。但由于作为输出的位图数据一般要求RGB的表示,所以将颜色空间变换也表示在算法框图中。

(2)JPEG的编解码单元

在JPEG中,对于图像的编解码是分块进行的。整个图像被划分为若干个8×8的数据块,称为最小编码单元(MCU),每一个块对应于原图像的一个8×8的像素阵列;各行的编解码顺序是从上到下,行内的编解码顺序是从左到右。值得注意的是,由于一幅图像的高和宽不一定是MCU尺寸的整数倍,因此需要对图像的最右边一列或其最下边一行进行填充,扩展其高或宽,使得可以将整个图像划分为整数个MCU;而在解码输出时,这些复制的行列是要被抛弃的。

(3)熵解码器

在JPEG的熵编码时,首先利用空间相关性对各块的直流值采用差分编码,即对相邻块之间的直流差值编码,以达到压缩码长的目的。然后对于交流部分以ZigZag方式扫描块中的元素,对块内元素采用先游程编码后哈夫曼编码的混合编码方式,得到一维二进制块码流。熵编码过程是由直流部分的差分编码和交流部分的ZigZag扫描、游程编码、哈夫曼编码组成。而相应的熵解码过程是编码的逆过程,在解码端接收到的是由变长码(VLC)和变长整数(VLI)组成的数据流。为了从此数据流中恢复编码前的DCT系数,必须根据哈夫曼编码的原理及其各级码表生成的细节,生成哈夫曼解码表,再根据解码算法来恢复DCT的直流和交流系数。

(4)反量化

在JPEG解码端要利用发送过来的量化表对量化值进行译码。JPEG文件里一般含有两个量化表:一个亮度分量的量化表,一个色度分量的量化表。反量化就是对熵解码出来的系数矩阵乘上相应的量化矩阵:

其中,C(u,v)代表熵解码输出,Q(u,v)代表相应的量化矩阵。

(5)IDCT。

变换JPEG解码算法能否满足实时应用,关键在于8×8的二维IDCT的计算速度。在编码阶段,正向离散余弦变换(FDCT)把空间域表示的图变换成频率域表示的图;相应地在解码阶段,逆向离散余弦变换(IDCT)将频率域表示的图变换为空间域表示的图。

4.3、支持汉字显示的电子书

该系统的电子书支持的格式有:TXT文件、C文件、H文件、LRC歌词文件。电子书功能的实现比较简单,因为本系统已经支持了文件系统的浏览,支持了汉字和字符显示,所以电子书功能实现起来较方便。

电子书阅读主要通过void Read_Book(FileInfoStruct *FileName)函数来实现,FileName为要打开的电子书文件。在该函数里面,实现了对中英文字体的识别,

并有序的在LCD上,因为LCD大小为240*320,使用的字体为16*16大小的宋体,如果全部用来显示汉字,则整个屏幕可以显示300个汉字。

本系统的字体文件保存在SD卡的SYSTEM文件夹下的FONT文件夹内,包括FONT16和FONT12两种大小的字体,字体文件是通过在电脑上用专门的软件,按特定格式生成的字体点阵数据。在读取字体点阵的时候,只要按照字体的GB2312码值,在字体文件里面偏移相应的位置,读取相应长度字节的数据,就可以得到这个字体的点阵码了,然后输出到LCD上,就可以显示文字了。

得到字体的点阵信息在void Get_HzMat(unsigned char *code,unsigned char *mat)函数里面实现。code为汉字的GB码,而mat则是得到的这个汉子的点阵数据。对于字库里面找不到的字体,则在mat里面返回全1。显示字体通过void show_font(u8 x,u16 y,u8 *font,u8 mode)函数实现。x,y为在LCD上显示的坐标;font为汉子的点阵数据;mode为显示模式(0,填充模式;1,叠加模式)。

通过以上几个函数的组合,再通过加入文件浏览函数和控制函数,则可以实现电子书阅读功能了。

4.4、万年历

该项目实现的万年历是一个功能较强的万年历,功能包括阳历日期显示、阴历日期显示、支持甲子年显示、24节气显示、星期功能、温度功能。在温度方面,由于外部温度传感器管脚与VS1003模块管脚复用,所以就使用内部温度传感器。节气包括从2000年到2050年的节气显示。支持任意一天的周显示,阴阳历的查询范围从1900~2099年。

该部分的核心部分是RTC内时间和当前时间的转换。选择时间1970年作为原始年。故RTC秒钟寄存器的范围为1970+136年,即约要到2100年左右才会溢出,足够用了。获取RTC时钟的操作时通过u8 rtc_get(void)完成。返回值用来标志此次操作是否成功。

4.5、GUI用户界面设计

在主界面上的图片采用时尚的IPHONE图标,每个图标对应是一张保存在SD卡的BMP图片,其像素大小为59*60。主界面均匀放置9个图标,再在图片下面显示对应的功能说明。

文件目录界面,不同的文件属性的文件用不同的图标来标识,这样给用户感觉清晰。同时在该界面设置“确定”与“退出”按钮。从而方便地指示用户操作。当初次选中文件时,在对应的文件位置变更颜色,再次选中文件的时候,就打开

该文件,这里对文件的操作类似于windows操作系统。

音乐播放界面,采用积木式设计,有层次的将各个图标放置在屏幕上。各种功能图标包括加/减按钮、前进/后退按钮、暂停/继续按钮、循环播放按钮、歌词/频谱显示按钮、退出按钮等。除此之外,还有标题栏、文件名显示栏、频谱显示/歌词显示区域等内容。

图片浏览界面,这个界面并不需要怎么做,因为显示的重点对像不是界面,而是图片。因此,只需清屏后再放入图片即可。

电子书界面。电子书界面以白色为底色。字体为16*16像素,颜色为蓝色。同时在页面的最底有上一页、下一页、退出按钮。

其他GUI界面不再作界绍,开发人员可以大胆尝试自己去设计GUI。

五、硬件设计

5.1、STM32最小系统

最小系统电路图如下。包括STM32F103处理器、8M晶振电路、复位电路、BOOT启动电路、退耦电路、RTC电路等,组成STM32的最小系统。注意BOOT 电路,在BOOT1(PB2)脚要接一个下拉电阻(一般为10K)到地。而BOOT0在平常状态下也应通过下拉接地,但当按键按下时,应上拉至高电平。RTC供电由电源VCC3.3或者备电池提供。当上电的时候,一般来说VCC3.3的电压比备分电池的电压要高,这时候用的电VCC3.3供电,当断电的时候,就用备备电池供电,这样的设计可以延长电池的寿命。同时专门引出USART1接口,方便串口调试与程序下载。

5.2、音频解码电路

这部分主要是VS1003的基本电路,按照VS1003的datasheet要求就可以搭出该电路。除了VS1003,周边还附有其他的电路,如麦克风输入电路,线入接口电路、音频输出电路、晶振电路。当然也少不了电源电路。这里重点说一下该VS1003模块的电源电路的设计。VS1003的供电需要两个电源,其一是端口供电(IOVDD),为3.3V,另外还有内核供电(CVDD),为2.5V。该模块选用的稳压芯片是性能非常优秀的PAM3101系列超低压降LDO芯片。其中3.3V芯片为PAM3101DAB330,而2.5V芯片为PAM3101DAB250。经实际测试表明,该模块支持3.3V和5V供电。在5V条件下,两芯片都分别稳压到标准的3.3V和2.5V。而在3.3V供电条件下,2.5芯片也是很稳定的稳压到2.5V,而3.3V芯片的压降只有0.05V,稳压后变成3.25V,这也完全能满足VS1003的供电需求。

5.3、SD卡口电路

SD卡电路比较简单,不作详述。

5.4、触摸屏控制电路

触摸屏控制器电路较为灵活,控制IC可选多种兼容形号,如ADS7843、ADS7846、XPT2046等形号。

5.5、USB转串口电路

增加USB转口电路对开发非常有利,利用一条USB线即可以完成供电、下载程序、串口通信这三种功能。特别是对于笔记本电脑,一般是没有串口的,于是这个USB转串口就显得任重而道远了。

六、软件设计

6.1、设备驱动程序

该项目所涉及到的硬件比较多,在软件设计的第一步工作就是要调用各种硬件的驱动程序,对硬件设备初始化。所用到的设备驱动有以下:

LED驱动实验(GPIO输出)

串口驱动

●TFT液晶驱动

●外部中断

●定时器

●PWM输出

●EEPROM 驱动

●模数转换器(ADC)驱动

●实时时钟(RTC)驱动

●触摸屏驱动

●SD卡驱动

●VS1003音频解码芯片驱动

各种设备的驱动详见相应的教程文档,在此由于篇幅有限,就不再重复。

6.2、应用层软件

●FAT文件系统管理

●MP3播放器程序

●图片浏览器程序

●电子书阅读器程序

●万年历与温度计程序

●游戏程序(俄罗斯方块)

●计算器程序

●画画程序

●系统设置程序

同样,详细的应用层软件程序设计也不在这里详细展开,具体详见相应的教程文档。程序流程图如下。

程序流程图

七、最终效果

主界面1

主界面2

RTC实时时钟

音乐播放器

图片解码

电子书

文件浏览

八、参考文献

[1] 刘军,多功能MP3播放器设计,华南理工大学.2009

[2] VS1003 datasheet,VLSI.2005/06

[3] STM32F103 datasheet,ST Inc.2007/06

[4] PAM3101 datasheet,Power Analog Microelectronics Inc.2009/05

[5] FAT文件系统原理,网上资料

相关主题
文本预览
相关文档 最新文档