OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2096|回复: 6

为什么我的MP3 ram测试 返回值是一堆乱码?以及MP3播放显示000kbps,显示播放时间 92:15

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
发表于 2018-7-28 22:20:33 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 aucheng 于 2018-7-28 22:27 编辑

RT,希望各位大佬指教一下,下面是图和我的代码,还有我的MP3模块是正点原子的VS1053MP3模块,但是我的开发板不是探索者的板,是我自己画的F4板,MP3模块代码仿照F1战舰板的代码,这部分代码中的引脚初始化也改成了我的F4板的代码,其余代码仿照探索者的板的代码。
#include "mp3player.h"
#include "vs10xx.h"     
#include "delay.h"
#include "led.h"
#include "key.h"
#include "lcd.h"         
#include "malloc.h"
#include "text.h"
#include "string.h"
#include "exfuns.h"  
#include "ff.h"   
#include "flac.h"   
#include "usart.h"   

void mp3_index_show(u16 index,u16 total)
{

    LCD_ShowxNum(30+0,230,index,3,16,0X80);      
    LCD_ShowChar(30+24,230,'/',16,0);
    LCD_ShowxNum(30+32,230,total,3,16,0X80);                        
}

void mp3_vol_show(u8 vol)
{               
    LCD_ShowString(30+110,230,200,16,16,"VOL:");            
    LCD_ShowxNum(30+142,230,vol,2,16,0X80);
}
u16 f_kbps=0;

void mp3_msg_show(u32 lenth)
{   
    static u16 playtime=0;//²¥·Åʱ¼ä±ê¼Ç         
     u16 time=0;// ʱ¼ä±äÁ¿
    u16 temp=0;      
    if(f_kbps==0xffff)
    {
        playtime=0;
        f_kbps=VS_Get_HeadInfo();
    }         
    time=VS_Get_DecodeTime();
    if(playtime==0)playtime=time;
    else if((time!=playtime)&&(time!=0))
    {
        playtime=time;                     
        temp=VS_Get_HeadInfo();                        
        if(temp!=f_kbps)
        {
            f_kbps=temp;                    
        }            
  
        LCD_ShowxNum(30,210,time/60,2,16,0X80);      
        LCD_ShowChar(30+16,210,':',16,0);
        LCD_ShowxNum(30+24,210,time%60,2,16,0X80);   
         LCD_ShowChar(30+40,210,'/',16,0);              
        //ÏÔʾ×Üʱ¼ä
        if(f_kbps)time=(lenth/f_kbps)/125;  
        else time=0;
         LCD_ShowxNum(30+48,210,time/60,2,16,0X80);   
        LCD_ShowChar(30+64,210,':',16,0);
        LCD_ShowxNum(30+72,210,time%60,2,16,0X80);                 
        //ÏÔʾλÂÊ               
           LCD_ShowxNum(30+110,210,f_kbps,3,16,0X80);     //ÏÔʾλÂÊ     
        LCD_ShowString(30+134,210,200,16,16,"Kbps");            
        LED0=!LED0;        //DS0·­×ª
    }            
}                       
//µÃµ½path·¾¶ÏÂ,Ä¿±êÎļþµÄ×ܸöÊý
//path:·¾¶            
//·µ»ØÖµ:×ÜÓÐЧÎļþÊý
u16 mp3_get_tnum(u8 *path)
{      
    u8 res;
    u16 rval=0;
     DIR tdir;             //ÁÙʱĿ¼
    FILINFO tfileinfo;    //ÁÙʱÎļþÐÅÏ¢        
    u8 *fn;                                             
    res=f_opendir(&tdir,(const TCHAR*)path); //´ò¿ªÄ¿Â¼
      tfileinfo.lfsize=_MAX_LFN*2+1;                        //³¤ÎļþÃû×î´ó³¤¶È
    tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize);    //Ϊ³¤Îļþ»º´æÇø·ÖÅäÄÚ´æ
    if(res==FR_OK&&tfileinfo.lfname!=NULL)
    {
        while(1)//²éѯ×ܵÄÓÐЧÎļþÊý
        {
            res=f_readdir(&tdir,&tfileinfo);               //¶ÁȡĿ¼ÏµÄÒ»¸öÎļþ
            if(res!=FR_OK||tfileinfo.fname[0]==0)break;    //´íÎóÁË/µ½Ä©Î²ÁË,Í˳ö         
             fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);            
            res=f_typetell(fn);   
            if((res&0XF0)==0X40)//È¡¸ßËÄλ,¿´¿´ÊDz»ÊÇÒôÀÖÎļþ   
            {
                rval++;//ÓÐЧÎļþÊýÔö¼Ó1
            }        
        }  
    }
    myfree(SRAMIN,tfileinfo.lfname);
    return rval;
}
//²¥·ÅÒôÀÖ
void mp3_play(void)
{
    u8 res;
     DIR mp3dir;             //Ŀ¼
    FILINFO mp3fileinfo;//ÎļþÐÅÏ¢
    u8 *fn;               //³¤ÎļþÃû
    u8 *pname;            //´øÂ·¾¶µÄÎļþÃû
    u16 totmp3num;         //ÒôÀÖÎļþ×ÜÊý
    u16 curindex;        //ͼƬµ±Ç°Ë÷Òý
    u8 key;                //¼üÖµ         
     u16 temp;
    u16 *mp3indextbl;    //ÒôÀÖË÷Òý±í
     while(f_opendir(&mp3dir,"0:/MUSIC"))//´ò¿ªÍ¼Æ¬Îļþ¼Ð
     {        
        Show_Str(30,190,240,16,"MUSICÎļþ¼Ð´íÎó!",16,0);
        delay_ms(200);                  
        LCD_Fill(30,190,240,206,WHITE);//Çå³ýÏÔʾ         
        delay_ms(200);                  
    }                                       
    totmp3num=mp3_get_tnum("0:/MUSIC"); //µÃµ½×ÜÓÐЧÎļþÊý
      while(totmp3num==NULL)//ÒôÀÖÎļþ×ÜÊýΪ0        
     {        
        Show_Str(30,190,240,16,"ûÓÐÒôÀÖÎļþ!",16,0);
        delay_ms(200);                  
        LCD_Fill(30,190,240,146,WHITE);//Çå³ýÏÔʾ         
        delay_ms(200);                  
    }                                          
      mp3fileinfo.lfsize=_MAX_LFN*2+1;                        //³¤ÎļþÃû×î´ó³¤¶È
    mp3fileinfo.lfname=mymalloc(SRAMIN,mp3fileinfo.lfsize);    //Ϊ³¤Îļþ»º´æÇø·ÖÅäÄÚ´æ
     pname=mymalloc(SRAMIN,mp3fileinfo.lfsize);                //Ϊ´øÂ·¾¶µÄÎļþÃû·ÖÅäÄÚ´æ
     mp3indextbl=mymalloc(SRAMIN,2*totmp3num);                //ÉêÇë2*totmp3num¸ö×Ö½ÚµÄÄÚ´æ,ÓÃÓÚ´æ·ÅÒôÀÖÎļþË÷Òý
     while(mp3fileinfo.lfname==NULL||pname==NULL||mp3indextbl==NULL)//ÄÚ´æ·ÖÅä³ö´í
     {        
        Show_Str(30,190,240,16,"ÄÚ´æ·ÖÅäʧ°Ü!",16,0);
        delay_ms(200);                  
        LCD_Fill(30,190,240,146,WHITE);//Çå³ýÏÔʾ         
        delay_ms(200);                  
    }      
    VS_HD_Reset();
    VS_Soft_Reset();
    vsset.mvol=250;                        //ĬÈÏÉèÖÃÒôÁ¿Îª220.
    mp3_vol_show((vsset.mvol-100)/5);    //ÒôÁ¿ÏÞÖÆÔÚ:100~250,ÏÔʾµÄʱºò,°´ÕÕ¹«Ê½(vol-100)/5,ÏÔʾ,Ò²¾ÍÊÇ0~30   
    //¼Ç¼Ë÷Òý
    res=f_opendir(&mp3dir,"0:/MUSIC"); //´ò¿ªÄ¿Â¼
    if(res==FR_OK)
    {
        curindex=0;//µ±Ç°Ë÷ÒýΪ0
        while(1)//È«²¿²éѯһ±é
        {
                temp=mp3dir.index;                                //¼Ç¼µ±Ç°index
            res=f_readdir(&mp3dir,&mp3fileinfo);               //¶ÁȡĿ¼ÏµÄÒ»¸öÎļþ
            if(res!=FR_OK||mp3fileinfo.fname[0]==0)break;    //´íÎóÁË/µ½Ä©Î²ÁË,Í˳ö         
               fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname);            
                res=f_typetell(fn);   
            if((res&0XF0)==0X40)//È¡¸ßËÄλ,¿´¿´ÊDz»ÊÇÒôÀÖÎļþ   
            {
                mp3indextbl[curindex]=temp;//¼Ç¼Ë÷Òý
                curindex++;
            }        
        }
    }   
       curindex=0;                                            //´Ó0¿ªÊ¼ÏÔʾ
       res=f_opendir(&mp3dir,(const TCHAR*)"0:/MUSIC");     //´ò¿ªÄ¿Â¼
    while(res==FR_OK)//´ò¿ª³É¹¦
    {   
        dir_sdi(&mp3dir,mp3indextbl[curindex]);            //¸Ä±äµ±Ç°Ä¿Â¼Ë÷Òý      
    res=f_readdir(&mp3dir,&mp3fileinfo);               //¶ÁȡĿ¼ÏµÄÒ»¸öÎļþ
    if(res!=FR_OK||mp3fileinfo.fname[0]==0)break;    //´íÎóÁË/µ½Ä©Î²ÁË,Í˳ö
    fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname);            
        strcpy((char*)pname,"0:/MUSIC/");                //¸´ÖÆÂ·¾¶(Ŀ¼)
        strcat((char*)pname,(const char*)fn);              //½«ÎļþÃû½ÓÔÚºóÃæ
         LCD_Fill(30,190,240,190+16,WHITE);                //Çå³ý֮ǰµÄÏÔʾ
        Show_Str(30,190,240-30,16,fn,16,0);                //ÏÔʾ¸èÇúÃû×Ö
        mp3_index_show(curindex+1,totmp3num);
        key=mp3_play_song(pname);                  //²¥·ÅÕâ¸öMP3   
        if(key==2)        //ÉÏÒ»Çú
        {
            if(curindex)curindex--;
            else curindex=totmp3num-1;
         }else if(key<=1)//&#207;&#194;&#210;&#187;&#199;ú
        {
            curindex++;               
            if(curindex>=totmp3num)curindex=0;//&#181;&#189;&#196;&#169;&#206;&#178;&#181;&#196;&#202;±&#186;ò,×&#212;&#182;&#175;&#180;&#211;&#205;·&#191;&#170;&#202;&#188;
         }else break;    //&#178;ú&#201;ú&#193;&#203;&#180;í&#206;ó      
    }                                               
    myfree(SRAMIN,mp3fileinfo.lfname);    //&#202;&#205;·&#197;&#196;&#218;&#180;&#230;               
    myfree(SRAMIN,pname);                //&#202;&#205;·&#197;&#196;&#218;&#180;&#230;               
    myfree(SRAMIN,mp3indextbl);            //&#202;&#205;·&#197;&#196;&#218;&#180;&#230;     
}

//&#178;&#165;·&#197;&#210;&#187;&#199;ú&#214;&#184;&#182;¨&#181;&#196;&#184;è&#199;ú                                                                        
//·&#181;&#187;&#216;&#214;&#181;:0,&#213;&#253;&#179;&#163;&#178;&#165;·&#197;&#205;ê&#179;&#201;
//         1,&#207;&#194;&#210;&#187;&#199;ú
//       2,&#201;&#207;&#210;&#187;&#199;ú
//       0XFF,&#179;&#246;&#207;&#214;&#180;í&#206;ó&#193;&#203;
u8 mp3_play_song(u8 *pname)
{     
     FIL* fmp3;
    u16 br;
    u8 res,rval;      
    u8 *databuf;                  
    u16 i=0;
    u8 key;         
               
    rval=0;        
    fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//&#201;ê&#199;&#235;&#196;&#218;&#180;&#230;
    databuf=(u8*)mymalloc(SRAMIN,4096);        //&#191;&#170;±&#217;4096×&#214;&#189;&#218;&#181;&#196;&#196;&#218;&#180;&#230;&#199;&#248;&#211;ò
    if(databuf==NULL||fmp3==NULL)rval=0XFF ;//&#196;&#218;&#180;&#230;&#201;ê&#199;&#235;&#202;§°&#220;.
    if(rval==0)
    {      
          VS_Restart_Play();                      //&#214;&#216;&#198;&#244;&#178;&#165;·&#197;
        VS_Set_All();                            //&#201;è&#214;&#195;&#210;&#244;&#193;&#191;&#181;&#200;&#208;&#197;&#207;&#162;              
        VS_Reset_DecodeTime();                    //&#184;&#180;&#206;&#187;&#189;&#226;&#194;&#235;&#202;±&#188;&#228;      
        res=f_typetell(pname);                      //&#181;&#195;&#181;&#189;&#206;&#196;&#188;&#254;&#186;ó×&#186;                                                
        if(res==0x4c)//&#200;&#231;&#185;&#251;&#202;&#199;flac,&#188;&#211;&#212;&#216;patch
        {   
            VS_Load_Patch((u16*)vs1053b_patch,VS1053B_PATCHLEN);
        }                                                                 
        res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//&#180;ò&#191;&#170;&#206;&#196;&#188;&#254;     ''
         if(res==0)//&#180;ò&#191;&#170;&#179;&#201;&#185;&#166;.
        {
            VS_SPI_SpeedHigh();    //&#184;&#223;&#203;&#217;                           
            while(rval==0)
            {
                res=f_read(fmp3,databuf,4096,(UINT*)&br);//&#182;&#193;&#179;&#246;4096&#184;&#246;×&#214;&#189;&#218;  
                i=0;
                do//&#214;÷&#178;&#165;·&#197;&#209;&#173;&#187;·
                {      
                    if(VS_Send_MusicData(databuf+i)==0)//&#184;&#248;VS10XX·&#162;&#203;&#205;&#210;&#244;&#198;&#181;&#202;&#253;&#190;&#221;
                    {
                        i+=32;
                    }else   
                    {
                        key=9;  
                        switch(key)
                        {
                            case KEY0_PRES:
                                rval=1;        //&#207;&#194;&#210;&#187;&#199;ú
                                break;
                            case KEY2_PRES:
                                rval=2;        //&#201;&#207;&#210;&#187;&#199;ú
                                break;
                            case WKUP_PRES:    //&#210;&#244;&#193;&#191;&#212;&#246;&#188;&#211;
                                if(vsset.mvol<250)
                                {
                                    vsset.mvol+=5;
                                     VS_Set_Vol(vsset.mvol);   
                                }else vsset.mvol=250;
                                mp3_vol_show((vsset.mvol-100)/5);    //&#210;&#244;&#193;&#191;&#207;&#222;&#214;&#198;&#212;&#218;:100~250,&#207;&#212;&#202;&#190;&#181;&#196;&#202;±&#186;ò,°&#180;&#213;&#213;&#185;&#171;&#202;&#189;(vol-100)/5,&#207;&#212;&#202;&#190;,&#210;&#178;&#190;&#205;&#202;&#199;0~30   
                                break;
                            case KEY1_PRES:    //&#210;&#244;&#193;&#191;&#188;&#245;
                                if(vsset.mvol>100)
                                {
                                    vsset.mvol-=5;
                                     VS_Set_Vol(vsset.mvol);   
                                }else vsset.mvol=100;
                                mp3_vol_show((vsset.mvol-100)/5);    //&#210;&#244;&#193;&#191;&#207;&#222;&#214;&#198;&#212;&#218;:100~250,&#207;&#212;&#202;&#190;&#181;&#196;&#202;±&#186;ò,°&#180;&#213;&#213;&#185;&#171;&#202;&#189;(vol-100)/5,&#207;&#212;&#202;&#190;,&#210;&#178;&#190;&#205;&#202;&#199;0~30   
                                break;
                        }
                        mp3_msg_show(fmp3->fsize);//&#207;&#212;&#202;&#190;&#208;&#197;&#207;&#162;        
                    }               
                }while(i<4096);//&#209;&#173;&#187;··&#162;&#203;&#205;4096&#184;&#246;×&#214;&#189;&#218;
                if(br!=4096||res!=0)
                {
                    rval=0;
                    break;//&#182;&#193;&#205;ê&#193;&#203;.         
                }                              
            }
            f_close(fmp3);
        }else rval=0XFF;//&#179;&#246;&#207;&#214;&#180;í&#206;ó            
    }                                 
    myfree(SRAMIN,databuf);                             
    myfree(SRAMIN,fmp3);
    return rval;                             
}



LCD显示MP3信息

LCD显示MP3信息

串口接收到的MP3 RAM测试值

串口接收到的MP3 RAM测试值
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
 楼主| 发表于 2018-7-28 22:24:31 | 显示全部楼层
难受,注释部分出现了乱码
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
 楼主| 发表于 2018-7-28 22:28:57 | 显示全部楼层
希望原子大佬能帮帮我这个小白
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
 楼主| 发表于 2018-7-28 22:40:32 | 显示全部楼层
VS模块代码的引脚部分我改成F4的引脚,不知道会不会出问题?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
 楼主| 发表于 2018-7-28 22:53:31 | 显示全部楼层
我使用了F1战舰版的代码来驱动音乐模仿,想着实现MP3音乐模块的播放功能,但耳机没有声音输出,烦啊
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-14
在线时间
6 小时
 楼主| 发表于 2018-7-28 22:54:08 | 显示全部楼层
顶啊,顶啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-30 01:57:21 | 显示全部楼层
aucheng 发表于 2018-7-28 22:53
我使用了F1战舰版的代码来驱动音乐模仿,想着实现MP3音乐模块的播放功能,但耳机没有声音输出,烦啊

检查下接线,然后检查下你板子是否有其他外设也连接到了这些外设。
最后,再看看测试,ram测试和sin测试。sin测试必须能出声音才行。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表