STM32项目设计:基于STM32F4的音乐播放器 (UCOSIII操作系统、GUI控件)

基于STM32的音乐播放器

在这里插入图片描述
哔哩哔哩视频链接:https://www.bilibili.com/video/BV1cp4y1678G/
资料链接:https://download.csdn.net/download/mbs520/13711787
百度网盘链接:https://pan.baidu.com/s/1G-Q1CA1Px8RSZJtTYjmELw
提取码:abcd

取走记得点赞

一、项目要求:

硬件驱动+软件工具类项目

项目需要的技术:

  • UCOSIII
  • GUI显示
  • IIS协议
  • 声卡驱动----资料及参考代码提供
  • SD卡驱动—资料及参考代码提供
  • Fatfs文件系统
  • IIC/SPI 及W25Q128驱动
  • 字库在MCU屏的使用
  • mp3、WAV解码库的移植及使用–资料及参考代码提供
  • JPG、BMP解码库的移植及使用–资料及参考代码提供
  • DMA使用

功能基本和现在的MP3设备一样

①能够通过SD卡驱动嵌入文件系统实现对SD卡目录的扫描获取音乐文件(.mp3 .wav等)

②驱动WM8978声卡芯片 使用IIS实现对SD卡读取的音频数据后的向声卡传输 并控制声卡播放音乐

③能够自己在mcu屏中显示MP3播放器相关信息
歌曲名。。。。

可以使用字库显示相关中文

二、材料准备

1、STM32F4开发板一块(需要音频接口支持)(我用的GEC M4)
(注意要买能插LCD屏的、最好有板载wm8978,没有的话可以外接音频驱动模块)
作用:主控芯片、处理各种数据
在这里插入图片描述
或者:
在这里插入图片描述
+
在这里插入图片描述

2、800*480 4.3寸电容触摸LCD屏(我用的正点原子的屏)
(注意不兼容其他分辨率的屏)
作用:显示与触摸控制
在这里插入图片描述
3、一张32G以下的SD卡和一个读卡器

作用:存储mp3、wav 文件、图片文件等必要文件
在这里插入图片描述

二、硬件连接

1、把屏幕插到开发板上即可

三、下载调试

1、下载好相关资料
在这里插入图片描述
2、下载源代码到单片机
3、将SD卡根目录文件拷贝到SD卡根目录下
在这里插入图片描述
4、上电启动系统,供电要足,不然屏幕半亮、声卡驱动异常。
能正常显示图片、按钮控件即移植成功。

四、相关知识点

(一)、FATFS文件系统(就是个用来读写SD卡文件的)

1、FATFS 是一个完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完
全用标准 C 语言编写,所以具有良好的硬件平台独立性,可以移植到 8051、PIC、AVR、SH、
Z80、H8、ARM 等系列单片机上而只需做简单的修改。它支持 FATl2、FATl6 和 FAT32,支持多个存储媒介;

2、为什么需要文件系统?
因为SD卡只是一种存储器,普通的读写操作只能是针对地址进行读取,读取出来的数据都是一些字符数据,并没有文件的概念,加入了文件系统的SD卡可以利用FATFS文件系统进行管理,比如说要存储一张图片只需要以文件的形式存储,而普通的读写只能是把图片数据一个字节一个字节地存到一块指定内存中,读取也要严格根据地址位置读取

3、正点原子提供了比较好用的FATFS源码可以直接移植使用
代码文件可以到正点原子官网下载
下面是主要API函数: 进行对文件的读取、写入等一系列操作,与C语言文件IO差不多相似,看文件名应该知道大概的用途

在这里插入图片描述

(二)、MP3播放

下次再写,困了~o~

(三)、图片显示
下次再写,困了~o~

(四)、GUI界面
下次再写,困了~o~

五、程序展示

展示部分关键代码:


#include "stm32f4xx.h"


/*  开始任务  */
//任务优先级
#define START_TASK_PRIO		3
//任务堆栈大小	
#define START_STK_SIZE 		128
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈	
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);

/*  主任务  */
//任务优先级
#define MAIN_TASK_PRIO		6
//任务堆栈大小	
#define MAIN_STK_SIZE 		512
//任务控制块
OS_TCB MainTaskTCB;
//任务堆栈	
CPU_STK MAIN_TASK_STK[MAIN_STK_SIZE];
//任务函数
void main_task(void *p_arg);



//系统初始化
void sys_init(void)
{
    
    
	u8 key;
	
	uart_init(115200);  //串口初始化
	LED_Init();         //LED初始化
	KEY_Init();
	LCD_Init();					//LCD初始化  
	
	FSMC_SRAM_Init();			//SRAM
	tp_dev.init();			//触摸初始化	
	W25QXX_Init();				//初始化W25Q128
	gui_init();          //gui初始化
	
	my_mem_init(SRAMIN);		//初始化内部内存池 
	my_mem_init(SRAMEX);		//初始化外部内存池 
	my_mem_init(SRAMCCM);		//初始化CCM内存池 
	exfuns_init();				//为fatfs相关变量申请内存  
  	f_mount(fs[0],"0:",1); 		//挂载SD卡 
 	f_mount(fs[1],"1:",1); 		//挂载FLASH.
	piclib_init();										//初始化画图	  
	
	while(font_init()) ;			//检查字库
	while(WM8978_Init());//检查音频芯片是否正常
}

int main(void)
{
    
    
	OS_ERR err;
	CPU_SR_ALLOC();
	
	delay_init(168);  	//时钟初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
	
	sys_init();    //系统初始化
	delay_ms(150);   
	LCD_Clear(GRAY);//清屏
	
	
	OSInit(&err);		//初始化UCOSIII
	OS_CRITICAL_ENTER();//进入临界区
	//创建开始任务
	OSTaskCreate((OS_TCB 	* )&StartTaskTCB,		//任务控制块
				 (CPU_CHAR	* )"start task", 		//任务名字
                 (OS_TASK_PTR )start_task, 			//任务函数
                 (void		* )0,					//传递给任务函数的参数
                 (OS_PRIO	  )START_TASK_PRIO,     //任务优先级
                 (CPU_STK   * )&START_TASK_STK[0],	//任务堆栈基地址
                 (CPU_STK_SIZE)START_STK_SIZE/10,	//任务堆栈深度限位
                 (CPU_STK_SIZE)START_STK_SIZE,		//任务堆栈大小
                 (OS_MSG_QTY  )0,					//任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                 (OS_TICK	  )0,					//当使能时间片轮转时的时间片长度,为0时为默认长度,
                 (void   	* )0,					//用户补充的存储区
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                 (OS_ERR 	* )&err);				//存放该函数错误时的返回值
	OS_CRITICAL_EXIT();	//退出临界区	 
	OSStart(&err);  //开启UCOSIII
	while(1);
}

//主任务
void main_task(void *pdata)
{
    
    
	while(1)
	{
    
    
		audio_play();//音乐播放器
		LCD_Clear(WHITE);
		delay_ms(1000);
	}
} 

猜你喜欢

转载自blog.csdn.net/mbs520/article/details/111313042