前言:
现时看官们对“播放音乐的代码”都比较注意,你们都想要剖析一些“播放音乐的代码”的相关知识。那么小编同时在网络上搜集了一些关于“播放音乐的代码””的相关知识,希望朋友们能喜欢,各位老铁们快快来学习一下吧!基于STM32的音乐播放器
一、项目要求:
硬件驱动+软件工具类项目
项目需要的技术:
UCOSIIIGUI显示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卡根目录下
四、相关知识点
(一)、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播放
(三)、图片显示
(四)、GUI界面
五、程序展示
展示部分关键代码:
#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); }}
完整资料可进群免费领取。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料
标签: #播放音乐的代码