一、项目哀求:
硬件驱动+软件工具类项目
项目须要的技能:

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

①能够通过SD卡驱动嵌入文件系统实现对SD卡目录的扫描获取音乐文件(.mp3 .wav等)
②驱动WM8978声卡芯片 利用IIS实现对SD卡读取的音频数据后的向声卡传输 并掌握声卡播放音乐
③能够自己在mcu屏中显示MP3播放器干系信息歌曲名。。。。
可以利用字库显示干系中文
二、材料准备1、STM32F4开拓板一块(须要音频接口支持)(我用的GEC M4)(把稳要买能插LCD屏的、最好有板载wm8978,没有的话可以外接音频驱动模块)浸染:主控芯片、处理各种数据
2、800480 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_PRIO3//任务堆栈大小#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_PRIO6//任务堆栈大小#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();//SRAMtp_dev.init();//触摸初始化W25QXX_Init();//初始化W25Q128gui_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);//初始化UCOSIIIOS_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); //开启UCOSIIIwhile(1);}//主任务void main_task(void pdata){while(1){audio_play();//音乐播放器LCD_Clear(WHITE);delay_ms(1000);}}
完全资料可进群免费领取。
嵌入式物联网的学习之路非常漫长,不少人由于学习路线不对或者学习内容不足专业而错失落高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!
记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料









