我現(xiàn)在可以用CH376讀取MP3的數(shù)據(jù)并進行播放,等待音樂播放完畢的后,需要再次播放下一首音樂,我在前一首播放完畢后,實行了 while(CH376FileClose( FALSE )!=USB_INT_SUCCESS);關(guān)閉當前文件的命令,可是等待再次打開文件的時候返回0X42的代碼。說明找不到文件,請問這個需要什么步驟嗎?還需要執(zhí)行磁盤初始化的程序嗎?
不需要重新初始化,只需要給短文件名打開就可以了,返回0X42說明你給的短文件名不正確。
現(xiàn)在的問題是我重復打開同一個文件都不行,流程是這樣的,比如說我打開了CH376.MP3的文件進行MP3播放,播放完畢后,關(guān)閉當前文件,并再次打開CH376,MP3進行重復播放,這樣打開是失敗的。我下午有測試了下,在上電后,我隨便打開U盤中有的文件,并接著關(guān)閉,到這一步都是成功的,當再次打開同一個文件的時候就是失敗的,打開文件失敗。我感覺是CH376那個地方?jīng)]有設(shè)置正確的問題?請問誰有這方面的例程嗎?比如一個可以隨便播放MP3的應(yīng)用。查看下別人在播放完一段音樂后是怎么處理的。
這個應(yīng)該是你軟件問題,是否可以把程序貼出來看下,或者你跟蹤下你輸入的文件名是什么?
我打開的文件名是同一個文件名。比如CH376.MP3。 上電后首次可以打開,再次打開此文件名就打不開,文件名輸入我也跟蹤了,是正確的。下面是我的打開文件的子函數(shù)。 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) //確定是不是最后一個扇區(qū)的數(shù)據(jù) { CH376SecRead(MP3_Data[0], 1, 0); p=MP3_Data[0]; Mp3SelectData(); //使能VS1003 i = 0; while (i < 512) { while(GetDreq()!=1);//等待VS1003數(shù)據(jù)允許發(fā)送 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);//關(guān)閉當前的文件系統(tǒng) #ifdef STM32_DBUG printf("當前文件關(guān)閉完成!\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("當前文件關(guān)閉完成!\r\n"); else printf("文件關(guān)閉 ERROR %02x \n",(unsigned short)u8Result );
}
我的文件直接在U盤下面,你的上面那句u8Result = CH376FileOpen("\\CH376.MP3"); 中的\\ 在我的程序里面不能通過,找不到文件。
這是測試后的串口代碼反饋情況,還有個問題是,有時上點啟動的過程中,在初始化磁盤處容易死住。不過出現(xiàn)的概率不是很高。
文件打開成功! 當前文件關(guān)閉完成! 文件打開 ERROR 42 文件打開成功! 當前文件關(guān)閉完成! 文件打開 ERROR 42 文件打開成功! 當前文件關(guān)閉完成! 文件打開 ERROR 42 文件打開成功! 當前文件關(guān)閉完成! 文件打開 ERROR 42
u8Result = CH376FileOpen("\\CH376.MP3"); 怎么編譯不通過呢? 自己修改一下 u8Result = CH376FileOpen((unsigned char *)"\\CH376.MP3"); 初始化不通過,供電要穩(wěn)定,以及硬件連接也沒有問題。
恩?竟然可以了。我只是按照u8Result = CH376FileOpen("\\CH376.MP3");這個方式做的就可以了。前面加了“\\”, 我以前加一個“\”的時候,提示找不到文件,后來我直接把“\”去了。可以找到文件,但是第二次打不開文件,加上你剛才的“\\”就可以多次打開文件了。請問這個“\\”與“\”與“不加\”有什么區(qū)別呀!
”\\“ 應(yīng)該是一個轉(zhuǎn)義字符 比如"\n","\t","\b" etc.
恩 謝謝樓上的!
樓主的flieopen 程序是怎么樣的我用 官網(wǎng)的例程打不開文件,也沒有正常的返回值