我想做个MP3,要怎么入手?

从我更新的频率,大家应该猜出来了,最近有点忙。忙完了设备调试的工作,又来了个画图的活。本来改动不大,但怎料...哎,一言难尽。

今天回答一个粉丝的提问:

看完这个回复,我依然没明白他到底想做哪部分。算了,随便写写吧。

如果是想自己做解码的部分的话,略微还是有些难度,简单说下,欢迎补充。假设你是一个有单片机基础,但是对MP3以及相关知识不太了解的人,那么首先,要明白一个MP3的结构由哪些部分组成,如下:


存储部分

可以选择优盘或者TF卡之类的,优盘的话驱动芯片可以选择CH375,TF卡或者SD卡的话,一般是SPI接口就能驱动。但无论这两种之间的哪一种,你都要了解文件系统,因为你要查找存储器中的MP3格式的文件,文件系统个人建议FATFS,网上资料很多,百度去吧。


解码芯片

解码芯片这里有两个选择,一个是VS1003B,一个是单片机自身。

VS1003B

先说VS1003B,这个芯片出现很多年了,某宝一搜一大堆,网上的相关资料也很多。这是个具有DSP内核的编解码芯片,不光能播放MP3,还能录音,貌似还可以用它做VOIP。如下:

价格从20到40都有,随意。

单片机自身

像STM32F103系列里,有的型号是自带IIS接口的,这样的话可以把解码工作在单片机内部进行处理:

MP3解码,建议使用helix库(别的我也不知道),网上资料很多,放心用。比较占资源,据说编译后要用40K左右的RAM。

IIS接口是这样的:

有的时候是三条线,有的时候是四条线,取决于后面的音频DAC芯片是否需要MCLK。

然后外接的音频DAC我知道的有两种,一种是CS4344:

这个芯片工作时必须提供一个MCLK,而且必须要和SCLK同步,也就是说MCLK不能是外部晶体提供的,必须是处理器同时提供MCLK和SCLK。

我在数码之家论坛上,看到过有人用STM32F103的IIS外接CS4344,做了一个MP3,因为4344需要的时钟频率比较奇葩,所以作者把STM32小小的超频到了80MHZ,然后输出了一个频率接近的MCLK。

另一个芯片是WM8978,这个芯片也是比较强大的:

虽然标的是MP3模块,它也确实是MP3模块,不过送的例程里,是对WAV文件进行的解码,这种文件格式比较简单,不需要使用helix库。想要用它解码MP3文件的话,多上网搜搜吧。

对了,它虽然也需要MCLK信号,但是不必和SCLK信号同步。也就是说可以外接一个晶振给它提供时钟信号,同时芯片内部还有PLL电路,可以对输入的时钟进行倍频、分频,比较灵活。


处理器


如果用的是VS1003B的话,增强型51,或者STM32就可以了。因为数据量比较大,该芯片是SPI接口的,所以尽量使用硬件SPI。如果是WM8978这种,需要IIS接口的,那就选带有IIS接口的处理器,例如STM32F103VET或者STM32F407都可以。


功放


TDA2003?

网上很多,不解释


供电


如果用的是锂电池,尽量带一个充电电路吧,也不复杂。TP4056,TP4057?

基本就这些了吧。当然,如果你做到一半,发现有心无力,买个现成的MP3模块吧。这东西现在很成熟,没多少钱:

开心就好~~~


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析

关于进程上下文,中断上下文,请看这篇文章Linux进程上下文和中断上下文内核空间和用户空间自旋锁的初衷:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以…

网络流24题 洛谷 3355 骑士共存

转换成最小割&#xff1b; #include <bits/stdc.h>using namespace std ;const int mx [ 9 ] { 2 , 2 , -2 , -2 , -1 , 1 , -1 , 1 } ; const int my [ 9 ] { -1 , 1 , -1 , 1 , 2 , 2 , -2 , -2 } ; const int N 100000 10 , inf 1e8 7 ;queue < int …

从零开始设计CPU

CPU&#xff0c;中文全称为中央处理单元&#xff0c;简称处理器&#xff0c;是现代电子计算机的核心器件。如果你想了解一台计算机是如何构建并工作的&#xff0c;那么深入了解CPU的设计非常有用。不过&#xff0c;这个美好的愿望是否会遭遇“骨感”的现实呢&#xff1f;毕竟一…

嵌入式OS入门笔记-以RTX为案例:一.简介

嵌入式OS入门笔记-以RTX为案例&#xff1a;一.简介 最近在做OS相关的项目&#xff0c;一方面涉及到大量&#xff08;通用&#xff09;操作系统的概念和理解&#xff0c;另一方面要深入到一个小实时操作系统的源代码中&#xff0c;并在此操作系统上开发应用。虽然说内容上并不难…

Linux进程O(1)调度算法,面试必考哦

进程调度有很多方法&#xff0c;这里只讨论Linux下的进程调度&#xff0c;先说下&#xff0c;这个是高端面试必考题&#xff0c;既然我发文了&#xff0c;大家最好看看&#xff0c;而且目前看到的写得最好的文章&#xff0c;推荐给大家。Linux是一个支持多任务的操作系统&#…

让Visual Studio 也支持JS代码折叠 —— 续 [ Visual Studio | Js | ScriptOutline | SmallOutline ]...

前言 上文让JS代码折叠的功能能用了&#xff0c;本文将对代码继续改进以期更好用、更实用&#xff0c;随后有介绍Visual Studio JS方面的几个插件。 文章 1. VS2003折叠代码的Micro 2. MSDN 3. Document Outline for Client Script in Visual Studio 2005 正文 …

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

嵌入式OS入门笔记-以RTX为案例&#xff1a;二.快速移植到RTX本篇笔记将简单介绍RTX&#xff0c;包括基本架构&#xff0c;如何在Keil中配置。需要安装ARM-MDK和一块硬件板&#xff0c;笔记以STM32F4Discovery为例子。1.为什么要用RTOS&#xff1f;尽管把所有程序放在一个大的循…

再解析下内核自旋锁和优先级翻转问题

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼&#xff1f;Linux内核自旋锁之前写的自旋锁的文章&#xff0c;现在再加一篇&#xff0c;可能单纯的一两次说明不能把问题说清楚。所以再写一篇文…

ios 逆向编程(环境搭建)

首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1&#xff0c; 首先要有一台越狱的手机 最好是9.1以下的&#xff0c;因为9.2以上&#xff08;包括9.2&#xff09;就不能完美越狱了 2&#xff0c;手机也要5s以上的&#xff08;因为从5S开始支持arm64架构&…

最大、最小堆的实现

最大最小堆 堆是一种经过排序的完全二叉树&#xff0c;其中任一非终端节点的数据值均不大于&#xff08;或不小于&#xff09;其左子节点和右子节点的值。 最大堆和最小堆是二叉堆的两种形式。 最大堆&#xff1a;根结点的键值是所有堆结点键值中最大者。 最小堆&#xff1a;根…

嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

嵌入式OS入门笔记-以RTX为案例&#xff1a;四.简单的时间管理 上一节简单记录了进程task。有了进程以后&#xff0c;我们需要关心怎么样分配CPU资源&#xff08;或者运行时间&#xff09;给每个进程。那么就要引入排程&#xff08;scheduling&#xff09;的概念。排程一般都是O…

我等这个含蓄的技术男当上了CEO

大家好&#xff0c;祝大家五一节日快乐&#xff01;今天没有写技术文章&#xff0c;今天想吹一个人&#xff0c;他是我的朋友&#xff0c;他做公众号很久了&#xff0c;技术文章写的也不错&#xff0c;但是阅读和关注量一直没有上来&#xff0c;我之前好几次在公众号上转发了他…

广东总冠军

lets go tiger 看这篇文章之前&#xff0c;先看看我们看球的视频 恭喜广东拿下总冠军&#xff01; 恭喜胡明轩夺得FMVP&#xff01; 我当时预测的是周鹏或者胡明轩拿下FMVP&#xff0c;最后是胡明轩&#xff0c;广东后场三条枪表现都非常亮眼。如果是上一场广东夺冠&#xff0c…

每日一题(1) —— 数组计算

判断下面代码是否可执行&#xff1f;如果可执行&#xff0c;执行结果是多少&#xff1f; #include <stdio.h>int main(void) {int array[10] {0, 2, 3, 4, 5, 6, 7, 8, 9, 10};0[array] 1;printf("%d\n", (-1)[array 5]);return 0; } 分析&#xff1a; C语…

内存文章汇总,并剖析mmap

在看这篇文章之前&#xff0c;可以先看看下面这几篇文章Linux内存&#xff0c;先看这篇文章Linux内存寻址方式Linux虚拟内存TLBLinux物理内存初始化Linux io内存存在的意义~修改cmdline 把内存改成512MB用mtrace定位内存泄漏什么是内存泄漏&#xff1f;Linux内存管理slub分配器…

[综述泛读] A survey on web services composition (IJWGS, 2005)

Time: 2.5 hours Dustdar S, Schreiner W. "A survey on web services composition." International Journal of Web and Grid Services: 1-30. 2005 (30 pages, 单栏) (gs:169) Schahram Dustdar (维也纳技术大学, full prof) Dusdar是Distributed Systems Group的老…

韦老师的开发板和嵌入式书籍赠送

大家五一快乐&#xff01;我知道这个时候大家都没有什么心思学习&#xff0c;所以找了联合了几个朋友一起给大家送点东西。这几个技术号主都非常用心的给大家分享技术文章&#xff0c;我相信&#xff0c;跟他们一起&#xff0c;你们也能变得更加优秀。奖品包括&#xff1a;1. 韦…

每日一题(2)—— -2与2的比较

分析下面的代码&#xff0c;求运行结果。 #include <stdio.h>int main(void) {if(-2 > 2){printf("11111\r\n");}else{printf("22222\r\n");}return 0; }分析&#xff1a; -2和2都没有声明存储类型&#xff0c;编译器默认按int存储&#xff0c;所…

truffle unbox react 出坑指南

最近几天差点就被这鬼东西给逼疯了&#xff0c;truffle init 、truffle unbox webpack 不管我怎么运行都是对的&#xff0c;唯独truffle unbox react 不管在哪个windows都会报错&#xff0c;换了好几台电脑&#xff0c;心都累完了&#xff0c;还好我坚持了下来&#xff0c;找了…

单片机6年想转嵌入式Linux ,不知如何下手?

刷知乎看到下面这个提问。单片机6年想转嵌入式Linux &#xff0c;不知如何下手&#xff1f;现在挺尴尬&#xff0c;做的单片机产品总是感觉重复重复再重复&#xff0c;想学习点新东西&#xff0c;不知道如何转。说实话&#xff0c;这个问题自己关注了很久。今天就借题主这个问题…