基于STM32的MP3 下载本文

贺州学院本科毕业论文(设计)

3.2.5 FM24C16模块驱动程序设计

FM24C16也是采用IIC总线和MCU通信,通过标准的IIC操作,很容易实现对FM24C16的读写。FM24C16的器件地址与页地址是连在一起的,这里需要注意。FM24C16的高四位为固定的1010,而第四位用来表示页地址0~7,每页拥有256个字节,这样FM24C16的总大小为2048字节。

对FM24C16的读操作,先写入0XAx(x:0~7),再写入要写入的地址,紧跟着就可以写入数据了。而对于FM24C16的读操作,则稍微复杂一点在执行写操作的上述过程之后,再写入0XAx+1,代表执行读操作,紧随着就可以读数据了。 3.2.6 TEA5767模块驱动程序设计

TEA5767收音机模块支持IIC和三线模式,这里我们选择IIC来控制。TEA5767的器件地址是0XC0,在对TEA5767的读操作通过写入0XC1来执行。

TEA5767的读操作与写操作基本相同,只是IIC开始之后写入0XC1,将发送一个字节改为接收一个字节就可以了。 3.2.7 RCT时钟驱动程序设计

RTC实时时钟是利用STM32F103RBT6内部的时钟模块实现的,根据STM32

的DATASHEET,得到RTC实时时钟的初始化过程如下:

? 使能备份区域时钟 ? 取消备份区域写保护 ? 软复位备份区域 ? 开启外部低速晶振 ? 等待晶振就绪 ? 设置LSI作为RTC时钟 ? RTC时钟使能 ? 设置时钟分频系数 ? 等待RTC寄存器操作结束 ? 允许RTC配置 ? 配置秒钟寄存器 ? 配置更新

? 等待RTC寄存器操作完成

17

贺州学院本科毕业论文(设计)

RTC时钟的设置到这里就结束了,在RTC时钟完成上述配置之后,就会每隔一段固定的时间,对秒钟寄存器(RTC->CNT)进行加1。这个操作软件不参与,一切由硬件执行。时钟分频系数(RTC->PRL)确定固定时间,理论上因为外部低频晶振是32.768Khz,所以只要在RTC->PRL内写入32768-1就可以得到精确的1秒了,不过因为晶振的误差率,往往需要对这个值进行调整,以确保得到比较准确的走时。

3.2.8 JPEG/BMP解码模块程序设计

JPEG/BMP图片播放是本系统的一个重要功能,两者的解码均采用软件实现,BMP的解码相对JPEG比较简单,这里重点对JPEG的解码原理进行介绍。

JPEG解码算法原理:

JPEG压缩是利用人的视角系统特性,采用量化和无损压缩编码相结合的

方法去掉视角的冗余信息和数据本身的冗余信息来达到压缩的效果。JPEG算法可分为基本JPEG(Baseline system)和扩展JPEG(Extended system)。本设计重点在为Baseline system的算法做介绍。JPEG解码算法如图3.9 所示:

图3.9 JPEG解码算法框图

在JPEG解码反量化的公式:

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

综上所述具体说明了JPEG的解码算法,在本设计中JPEG/JPG的解码通过软件来实现。返回值为此次解码成功与否的标志。在执行该函数之前,需要先执行图片解码的两个函数,一个函数用来清空个量化表,一个函数用来获取解码所需的各种参数。

对于BMP的解码在这里不做详细解说了。

3.2.9 FAT32文件系统模块程序设计

18

贺州学院本科毕业论文(设计)

本设计需要读取SD卡,故必须对文件系统进行管理,本系统的重点是对文件系统的解析。本设计支持FAT16和FAT32两种文件系统,由于FAT文件系统的构架非常复杂而且庞大,这里我们主要FAT32文件系统的构架做简单介绍以便可以正常读取FAT32系统下的文件。 FAT32文件系统:

(1)DBR(操作系统引导记录区)的说明

要想操作FAT32我们首先要了解DBR。其中DBR 的核心部分为BPB (BIOS

Parameter Block)(第12~90 字节为BPB),BPB 的意义需要我们深入详细的去理解,才能够更好的完成和操控FAT32。DBR各字节意义如图3.10:

图3.10 DBR区各字节意义

DBR区内,对操作有用的数据只有90个字节(即BPB字段)。但是就在

这90 个字节就可以获取我们关于磁盘的许多信息,比如每扇区字节数、每簇扇区数、磁道扇区数等等。BPB部分数据字节意义如图3.11所示:

19

贺州学院本科毕业论文(设计)

图3.11 BPB部分字段意义表

通过对上面字段读取的了解,可以得到FAT32文件系统的许多紧要信息:每扇区字节数、每簇扇区数、根目录簇号、该卷总扇区数、FAT表1所在的扇区数等。

FAT32 文件系统最具特色的一部分是FAT 表,FAT32 的精华在于FAT表的链式存储机制,它可以是的数据存储不连接,使磁盘的功能得到更好的发挥。一

20

贺州学院本科毕业论文(设计)

个FAT表的内容如图3.12所示:

图3.12 FAT表

这样,在我们获取文件的起始簇随后,就可以从起始簇开始读取文件的内容

了,如果大于一个簇,则可在FAT表找下一个簇号,直到文件结束,从而达到了文件的读取功能。 3.3 系统整合

上一节详细介绍了系统各个模块程序的设计,一步一步实现了系统的各个功能,接下来需要做的工作就是把整个系统的模块程序整合起来,成为一个整体。

本设计的主控制程序通过调用各个模块的相关底层函数,从而实现系统的功

能整合,主控制程序的流程图如图3.15所示,系统开机以后,第一步进行的是对各个硬件模块的初始化;第二步是对FAT文件系统的初始化,对于FAT文件系统来说要判断是否初始化成功;第三步是寻找系统文件,本设计的系统文件全部在SYSTEM文件夹下,该文件夹下主要有:FONT文件夹、SYSICO文件夹、GAME文件夹。FONT文件夹下包括FONT12.FON和FONT16.FON两种字体文件。SYSICO文件夹下则包括了全部的系统图标(BMP格式)。GAME文件夹下包括三个等级的游戏文件夹,游戏图片也在相应的文件夹中,全部为BMP格式。其中FONT文件夹和SYSICO文件夹在系统加载的时候需要的。GAME文件夹则是在游戏的时候才进行检索的。

21