完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求助原子哥,下面的程序我直接赋值在主函数中直接执行play_song(7);就可以正常播放歌曲,
而如果把play_song(7);嵌入void play_mp3(void)函数中, 在主函数中执行play_mp3();不能正常播放歌曲,串口会一直返回数据,不知道是哪里不对。。 u8 play_song(u32 song_num) { FATFS fs; FIL file; FRESULT res; DIR dirs; FILINFO finfo; u32 i, j, n; u8 SongPlayedNum = 0; char *song_name; u32 re, files_num = 0; while(1) { files_num = 0; re = 0; res = f_mount(0, &fs);//挂载文件系统到0区 if (res != FR_OK) { printf("rn挂载文件系统失败,错误代码: %u", res); return res; } res = f_opendir(&dirs, "/"); //打开根目录 if (res == FR_OK) { for(j = 0; j < song_num; j++) { //i = strlen(path); printf("rn-----------播放列表-----------"); while ((f_readdir(&dirs, &finfo) == FR_OK) && finfo.fname[0]) { if (finfo.fattrib & AM_DIR)//如果是文件夹 { continue; } else { if(((finfo.fname[9] == 'W') && (finfo.fname[10] == 'M') && (finfo.fname[11] == 'A')) || ((finfo.fname[9] == 'M') && (finfo.fname[10] == 'P') && (finfo.fname[11] == '3')) || ((finfo.fname[9] == 'W') && (finfo.fname[10] == 'A') && (finfo.fname[11] == 'V'))) { files_num++; //显示文件名,显示文件实际大小,文件实际大小采用四舍五入法 printf("rn/%12s%7ld KB ", &finfo.fname[0], (finfo.fsize + 512) / 1024); if(files_num > SongPlayedNum) { song_name = finfo.fname; break; } } else { //显示文件名,显示文件实际大小 ,文件实际大小采用四舍五入法 printf("rn/%12s%7ld KB ", &finfo.fname[0], (finfo.fsize + 512) / 1024); } } } } if( files_num == 0 )//无文件 { printf("rn无文件,请返回先创建文件!"); return res; } } else { printf("rn打开根目录失败!"); printf("rn错误代码: %u", res); } res = f_open(&file, (const char *)song_name, FA_READ); printf("rn正在打开音乐:%srn", song_name); if(files_num == SongPlayedNum)//播放最后一曲后返回99 return 99; if (res == FR_OK) { while (1) { for(i = 0; i < 512; i++) { song_test_buffer = 0x00; } res = f_read(&file, song_test_buffer, 512, (UINT*)&re); SPIx_SetSpeed(SPI_SPEED_8);//高速,对VS1003B,最大值不能超过36.864/6Mhz,这里设置为9Mhz i = 0; VS1003_XCS = 1; do //主播放循环 { if(VS1003_DREQ != 0) //非暂停 送数据给VS1003 { VS1003_XDCS = 0; //开VS1003片选 for(n = 0; n < 32; n++)//VS1003的FIFO只有32个字节的缓冲 { SPIx_ReadWriteByte(song_test_buffer[i++]); } VS1003_XDCS = 1; //关VS1003片选 } }while(i < 511);//循环发送512个字节 SPIx_ReadWriteByte(0xff);//高速写命令延时 SPIx_ReadWriteByte(0xff);//高速写命令延时 SPIx_ReadWriteByte(0xff);//高速写命令延时 SPIx_ReadWriteByte(0xff);//高速写命令延时 SPIx_ReadWriteByte(0xff);//高速写命令延时 SPIx_ReadWriteByte(0xff);//高速写命令延时 if (res || re == 0) //出错或者到了文件尾 { printf("rn文件读取结束,关闭文件!"); f_close(&file); //关闭打开的文件 SongPlayedNum++; break; } } } f_mount(0,NULL); } } ------------------------------- void play_mp3(void) { play_song(7); } ----------------------- int main(void) { STM32_init(); //stm32初始化 hardware_init();//外围器件初始化 // play_song(7); play_mp3(); while(1); } |
|
相关推荐
1个回答
|
|
把你play_song里面几个有大数组的东东放到外面去了。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1055 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
722浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
563浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 04:54 , Processed in 0.825575 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号