完整版基于STM32MP3播放器设计分析Word格式.docx
- 文档编号:16946420
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:16
- 大小:601.33KB
完整版基于STM32MP3播放器设计分析Word格式.docx
《完整版基于STM32MP3播放器设计分析Word格式.docx》由会员分享,可在线阅读,更多相关《完整版基于STM32MP3播放器设计分析Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
综述
本设计由STM32最小系统,SD卡的读取模块,TFT控制模块,外扩FLASH模块,触摸屏模块,串口通信模块组成。
将解决SD卡的读取以及使用FATFS文件系统来对SD卡操作,TFT液晶屏的控制及触摸屏原理、还有人机界面UI的实现等问题[5]。
系统架构如图2-1所示。
基本设计流程是使用STM32系列微控制器,采用FATFS文件系统方式读取SD卡中音乐文件数据,将所读取的数据流传输给CPU软件解码(helix解码库)解码编程PCM音频,通过I2S送到ADC芯片PCM1770音频输出驱动耳机实现音乐播放功能。
液晶屏显示歌曲的实时播放状态,功能按扭和控制歌曲的播放、停止、声音增大、减小等。
同时,TFT触摸屏则用于功能按扭和人机交换界面的输入。
2.2系统架构图
图2-1系统架构图
2.3硬件模块
2.3.1处理器
一、芯片介绍。
CortexM3是ARM公司最新推出的基于ARMv7体系架构的处理器核,具有高性能、低成本、低功耗的特点,专门为嵌入式应用领域设计。
ARMv7架构采用了Thumb2技术,它是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案完整的代码兼容性。
Thumb2技术比纯ARM代码少使用31%的内存,减小了系统开销,同时能够提供比Thumb技术高出38%的性能[7]。
在中断处理方面,CortexM3集成了嵌套向量中断控制器NVIC(NestedVectoredInterruptController)。
NVIC是CortexM3处理器的一个紧耦合部分,可以配置1~240个带有256个优先级、8级抢占优先权的物理中断,为处理器提供出色的异常处理能力。
同时,抢占(Preemption)、尾链(Tailchaining)、迟到技术(Latearriving)的使用,大大缩短了异常事件的响应时间。
CortexM3异常处理过程中由硬件自动保存和恢复处理器状态,进一步缩短了中断响应时间,降低了软件设计的复杂性。
DP)或串行JTAG调试端口(SWJDP,允许JTAG或SW协议)使用。
二、引脚图。
图2-2STM32F103ZET6微控制器引脚分布图
2.3.3SD卡模块
一、SD卡介绍。
STM32微处理器CPU(STM32F103ZET6)具有一个SDIO接口。
SD/SDIO/MMC主机接口可以支持MMC卡系统规范4.2版中的3个不同的数据总线模式:
1位(默认)、4位和8位。
在8位模式下,该接口可以使数据传输速率达到48MHz,该接口兼容SD存储卡规范2.0版[12]。
二、SD卡原理图。
图2-3SD卡接口电路
.
图2-4SD卡上电识别流程图
2.3.3LCD显示模块
一、LCD控制器。
LCD,即液晶显示器,因为其功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互,目前仍是各种电子显示设备的主流。
因为STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有这些驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32芯片通过驱动芯片来控制液晶屏和触摸屏。
2、FSMC框图结构。
FSMC(flexiblestaticmemorycontroller),译为静态存储控制器。
可用于STM32芯片控制NORFLASH、PSRAM、和NANDFLASH存储芯片。
我们是使用FSMC的NOR\PSRAM模式控制LCD。
其结构如图2-5所示。
..
图2-5FSMC框图结构框图
2.3.4触摸屏模块
一、触摸屏感应原理。
触摸屏常与液晶屏配套使用,组合成为一个可交互的输入输出系统。
除了熟悉的电阻、电容屏外,触摸屏的种类还有超声波屏、红外屏。
触摸屏的基本原理为分压,它由一层或两层阻性材料组成,在检测坐标时,在阻性材料的一端接参考电压Vref,另一端接地,形成一个沿坐标方向的均匀电场。
当触摸屏受到挤压时,阻性材料与下层电极接触,阻性材料被分为两部分,因而在触摸点的电压,反映了触摸点与阻性材料的Vref端的距离,而且为线性关系,而该触点的电压可由ADC测得。
更改电场方向,以同样的方法,可测得另一方向的坐标。
二、TSC2046触摸屏控制器。
TSC2046是专用在四线电阻屏的触摸屏控制器,MCU可通过SPI接口向它写入控制字,由它测得X、Y方向的触点电压返回给MCU。
如图2-6所示
图2-6TSC2046与电阻屏的连接图
2.3.5PCM音频模块
PCM1770器件是CMOS,单片,集成电路包括立体声数字-模拟转换器,耳机电路。
数据转换器采用TI的增强型多级架构,它采用噪声整形和多值振幅量化,实现出色的动力性能和改进的耐时钟抖动。
该PCM1770器件接受多个行业标准音频数据格式,16至24位数据,左对齐,I2S等,提供轻松连接到音频DSP和解码器。
采样率高达50kHz的支持。
全套用户可编程功能是通过一个3线串行控制端口,支持寄存器写入功能访问。
原理接线图如图2-7所示
图2-7PCM1770连接图
3软件设计
3.1软件开发架构
本设计由STM32最小系统,SD卡的读取模块,TFT控制模块,触摸屏模块,串口通信模块组成。
将要解决SD卡的读取及使用FATFS系统对SD卡的操作、TFT液晶的控制及触摸屏原理、还有图形用户界面GUI的实现等问题[10]。
架构如图3-1软件开发架构图
图3-1软件开发架构图
3.2软件程序设计流程图
图3-2程序设计流程图
本系统的程序设计流程图如图3-2所示,工作流程是:
STM32从SD卡中读取音乐文件数据,将所读取的数据流传输给CPU软件解码(helix解码库)解码编程PCM音频,通过I2S送到ADC芯片PCM1770音频输出驱动耳机实现音乐播放功能。
液晶屏显示歌曲的实时播放状态,功能按扭和控制歌曲的播放、停止、声音增大、减小等。
同时,TFT触摸屏则用于功能按扭和人机交换界面的输入。
音乐播放链路:
图3-3音乐播放链路
3.3软件代码结构
为了使代码结构清晰,方便以后的维护,代码结构设计如下:
在根目录I2S-MP3下,划分为七个文件夹,分别为STARTUP、CMSIS、FWLB、USER、DOC、ff9和mp3。
下面分别就七个文件夹的作用和结构进行说明,其代码目录树状结构如图3-4所示。
图3-4整体工程代码结构
对其进行分析:
目录名称目录说明
STARTUP启动文件
CMSISM3系列通用的文件
FWLBST片上资源外设的驱动文件
USER用户写的驱动文件
DOC工程说明文档
ff9FATFS文件系统文件
mp3音乐播放相关文件
详细代码结构
启动文件是任何处理器在上点复位之后最先运行的一段汇编程序。
在我们编写的c语言代码运行之前,需要由汇编为c语言的运行建立一个合适的环境,接下来才能运行我们的程序[9]。
液晶屏驱动程序
/**
*@brieflcd初始化
*@param无
*@return无
*/
voidLCD_Init(void)
{
LCD_GPIO_Config();
//配置IO端口
LCD_FSMC_Config();
//LCDFSMC模式的配置
LCD_Rst();
//LCD软件复位
LCD_REG_Config();
//配置LCD初始化寄存器
}
文件系统驱动程序
*@brieffs文件系统初始化
voidSd_fs_init(void)
/*SD卡中断初始化*/
SDIO_NVIC_Configuration();
/*SD卡硬件初始化,初始化盘符为0*/
f_mount(0,&
myfs[0]);
/./ff9文件库
/*
*@briefSDIO优先级配置为最高优先级
*/
voidSDIO_NVIC_Configuration(void)
NVIC_InitTypeDefNVIC_InitStructure;
/*ConfiguretheNVICPreemptionPriorityBits*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel=SDIO_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&
NVIC_InitStructure);
触摸屏卡驱动程序
*@brief触摸模拟SPIIO和中断IO初始化
voidTouch_Init(void)
GPIO_SPI_Config();
*@brief模拟SPI的GPIO配置,当SPI的4根信号线换为其他IO时,
*只需要修改该函数对应的宏定义即可。
voidGPIO_SPI_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
/*开启GPIO时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);
/*模拟SPI的GPIO初始化*/
GPIO_InitStructure.GPIO_Pin=SPI_CLK_PIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(SPI_CLK_PORT,&
GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=SPI_MOSI_PIN;
GPIO_Init(SPI_MOSI_PORT,&
GPIO_InitStructure.GPIO_Pin=SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(SPI_MISO_PORT,&
GPIO_InitStructure.GPIO_Pin=SPI_CS_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(SPI_CS_PORT,&
/*拉低片选,选择XPT2046*/
GPIO_ResetBits(SPI_CS_PORT,SPI_CS_PIN);
//GPIO_SetBits(SPI_CS_PORT,SPI_CS_PIN);
/*XPT2046中断IO配置*/
TP_INT_GPIO_Config();
3.3.4MP3驱动程序
*@briefplayer_run运行MP3播放器过程,内部死循环
voidplayer_run(void)
charmusic_name[FILE_NAME_LEN];
f_mount(0,&
fs);
file_scan(path);
//扫描文件
if(file_num==0)
{
printf("
\r\nnomp3file!
"
);
return;
//跳出本函数
}
player_state=S_READY;
//初始化状态
touch_even=E_NULL;
//初始化事件标志
all_page=(file_num+7)/8;
//
current_page=1;
printf("
\r\nfile_num=%d,all_page=%d"
file_num,all_page);
//PCM1770_VolumeSet(0);
//调节音量
PCM1770_VolumeSet(28);
lcd_list(current_page);
//显示歌曲列表,第一页
while
(1)//进入死循环,根据状态切换
{
if(play_index>
=file_num-1)//检查play_index
play_index=file_num-1;
//index指向最后一个文件
elseif(play_index<
=0)
play_index=0;
even_process();
//事件处理
switch(player_state)
{
caseS_PLAY:
//播放状态
//开始play流程
//读取音频文件流程
//´
打开playlist,读取音频文件名
fres=f_open(&
file,"
0:
mp3player/playlist.txt"
FA_READ);
fres=f_lseek(&
file,play_index*FILE_NAME_LEN);
fres=f_read(&
file,music_name,FILE_NAME_LEN,&
rw_num);
fres=f_close(&
file);
//获取文件名,准备解码
printf("
准备播放:
%s"
music_name);
if(strstr(music_name,"
.mp3"
)||strstr(music_name,"
.MP3"
))//MP3格式
{
//开始MP3解码
mp3_player(music_name);
}
else//WAV文件格式
{
//开始WAV文件播放
wav_player(music_name);
}
break;
caseS_SWITCH:
//切歌状态
player_state=S_PLAY;
//¸
更新标志位
/*检测要切换的歌曲是否在播放的上一页*/
if((play_index+8)/8<
current_page)
current_page--;
//¸
刷新当前页码
lcd_list(current_page);
//刷新LCD列表
}
/*检测要切换的歌曲是否在播放的下一页*/
if((play_index+8)/8>
current_page)
{
current_page++;
break;
default:
break;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 基于 STM32MP3 播放 设计 分析