OpenEdv-开源电子网

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

关于STM32+VS1053音乐播放器,无线串口中断实现切歌问题

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
发表于 2016-3-14 10:52:45 | 显示全部楼层 |阅读模式
1金钱
    最近小弟在做一个东西,我是想手机无线控制音乐播放器的。关于硬件部分主要是STM32最小系统板+无线模块+VS1053+功放电路+扬声器。现在的问题是我已经移植好了原子哥的音乐播放器的程序(没有UCOS系统)。现在已经能正常播放音乐了。可是,我想在播放音乐的同时,串口中断接收到无线数据时,能够实现自由切歌。但是,播放音乐的时候。串口中断就像瘫痪了一样,根本对无线数据没有反应,请问这是怎么回事啊?有没有知道的,求教!小弟不胜感激。***下面这个函数是我用来播放音乐的,同时也是用来切歌(不知道对不对)
u8 mp3_play_song(char list)
{         
        FIL* fmp3;
  u16 br;
        u8 res,rval;          
        u8 *databuf;                             
        u16 i=0;
        u8 key;
       
  VS_HD_Reset();
        printf("ó2¼t¸′λ½áêø\r\n");       
        VS_Soft_Reset();
        vsset.mvol=250;                                                //ĬèÏéèÖÃòôá¿Îa180.
       
        printf("¿aê¼2¥·ÅòôàÖ\r\n");                  
        rval=0;       
       
        fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//éêÇëÄú′æ
        databuf=(u8*)mymalloc(SRAMIN,4096);                //¿a±ù4096×Ö½úμÄÄú′æÇøóò
        if(databuf==NULL||fmp3==NULL)
        {
                printf("Äú′æéêÇëê§°ü\r\n");
                rval=0XFF ;//Äú′æéêÇëê§°ü.
        }
        if(rval==0)
        {                   
           VS_Restart_Play();                                                 
          VS_Set_All();                                                               
          VS_Reset_DecodeTime();                                       
          
    switch(list)
    {
     case 'a':res=f_open(fmp3,"Opera2.mp3",FA_READ);break;
     case 'b':res=f_open(fmp3,"Binggo.mp3",FA_READ);break;
      case 'c':res=f_open(fmp3,"Billie Jean.mp3",FA_READ);break;
      case 'd':res=f_open(fmp3,"Burning.mp3",FA_READ);break;
      case 'e':res=f_open(fmp3,"Call Me Maybe.mp3",FA_READ);break;
      case 'f':res=f_open(fmp3,"Can We Dance.mp3",FA_READ);break;
      case 'g':res=f_open(fmp3,"Marry You.mp3",FA_READ);break;
      default:break;                       
                }                       
                 
                if(res==0)
                {
                        VS_SPI_SpeedHigh();
                             
                        while(rval==0)
                        {
                                res=f_read(fmp3,databuf,4096,(UINT*)&br);
        if(res==0)
                                {
                                       
                                }                                       
                                i=0;
                                do
                            {
                                        
                                        if(VS_Send_MusicData(databuf+i)==0)
                                        {
                                                i+=32;
                       
                                        }else   
                                        {
                                               
            
                                        }                        
                                }while(i<4096);
                                if(br!=4096||res!=0)
                                {
                                        rval=0;
                                        break;
                                }                                                          
                        }
                        f_close(fmp3);
                }else rval=0XFF;             
        }                                                              
        myfree(SRAMIN,databuf);                                                 
        myfree(SRAMIN,fmp3);
        return rval;                                                 
}

最佳答案

查看完整内容[请看2#楼]

搞个全局变量,在串口里面设置.在音乐播放函数里面判断.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-3-14 10:52:46 | 显示全部楼层
搞个全局变量,在串口里面设置.在音乐播放函数里面判断.
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-15 17:05:59 | 显示全部楼层
有没有人啊
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-15 17:16:17 | 显示全部楼层
求帮忙
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-16 01:56:19 | 显示全部楼层
原子哥,我知道你的意思,但是我的串口在播放音乐的时候,收不到数据了,只有播放完了才可以收到
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-16 01:56:40 | 显示全部楼层
正点原子 发表于 2016-3-14 10:52
搞个全局变量,在串口里面设置.在音乐播放函数里面判断.

原子哥,我知道你的意思,但是我的串口在播放音乐的时候,收不到数据了,只有播放完了才可以收到
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-16 02:00:32 | 显示全部楼层
正点原子 发表于 2016-3-14 10:52
搞个全局变量,在串口里面设置.在音乐播放函数里面判断.

我第一次能收到无线数据,第二次要等歌放完了,才能收到,不然一直没反应
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-19
在线时间
4 小时
 楼主| 发表于 2016-3-16 03:43:42 | 显示全部楼层
正点原子 发表于 2016-3-14 10:52
搞个全局变量,在串口里面设置.在音乐播放函数里面判断.

原子哥,问题已经解决了,原来是我在中断里调用放歌的函数,导致中断一直等待这首歌结束,无法接收新的数据,现在就像你说的,在播放函数里面再进行判断就能切歌了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2021-3-9
在线时间
5 小时
发表于 2021-3-18 14:52:28 | 显示全部楼层
你好,打扰了,我可以参考一下你的这个完整代码嘛
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 13:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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