我想做个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,一经查实,立即删除!

相关文章

让CSS兼容IE和Firefox的技巧集合

CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下。对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE 影响 CSS 处…

[内核同步]自旋锁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;毕竟一…

IT人员必看的几个网站 http://gzsean.blog.51cto.com

IT技术开发综合类  适合人群&#xff1a;只适合软件开发者技术开发最全面的论坛&#xff0c;里面可以遇到很多牛人&#xff0c;版面也很全&#xff0c;什么J2EE&#xff0c;.NET啊&#xff0c;该有的全上&#xff0c;在这里基本上可以提出任何问题&#xff0c;人气也是最旺的…

上传突破学习笔记

上传地方&#xff0c;上传路径&#xff0c;上传验证&#xff0c;上传突破解析漏洞&#xff1a;后门格式&#xff0c;后门就必须要以脚本格式执行&#xff0c;才能执行代码效果。asp木马格式 必须要以asp执行 不可能用jpg&#xff0c;gif&#xff0c;txt等格式执行&#xff0c;解…

嵌入式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 正文 …

sqlserver数据库访问帮助类

1 /// <summary>2 /// 数据库访问帮助类3 /// </summary>4 public static class DbHelper5 {6 private const string ConnStr "server127.0.0.1;databasedb_test;Uiduser1;PwdPs123321;";7 8 9 /// <summary> 10 /// 执行 增、删、改 11 /// <…

嵌入式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;可能单纯的一两次说明不能把问题说清楚。所以再写一篇文…

有许多话不能说

说的问题是一个大问题。人&#xff0c;长了嘴巴&#xff0c;除了吃饭便是说话。当然还有代替鼻孔呼吸、排除呼吸道污秽等功能&#xff0c;但均不可与说同日而语。涉及说&#xff0c;就有说的内容问题&#xff0c;据观察&#xff0c;有许多话是不能说的。 好话不能说&#xff0c…

ios 逆向编程(环境搭建)

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

嵌入式OS入门笔记-以RTX为案例:三.初探进程

嵌入式OS入门笔记-以RTX为案例&#xff1a;三.初探进程1.理论 进程&#xff0c;英文称呼很多Process, Task 等等&#xff0c;一般通用操作系统称Process的比较多&#xff0c;各种称呼涵义稍微有不一样。一般而言&#xff0c;进程是对一个运行单元的抽象&#xff0c;主要包括…

图文方式管理Linux服务器(Webmin)

客户让做webmin&#xff0c;才知道linux下也有界面的管理了 对于大部分使用计算机的人来说&#xff0c;linux的印象就是一大堆的命令字符以及黑黑的显示屏。虽然现在Linux的桌面版有了长足的进步&#xff0c;界面已和Windows不相上下了&#xff0e;但对于Linux服务器来说&am…

最大、最小堆的实现

最大最小堆 堆是一种经过排序的完全二叉树&#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;我之前好几次在公众号上转发了他…

Oracle的列转行问题

Oracle的列转行问题Oracle中使用语句将行数据转换称不同的列表示&#xff0c;或者将不同的列数据写到同一列的不同行上的行列转换问题是一个非常传统的话题。网络上流传了很多将行数据转换称列数据的方法和应用实例&#xff0c;一般通过decode或者case函数与聚合函数联合实现功…