我现在可以用CH376读取MP3的数据并进行播放,等待音乐播放完毕的后,需要再次播放下一首音乐,我在前一首播放完毕后,实行了 while(CH376FileClose( FALSE )!=USB_INT_SUCCESS);关闭当前文件的命令,可是等待再次打开文件的时候返回0X42的代码。说明找不到文件,请问这个需要什么步骤吗?还需要执行磁盘初始化的程序吗?
不需要重新初始化,只需要给短文件名打开就可以了,返回0X42说明你给的短文件名不正确。
现在的问题是我重复打开同一个文件都不行,流程是这样的,比如说我打开了CH376.MP3的文件进行MP3播放,播放完毕后,关闭当前文件,并再次打开CH376,MP3进行重复播放,这样打开是失败的。我下午有测试了下,在上电后,我随便打开U盘中有的文件,并接着关闭,到这一步都是成功的,当再次打开同一个文件的时候就是失败的,打开文件失败。我感觉是CH376那个地方没有设置正确的问题?请问谁有这方面的例程吗?比如一个可以随便播放MP3的应用。查看下别人在播放完一段音乐后是怎么处理的。
这个应该是你软件问题,是否可以把程序贴出来看下,或者你跟踪下你输入的文件名是什么?
我打开的文件名是同一个文件名。比如CH376.MP3。 上电后首次可以打开,再次打开此文件名就打不开,文件名输入我也跟踪了,是正确的。下面是我的打开文件的子函数。 void MP3_Start(void) { u8 u8Result; u16 i,j; u8 *p; u32 u32FileLen,k=0; //while (CH376DiskConnect() != USB_INT_SUCCESS); //检查U盘是否连接 //while (CH376DiskMount()!= USB_INT_SUCCESS) // 初始化磁盘并测试磁盘是否就绪 u8Result = CH376FileOpen(MP3_Data[0]); if (u8Result == USB_INT_SUCCESS) { #ifdef STM32_DBUG printf("程序初始化成功!\r\n"); #endif u32FileLen = CH376GetFileSize(); //获取文件的长度 while(u32FileLen>512) //确定是不是最后一个扇区的数据 { CH376SecRead(MP3_Data[0], 1, 0); p=MP3_Data[0]; Mp3SelectData(); //使能VS1003 i = 0; while (i < 512) { while(GetDreq()!=1);//等待VS1003数据允许发送 for (j=0; j<32; j++) { spi_send(*p++); } i += 32; } Mp3DeselectData(); //禁用VS1003 u32FileLen-=512; LoadPatch_read();//读取频谱值。 /* printf("\r\n muice:\r\n"); for(j=0;j<14;j++) { printf("%ld ,",MP3_PP[j]); } */ } while(CH376FileClose( FALSE )!=USB_INT_SUCCESS);//关闭当前的文件系统 #ifdef STM32_DBUG printf("当前文件关闭完成!\r\n"); #endif } else { #ifdef STM32_DBUG printf("文件切换失败!\r\n"); #endif } }
流程没没有问题,做个测试吧 for(i=0;i!=10;i++) { u8Result = CH376FileOpen("\\CH376.MP3"); if (u8Result == USB_INT_SUCCESS) { printf("文件打开成功!\r\n"); } else { printf("文件打开 ERROR %02x \n",(unsigned short)u8Result ); while(1); }
u8Result = CH376FileClose( FALSE ) if(u8Result == USB_INT_SUCCESS) printf("当前文件关闭完成!\r\n"); else printf("文件关闭 ERROR %02x \n",(unsigned short)u8Result );
}
我的文件直接在U盘下面,你的上面那句u8Result = CH376FileOpen("\\CH376.MP3"); 中的\\ 在我的程序里面不能通过,找不到文件。
这是测试后的串口代码反馈情况,还有个问题是,有时上点启动的过程中,在初始化磁盘处容易死住。不过出现的概率不是很高。
文件打开成功! 当前文件关闭完成! 文件打开 ERROR 42 文件打开成功! 当前文件关闭完成! 文件打开 ERROR 42 文件打开成功! 当前文件关闭完成! 文件打开 ERROR 42 文件打开成功! 当前文件关闭完成! 文件打开 ERROR 42
u8Result = CH376FileOpen("\\CH376.MP3"); 怎么编译不通过呢? 自己修改一下 u8Result = CH376FileOpen((unsigned char *)"\\CH376.MP3"); 初始化不通过,供电要稳定,以及硬件连接也没有问题。
恩?竟然可以了。我只是按照u8Result = CH376FileOpen("\\CH376.MP3");这个方式做的就可以了。前面加了“\\”, 我以前加一个“\”的时候,提示找不到文件,后来我直接把“\”去了。可以找到文件,但是第二次打不开文件,加上你刚才的“\\”就可以多次打开文件了。请问这个“\\”与“\”与“不加\”有什么区别呀!
”\\“ 应该是一个转义字符 比如"\n","\t","\b" etc.
恩 谢谢楼上的!
楼主的flieopen 程序是怎么样的我用 官网的例程打不开文件,也没有正常的返回值