初级会员
- 积分
- 74
- 金钱
- 74
- 注册时间
- 2015-9-19
- 在线时间
- 1 小时
|
5金钱
您好,原子哥,我这几天想做一个项目,中间用到了蓝牙模块和音乐播放模块,我希望用蓝牙模块控制音乐的开始/停止,上一曲和下一曲,于是开始做项目移植,但是移植过程中遇到了一个问题。
主程序如下:
int main(void)
{
u8 t;
u8 key;
u8 sendmask=0;
u8 sendcnt=0;
u8 sendbuf[20];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
usmart_dev.init(84); //初始化USMART
LCD_Init(); //LCD初始化
KEY_Init(); //按键初始化
W25QXX_Init(); //初始化W25Q128
WM8978_Init(); //初始化WM8978
WM8978_HPvol_Set(40,40); //耳机音量设置
WM8978_SPKvol_Set(63); //喇叭音量设置
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMCCM); //初始化CCM内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
POINT_COLOR=RED;
while(font_init()) //检查字库
{
LCD_ShowString(30,50,200,16,16,"Font Error!");
delay_ms(200);
LCD_Fill(30,50,240,66,WHITE);//清除显示
delay_ms(200);
}
POINT_COLOR=RED;
Show_Str(60,50,200,16,"Explorer STM32F4开发板",16,0);
Show_Str(60,70,200,16,"音乐播放器实验",16,0);
Show_Str(60,90,200,16,"正点原子@ALIENTEK",16,0);
Show_Str(60,110,200,16,"2014年5月24日",16,0);
Show_Str(60,130,200,16,"KEY0:NEXT KEY2REV",16,0);
Show_Str(60,150,200,16,"KEY_UPAUSE/PLAY",16,0);
while(HC05_Init()) //初始化ATK-HC05模块
{
LCD_ShowString(30,90,200,16,16,"ATK-HC05 Error!");
delay_ms(500);
LCD_ShowString(30,90,200,16,16,"Please Check!!!");
delay_ms(100);
}
delay_ms(100);
USART3_RX_STA=0;
while(1)
{
audio_play();
}
}
因为音乐开始播放之后就一直进入audio_play()中不能出来,所以我希望把检测蓝牙接收的部分放在audio_play()中,然后我就这样,下图为audio_play()中的一段:
while(res==FR_OK)//打开成功
{
dir_sdi(&wavdir,wavindextbl[curindex]); //改变当前目录索引
res=f_readdir(&wavdir,&wavfileinfo); //读取目录下的一个文件
if(res!=FR_OK||wavfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
fn=(u8*)(*wavfileinfo.lfname?wavfileinfo.lfname:wavfileinfo.fname);
strcpy((char*)pname,"0:/MUSIC/"); //复制路径(目录)
strcat((char*)pname,(const char*)fn); //将文件名接在后面
LCD_Fill(60,190,lcddev.width,190+16,WHITE); //清除之前的显示
Show_Str(60,190,lcddev.width-60,16,fn,16,0); //显示歌曲名字
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
LCD_Fill(30,200,240,320,WHITE); //清除显示
reclen=USART3_RX_STA&0X7FFF; //得到数据长度
USART3_RX_BUF[reclen]=0; //加入结束符
if(reclen==9||reclen==8) //控制DS1检测
{
if(strcmp((const char*)USART3_RX_BUF,"+LED1 ON")==0)LED1=0; //打开LED1
if(strcmp((const char*)USART3_RX_BUF,"+LED1 OFF")==0)LED1=1;//关闭LED1
}
LCD_ShowString(30,200,209,119,16,USART3_RX_BUF);//显示接收到的数据
USART3_RX_STA=0;
}
audio_index_show(curindex+1,totwavnum);
key=audio_play_song(pname); //播放这个音频文件
if(key==KEY2_PRES) //上一曲
{
if(curindex)curindex--;
else curindex=totwavnum-1;
}else if(key==KEY0_PRES)//下一曲
{
curindex++;
if(curindex>=totwavnum)curindex=0;//到末尾的时候,自动从头开始
}else break; //产生了错误
}
myfree(SRAMIN,wavfileinfo.lfname); //释放内存
myfree(SRAMIN,pname); //释放内存
myfree(SRAMIN,wavindextbl); //释放内存
红色部分为我添加内容,不知道为什么蓝牙连接成功,音乐也可以播放,但是蓝牙接收+LED1 ON字符后竟然没有反应,不知道是哪里出了问题,求大神帮忙解决一下
注:附件为程序
|
|