Pony279 发表于 2012-3-5 23:07:13

原创FAT32+移植来的部分驱动代码+拓展驱动代码=51单片机+SD+VS1003录音和MP3功能!!!求

在写这个帖子之前,先给个我之前的帖子的链接:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5095479&bbs_page_no=1&search_mode=4&search_text=Pony279&bbs_id=9999
其实做完那个简单的MP3播放功能之后我就想开发做录音功能了,可惜,我又想学这又想学那的。。。一直没把时间花在这上面,

估计坛子里还没有人用51来搞VS1003录音的吧(貌似搜到有用STM32搞的),我想主要原因是文件系统上的问题了,因为在51上搞文件系统确实比较麻烦,
大侠们都没多少时间花在这上面,也不实际吧。在寒假的时候抽出时间来折腾,把我以前写的文件系统给完善了,实现了文件写的功能,不过也一直没用上,
终于今天搞这个录音用上了,哈哈~

现在的测试代码也比较简单的,先上视频(视频效果不好。。。不会做功放。。。不好意思。。。)
点击此处下载 ourdev_724361OOZZG8.zip(文件大小:5.49M) (原文件名:20120305009.zip)
视频中描述的功能其实是这样的。。。
我先说了一句:Hey ~ man.   
然后声音就录下来并写到SD卡上了。
然后就控制VS1003不停的播放刚才录下来的内容(耳机在我摄像的手机旁边,没录到。。。效果不好。。。不要被我富有磁性的声音迷倒了哈./emotion/em122.gif)

测试代码的功能是这样的:
一上电,初始化完成后就进入录音模式,开始录音
然后当我串口发送任意字符时,录音停止,开始不停的回放。(串口发送信息刚才也没录。。。)

然后是代码以及全部资料:
工程代码ourdev_724362BH9BLN.zip(文件大小:117K) (原文件名:STC12-MP3.zip)
VS1003的datasheet以及一个中文资料ourdev_724363LSTFXS.zip(文件大小:1.87M) (原文件名:IC.zip)
VS1003和SD模块的电路图,其实是买的模块,电路图我自己也没仔细看 ourdev_724364VRR07A.zip(文件大小:296K) (原文件名:sch.zip)


至于电路连接,在程序的SD模块和VS1003模块相应的.c文件里写的很清楚了,我帖上来:
VS1003模块:
sbit VS_SO=P1^6;         //串行数据输出,单片机从VS1003中读取数据
sbit VS_SI=   P1^5;        //串行数据输入,由单片机写入到VS1003
sbit VS_SCK=P1^7;                //串行时钟,由单片机产生
sbit VS_XCS   = P1^0;                  //片选信号
sbit VS_XRESET = P1^1;        //复位信号
sbit VS_XDCS= P1^2;                //数据片选
sbit VS_DREQ= P1^3;               //数据请求

SD模块:
//管脚定义
sbit SD_CS=P1^4;
//{ 硬件SPI管脚
sbit clk= P1^7;
sbit miso = P1^6;
sbit mosi = P1^5;
//} 硬件SPI管脚                //如果改了这些,SPI_ReadWriteByte也得改了。。。

再来张图好了,硬件上只有最小系统和一个STC自动下载辅助工具是我自己做的,有兴趣的也可以搜我以前的帖子,帮我提高下我的淫气我是不会介意的~
http://cache.amobbs.com/bbs_upload782111/files_53/ourdev_724366XMECHO.jpg
(原文件名:20120305572.jpg)


为了节省时间,所以测试代码写得比较简陋,欢迎拍砖或鉴赏或围观~
呵呵,想换条裤子,不知这个帖子分量够不?

Pony279 发表于 2012-3-5 23:10:04

忘了说了,
MCU是STC12C5A60S2,
晶振24M

Pony279 发表于 2012-3-5 23:13:18

编译警告可忽略:
本来我是想用来做不透明指针的,C51编译器貌似不好这口,给了我个警告。。。
..\VS1003\VS1003.C(327): warning C230: 'File': uses undefined struct/union tag 'FileInfo'

编译成功需要配置:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5090488&bbs_page_no=1&search_mode=3&search_text=Pony279&bbs_id=9999
(见4楼)

wsm80828 发表于 2012-3-6 05:05:50

airfex 发表于 2012-3-6 07:16:37

tianheiGE 发表于 2012-3-6 07:40:50

感谢分享

l09046162 发表于 2012-3-6 08:29:14

谢谢分享!!!!

bbsview 发表于 2012-3-6 08:55:10

不错,标记一下

Pony279 发表于 2012-3-6 09:38:50

我本来是想做同步显示歌词(这个在有字库支持的12864上做难度好像不大。。。)+fft的

不过根据我以前的测试,FFT估计不行了,就算晶振提到30M,好像也还是有难度,

同步显示歌词应该可以,如果显示器本来就有字库支持的话,就已经没有什么技术难度了

这个代码以后怎么拓展,现在也还不太想写,我对界面什么的并不太感兴趣,虽然良好的界面是非常重要的。。。

lisingch 发表于 2012-3-6 10:25:48

谢谢楼主分享。

Pony279 发表于 2012-3-25 12:55:20

沉了,,,自己顶起来{:lol:}

389281541 发表于 2012-3-25 14:29:40

谢谢楼主分享。

cclylj 发表于 2012-3-25 15:57:59

楼主 如果可以了能把资料打包一下发一个给我吗最近我也正在做这个344380278@qq.com

cclylj 发表于 2012-3-25 16:11:20

求楼主的联系方式 我遇到不懂的地方希望可以得到你的帮助哈哈 谢谢啦楼主如果可以了话 加我Q可以吗




Pony279 发表于 2012-3-25 16:33:11

cclylj 发表于 2012-3-25 16:11 static/image/common/back.gif
求楼主的联系方式 我遇到不懂的地方希望可以得到你的帮助哈哈 谢谢啦楼主如果可以了话 加我Q可以吗




有问题直接在这里问就行了,
我有空都会在论坛里逛的,
没空的话,QQ也帮不了你啊,

至于资料,,,上面的不够吗?你还需要哪些?

jetli 发表于 2012-3-25 17:44:50

3q{:biggrin:}{:lol:}{:shy:}{:titter:}{:loveliness:}

中国 发表于 2012-3-26 18:36:37

谢谢楼主分享啊,最近我也要搞

tianyu1989 发表于 2012-3-27 17:14:03

最近正在搞这些 学习了

tianyu1989 发表于 2012-3-28 22:49:02

楼主你好~ 我遇到点问题想请教一下,我的在调试的时候 串口输出这些信息,:
串口通信测试....
VS1003已初始化....
CH375芯片初始化成功
请插入U盘
U盘初始化失败
当前存储设备:U盘
文件系统已初始化....
VS1003 Sin 测试

我的U盘里面了一首歌,我把压缩到了56kbps ,可是就是不播放;我把我主函数贴给你看我看看,
#include "reg51.h"
#include "ch375.h"
#include "fat.h"
#include "uart.h"
#include "vs1003.h"

struct FAT32_Init_Arg Init_Arg_UDISK;       //初始化参数结构体实体
struct FAT32_Init_Arg *pArg;
struct FileInfoStruct FileInfo;   //文件信息结构体实体

unsigned char Dev_No=0; //设备号,这是FAT的外部变量,用来标记存储设备的类型

void main()
{
unsigned char item=0;

UART_Init();
UART_Send_Str("串口通信测试....\n");

VS_Reset();
UART_Send_Str("VS1003已初始化....\n");

if(!CH375_Init())
UART_Send_Str("CH375芯片初始化成功\n");
else
UART_Send_Str("CH375芯片初始化失败\n");

UART_Send_Str("请插入U盘\n");
if(!CH375_InitDisk())
UART_Send_Str("U盘初始化成功\n");
else
UART_Send_Str("U盘初始化失败\n");

pArg=&Init_Arg_UDISK;
Dev_No=UDISK;
UART_Send_Str("当前存储设备:U盘\n");

FAT32_Init();
UART_Send_Str("文件系统已初始化....\n");

VS_sin_test(200);
UART_Send_Str("VS1003 Sin 测试\n");

while(!FAT32_Open_File(&FileInfo,"\\*.mp3",item++)) //依次播放U盘根目录下的所有MP3文件,有利于znFAT的文件枚举功能
{
UART_Send_Str("打开文件成功\n");
UART_Send_Str("文件名为:");UART_Send_Str(FileInfo.FileName);
UART_Send_Enter();
UART_Put_Inf("文件大小(字节):",FileInfo.FileSize);
UART_Put_Inf("文件当前偏移量(字节):",FileInfo.FileCurOffset);

UART_Send_Str("开始读取文件到VS1003进行解码播放\n");
VS_XDCS=0; //打开数据片选,此时可以送入音频数据
FAT32_Read_FileX(&FileInfo,0,FileInfo.FileSize,VS_Send_Dat);
VS_XDCS=1;

VS_Flush_Buffer();
UART_Send_Str("音频播放结束\n");
}

UART_Send_Str("所有音频文件播放完毕\n");

while(1);
}

Pony279 发表于 2012-3-28 23:02:39

tianyu1989 发表于 2012-3-28 22:49 static/image/common/back.gif
楼主你好~ 我遇到点问题想请教一下,我的在调试的时候 串口输出这些信息,:
串口通信测试....
VS1003已初 ...

"U盘初始化失败"

你应该先解决这个问题,

tianyu1989 发表于 2012-3-28 23:19:24

Pony279 发表于 2012-3-28 23:02 static/image/common/back.gif
"U盘初始化失败"

你应该先解决这个问题,

哦,不好意思,贴错了,有U盘初始化成功的
串口通信测试....
VS1003已初始化....
CH375芯片初始化成功
请插入U盘
U盘初始化成功
当前存储设备:U盘
文件系统已初始化....
VS1003 Sin 测试
打开文件成功
文件名为:01.MP3
文件大小(字节):449538
文件当前偏移量(字节):0
开始读取文件到VS1003进行解码播放

不过是非常的卡 根本听不起来我的晶振是22.1184

tianyu1989 发表于 2012-3-28 23:24:41

请问 楼主是MP3文件问题 还是其他什么问题

Pony279 发表于 2012-3-28 23:33:22

tianyu1989 发表于 2012-3-28 23:24 static/image/common/back.gif
请问 楼主是MP3文件问题 还是其他什么问题

主要应该是驱动程序的问题,
我用的是SD卡,STC12C5A单片机自带硬件SPI,320Kbps都可以
至于CH375的驱动速度,我没玩过,不清楚

cyjkai 发表于 2012-3-28 23:34:04

mark.......

jjj2012 发表于 2012-3-29 15:32:14

一直想做一个这样子的mp3,但是囊中羞涩,等有机会在做那个模块,先收藏

enovo2468 发表于 2012-4-2 17:02:46

mark.............

Pony279 发表于 2012-4-2 17:09:50

enovo2468 发表于 2012-4-2 17:02 static/image/common/back.gif
mark.............

---------------------------------------------------------------------------------------------------------------------------

哈哈,谢谢你帮我顶帖,不过,喜欢的话收藏即可,不必mark了,看论坛的相关规定~

---------------------------------------------------------------------------------------------------------------------------

关于这个文件系统,过段时间我打算移植到STM32上,用C++继续发展了,

在51上折腾这个太辛苦了,不过也造就了这个文件系统的内存占用小,功能还行,速度也不慢的优点,呵呵,我又开始自夸了。。。

enovo2468 发表于 2012-4-2 17:27:34

哦,知道了

PCA 发表于 2012-4-7 14:56:48

不错不错,学习下

我不乐意啊 发表于 2012-4-7 16:24:29

赞!赞!赞!赞!赞!赞!赞!赞!赞!

jjj2012 发表于 2012-4-7 18:39:47

不错,只能有空在试试

meirenai 发表于 2012-4-7 19:44:34

楼主请问:①晶振必须用24M的嘛?stc12c5a60s2已经是1T的单片机了,还有用24M晶振的必要吗?
          ②还有用24M晶振这个能流畅播放的最大的码率是多大呢?想想了解一下再决定是不是用这款单片机!谢谢!
          ③如你所述,用51单片机做这个mp3有什么难度吗?毕竟用stm32也得写SD卡的底层驱动啊!难道还有什么其他难度吗?说一下哈!多谢!
问题有点多,请楼主帮忙解答,万分感谢,敬礼{:3_60:}

Pony279 发表于 2012-4-7 19:51:01

meirenai 发表于 2012-4-7 19:44 static/image/common/back.gif
楼主请问:①晶振必须用24M的嘛?stc12c5a60s2已经是1T的单片机了,还有用24M晶振的必要吗?
          ② ...


"①晶振必须用24M的嘛?stc12c5a60s2已经是1T的单片机了,还有用24M晶振的必要吗?"
呵呵,你可以试试12M的,我用惯了24M的,没试过12M的,只是说明一下。

“ ②还有用24M晶振这个能流畅播放的最大的码率是多大呢?想想了解一下再决定是不是用这款单片机!谢谢!”
320kbps没问题。12M估计也可以达到这种程度(有网有用24M,软件SPI驱动VS1003播放320kbps码率的,硬件SPI比软件SPI快,所以我才这么说)。
但是就我这份代码,我为了程序的模块化,而牺牲了点驱动1003的效率,所以可能在12M下无法流畅播放320kbps的,我没试过。

“③如你所述,用51单片机做这个mp3有什么难度吗?毕竟用stm32也得写SD卡的底层驱动啊!难道还有什么其他难度吗?说一下哈!多谢!”
驱动,文件系统都自己写的话,确实有难度。
耗的是时间,不是什么高智商的问题。

meirenai 发表于 2012-4-7 20:10:06

Pony279 发表于 2012-4-7 19:51 static/image/common/back.gif
"①晶振必须用24M的嘛?stc12c5a60s2已经是1T的单片机了,还有用24M晶振的必要吗?"
呵呵,你可以试试12 ...

直接移植现成的文件系统可以实现吗?只编写底层驱动剩下的交给现成的文件系统

Pony279 发表于 2012-4-7 20:34:00

本帖最后由 Pony279 于 2012-4-7 20:39 编辑

meirenai 发表于 2012-4-7 20:10 static/image/common/back.gif
直接移植现成的文件系统可以实现吗?只编写底层驱动剩下的交给现成的文件系统 ...

可以的,但是你编写的驱动的接口函数要和文件系统要求的驱动函数相吻合,
就拿我的文件系统来说,需要写扇区和读扇区函数。

这个是我的文件系统头文件里的一段代码,

#ifdef FAT_FS_C    //这个宏定义用来,防止命名冲突,只供文件系统内部使用
#include "MMC_SD.h"
//失败了都要返回非0值
#define        ReadSector(sector_address, buffer) SD_ReadSingleBlock(sector_address, buffer)
#define WriteSector(sector_address, buffer) SD_WriteSingleBlock(sector_address, buffer)
#endif

meirenai 发表于 2012-4-8 08:08:26

Pony279 发表于 2012-4-7 20:34 static/image/common/back.gif
可以的,但是你编写的驱动的接口函数要和文件系统要求的驱动函数相吻合,
就拿我的文件系统来说,需要写 ...

恩 多谢 目前抓紧画板,加快进度!!!心里有谱就快多了

liuhengpeng123 发表于 2012-4-8 09:08:37

楼主新作啊,呵呵,顶一个,系统文在51也能实现,强。看来系统移植也不是问题了。

Pony279 发表于 2012-4-8 09:46:14

liuhengpeng123 发表于 2012-4-8 09:08 static/image/common/back.gif
楼主新作啊,呵呵,顶一个,系统文在51也能实现,强。看来系统移植也不是问题了。 ...

以前和同学要代码的时候,他没告诉我有现成的代码可以抄
那时又不会上网搜索,就自己硬着头皮干了。。。

liuhengpeng123 发表于 2012-4-8 10:34:00

Pony279 发表于 2012-4-8 09:46 static/image/common/back.gif
以前和同学要代码的时候,他没告诉我有现成的代码可以抄
那时又不会上网搜索,就自己硬着头皮干了。。。
...

呵呵,我大二时候我也是有你之前一样的想法,先问学长现成的代码抄抄,自己下载就行了,后来发现这样根本就不是自己的东西,不是自己的思想。只是一直模仿着,后来我也纠结了很久,还好,去公司实习给了一个很好的学习环境和实践环境。以前没有学好51就想买2440的板子,后面多上网了才无意中看到了阿莫论坛,看看后才知道stm32才是自己想要的,现在才开始学习M3.呵呵,以后多多交流呀。

meirenai 发表于 2012-4-9 17:19:14

本帖最后由 meirenai 于 2012-4-9 17:22 编辑

Pony279 发表于 2012-4-8 09:46 static/image/common/back.gif
以前和同学要代码的时候,他没告诉我有现成的代码可以抄
那时又不会上网搜索,就自己硬着头皮干了。。。
...

楼主怎么解决的电平转换问题啊!stc12c5a60s2是5v的单片机啊!而vs1003是3.3v的,信号线可以直接接到5v上面吗?还是需要转换啊!用这个真麻烦,这款单片机没有3.3V的型号啊!

Pony279 发表于 2012-4-9 18:18:46

meirenai 发表于 2012-4-9 17:19 static/image/common/back.gif
楼主怎么解决的电平转换问题啊!stc12c5a60s2是5v的单片机啊!而vs1003是3.3v的,信号线可以直接接到5v上 ...

我的是单片机直接连模块的,没出问题,
STC12LE单片机好像是3.3V的,
你也可以把单片机的IO设置为开漏,3.3V上拉。

meirenai 发表于 2012-4-9 18:46:41

Pony279 发表于 2012-4-9 18:18 static/image/common/back.gif
我的是单片机直接连模块的,没出问题,
STC12LE单片机好像是3.3V的,
你也可以把单片机的IO设置为开漏,3 ...

奥多谢

我不乐意啊 发表于 2012-4-14 10:40:00

赞啊!赞啊!赞啊!赞啊!赞啊!赞啊!

519382868 发表于 2012-5-5 20:45:44

本帖最后由 519382868 于 2012-5-5 20:52 编辑

不错!不错!值得学习学习。楼主你好可以发这个资料我吗?因为论坛这几天都下不了东西,谢谢!519382868@qq.com

trucy 发表于 2012-6-1 23:12:22

楼主 如果可以了能把资料打包一下发一个给我吗最近我也正在學習SD
trucy2010@163.com.

简翟 发表于 2012-6-2 19:19:33

不错,学习了

wanwan-mcu 发表于 2012-6-5 10:39:19

星空0816 发表于 2012-6-23 14:59:23

顶一下!!!!

ding_ding0304 发表于 2012-6-24 13:31:48

谢谢楼主{:lol:}

hubaixdl123 发表于 2012-6-28 15:59:30

tianyu1989 发表于 2012-3-28 23:24 static/image/common/back.gif
请问 楼主是MP3文件问题 还是其他什么问题

我用的是LPC2131的IC,晶振是11.0592的,什么MP3都没有问题。数据从U盘读到单片机,再从单片机送到1003.那现在就有两个问题
1.CH375的时序没有优化好,在读数据的时候用了大量时间,使数据在流动时用了太多时间,播时卡。
2.1003的数据空的脚没有判断好,无法确定是不是要向VS1003写入数据。

不圆滑的石头 发表于 2012-8-11 01:12:17

不错。。。我也刚用msp430做了一个

likang0110 发表于 2012-8-17 10:02:56

楼主能否给个vs1003录音文件?谢谢你,likang0110@163.com

Altium12A 发表于 2012-11-30 17:43:22

{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}

Altium12A 发表于 2012-11-30 17:52:31

楼主,太给力了

liber798A 发表于 2012-12-3 11:33:32

Mark一下。

yeshere 发表于 2013-1-9 14:41:41

忆雨思 发表于 2013-3-29 18:59:22

l楼主,太给力了啊

bbssilverkey 发表于 2013-5-1 10:12:24

本帖最后由 bbssilverkey 于 2013-5-1 10:14 编辑

Pony279 发表于 2012-3-5 23:10 static/image/common/back.gif
忘了说了,
MCU是STC12C5A60S2,
晶振24M

前辈,我请教下,为何:fat_fs init failed!

完整信息是:
DATE :Apr 30 2013 TIME :16:59:34

SD init success!

fat_fs init failed!

我配置
MCU- STC12A5C60S2

SD- SCANDISK 2G 格式化成FAT

其他没东西

postek 发表于 2013-5-1 10:21:16

支持下!

clarkewayne 发表于 2013-5-7 17:56:09

多谢分享!

xou822 发表于 2013-6-24 22:36:46

加了MP3解码芯片的说   这样整个系统就简化许多了

xiefy21 发表于 2013-8-14 20:35:05

mark……
顶一个…

ding_ding0304 发表于 2013-8-16 16:59:56

您好,楼主!把SD卡格式成FAT16或FAT32,写程序怎么知道支持哪种呢?

huhulixin 发表于 2013-8-16 17:21:12

顶一个 学习

heimareed 发表于 2013-8-26 01:02:46

楼主好人啊!正在研究相关东西……

SCREA 发表于 2013-9-18 09:05:30

请问正弦测试有什么效果,大神。我也正写vs1003

WM_CH 发表于 2013-9-18 12:25:49

强帖。顶一下!

16777216 发表于 2013-10-19 21:21:22

1翻看了你的帖子,怎么说呢,你碰到问题都是自己一步步解决的,而我,有些问题一时解决不了..然后不了了之了,
2感觉你懂的很多啊,小小的51也玩出这么多的花样
3最后,感觉你的代码很规范 很不错,很有层次感,我也想学着弄,有一些建议么

heimareed 发表于 2013-10-28 00:34:31

楼主你好。直接把VS1003模块替换为VS1053,晶振11.0592MHz。其他不变。录音时候发现程序停止在
while (recording_on != 0)
        {
                do {
                                w = VS_ReadReg(SCI_HDAT1);
                } while (w < 256 || w >= 896); /* wait until 512 bytes available */
参考了正点原子STM32的代码,发现VS_ReadReg里面对SPI做了降速处理。
按照其方法进行修改,还是停止在上面的地方。请问调试时是否遇到过该问题。
还请楼主多指点……多谢!!!

sunplus 发表于 2014-1-13 10:17:13

顶 谢谢楼主分享

Vampireyifeng 发表于 2014-2-18 22:18:56

顶楼主{:biggrin:}

protel138 发表于 2014-3-28 22:50:39

谢谢分享。

wildcat7261 发表于 2014-4-2 21:38:32

thanks for shring            

heyangfengyue 发表于 2014-5-19 21:43:18

heimareed 发表于 2013-10-28 00:34
楼主你好。直接把VS1003模块替换为VS1053,晶振11.0592MHz。其他不变。录音时候发现程序停止在
while (reco ...

哥们啊,解决了吗?我也遇到同样问题。求指教!

heimareed 发表于 2014-5-23 16:30:11

heyangfengyue 发表于 2014-5-19 21:43
哥们啊,解决了吗?我也遇到同样问题。求指教!

后来换平台了,因为要嵌入别的功能,就没用51片子调试了。也记不清最后弄好没有。反正现在STM32F103RB上面跑,功能正常。

clarkewayne 发表于 2014-5-28 16:59:25

多謝分享,讚一個

yasir 发表于 2014-6-17 21:38:44

我之前做的好像只能FATFS 这个不错 可以FAT32

DZKJXHxcz 发表于 2014-9-1 20:48:35

Pony279 发表于 2012-3-5 23:10
忘了说了,
MCU是STC12C5A60S2,
晶振24M

请问你MP3的c文件中        while (w < 256 || w >= 896);这个判断是怎么得出来的,大神,求解。谢谢。

wenliangxc 发表于 2014-9-3 21:22:30

mark!{:lol:}

ybx520 发表于 2014-9-27 17:35:41

Mark               
页: [1]
查看完整版本: 原创FAT32+移植来的部分驱动代码+拓展驱动代码=51单片机+SD+VS1003录音和MP3功能!!!求