STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)
文章目录
- 基于STM32的音乐播放器
- 一、项目要求:
- 二、材料准备
- 二、硬件连接
- 三、下载调试
- 四、相关知识点
- 五、程序展示
- 化作尘其它开源项目:
- 单片机项目:
- Linux项目:
2021年10月27-2022年1月1日 可承接单片机设计,有意可添加Q2809786963
基于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(); //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);}
}
化作尘其它开源项目:
单片机项目:
基于stm32c8t6的坡道行驶巡线小车(2020年TI杯大学生电子设计竞赛 C题)https://blog.csdn.net/mbs520/article/details/115438122
基于STM32F4的音乐播放器
https://blog.csdn.net/mbs520/article/details/111313042
基于STM32F4的电子阅读器(首创)
https://blog.csdn.net/mbs520/article/details/110817173
基于51单片机WiFi视频小车(首创)
https://blog.csdn.net/mbs520/article/details/109843972
基于51单片机蓝牙小车
https://blog.csdn.net/mbs520/article/details/109775964
基于MSP430 坡道行驶电动小车(2020年TI杯大学生电子设计竞赛 C题)
https://blog.csdn.net/mbs520/article/details/109090072
基于stm32f4的智能门锁系统
https://blog.csdn.net/mbs520/article/details/106987758
基于51单片机超声波测距小车
https://blog.csdn.net/mbs520/article/details/106599219
基于51单片机定时宠物喂食系统
https://blog.csdn.net/mbs520/article/details/108292187
Linux项目:
基于QT5 Linux平台 停车场管理系统
https://blog.csdn.net/mbs520/article/details/113481824
基于QT5 Linux平台 车载系统
https://blog.csdn.net/mbs520/article/details/112873809
基于Linux系统 媒体播放器
https://blog.csdn.net/mbs520/article/details/107880118
基于Linux系统 语音识别、人机对话
https://blog.csdn.net/mbs520/article/details/113179224
基于Linux系统小钢琴程序(暂无博客)
https://download.csdn.net/download/mbs520/12798287
基于Linux系统 QQ通讯录管理系统(暂无博客)
STM32项目设计:基于STM32F4的mp3、wav音乐播放器 (UCOSIII操作系统、GUI控件)相关推荐
- 基于Android的MediaPlayer的音乐播放器的封装
基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...
- [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】
[嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...
- 基于RT-Thread+STM32F407的蜂鸣器音乐播放器
本项目为RT-Thread学习项目,参考于RT-Thread官网Demo示例 硬件基于STM32F407ZGT6正点原子探索者开发板+无源蜂鸣器模块 RTOS软件基于RT-Thread 4.0.5版本 ...
- 基于嵌入式linux的音乐播放器设计,基于嵌入式Linux的多媒体音乐播放器的设计与实现...
中图分类号:TP316.5 文献标识码:A 文章编号:1009-2552(2009)06-0102-03 基于嵌入式Linux的多媒体音乐播放器的设计与实现 王 奇 (黑龙江八一农垦大学信息技术学院, ...
- 【041】基于51单片机的自动音乐播放器Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的自动音乐播放器系统proteus仿真设计一份: (2).基于51单片机的自动音乐播放器系统proteus仿真设计keli源代码一份: (3).基于51单片机 ...
- html5在线音乐列表播放器,简洁的html5 mp3列表音乐播放器代码
特效描述:简洁的html5 mp3列表 音乐播放器代码.html5网页音乐播放器,mp3播放器,简洁音乐播放器 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 标题歌手 00:00/0 ...
- 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...
- html音频从10秒播放至30秒,基于Arduino制作SD卡音乐播放器
一.项目介绍 前面用ATtiny85制作SD卡音乐播放器,本次主要利用Arduino UNO 和SD卡制作音乐播放器.这个播放器不需要添加多余的模块,只需要SD读卡器和Arduino UNO开发板就可 ...
- 基于Python+tkinter+pygame的音乐播放器完整源码
import os import tkinter import tkinter.filedialog import random import time import threading import ...
- 基于howler.js开发的音乐播放器
2019独角兽企业重金招聘Python工程师标准>>> howler.js 是一个新的 JavaScript 库用于处理 Web 的音频,该库最初是为一个 HTML5 游戏引擎所开发 ...
最新文章
- 用计算机算出手机号码,手机计算器开根号怎么按(万能科学计算器在线使用方法)...
- 30天敏捷生活(9-11):调整30天的节奏
- 庆祝开博第一天!呵呵!
- python 语言教程(3)变量之字典
- Kettle使用_16 闭包Closure Generator树形数据
- JPA注解实现one-to-one的主键关联映射
- myeclipse mysql 乱码_MyEclipse与mysql增改查现乱码解决方案绝对有效
- CF888E Maximum Subsequence(meet in the middle)
- c++ udp多线程 例子_[内附完整源码和文档] 基于udp实现tcp功能进行大文件传输
- java http连接es_连接es
- ×××病毒分析工具集之File Format Identifier v1.0
- 如何解决MacOS无法登录app store的问题?
- 如何在移动端转换CAD图纸?
- 如何学习渗透测试:初学者教程
- 51单片机c语言编程20个实例,51单片机C语言编程,20个实例..pdf
- 加权平均数的例子_加权平均数公式(加权平均数公式例子)
- 两阶段目标检测详解--FastRCNN
- 国一大佬也收藏的16个Python数据可视化案例(附源码)
- Swing实现五子棋
- Single-Domain Generalized Object Detection in Urban Scene via Cyclic-Disentangled Self-Distill阅读笔记
热门文章
- python平均值和加权平均值
- C语言论坛系统课程设计
- Java多线程--概述-转自林炳文Evankaka
- HTML从入门到入土 - CSS基础
- 处理UNICODE下【中文乱码】异常
- 量化投资03---小市值轮动因子---准备工作01
- dropbox与public
- 自动控制原理专业词汇中英文对照(一)
- 用IF公式实现向上取整的结果
- k8s搭建v1.18.3高可用集群时添加master节点报错:failure loading certificate for CA: couldn‘t load the certificate fil