【开源作品】OOPY 音乐播放器,STM32 inside, 支持CD格式WAV、无损FLAC软解码播放,裸
顺便纪念我可爱可怜的双耳,陪伴我度过太多刺耳的路程,忆往昔,没用过STM32,没有示波器,不知DAC为何物,一路走来,就靠着一个胜利万用表,一个ULINK,跌跌撞撞,先是做好了STM32F103RB的WAV播放器,到现在把STM32F103ZE的FLAC播放器做好,突然觉醒,已黄昏,恍如隔世,发现其他的其实失去蛮多的。不过最后还是收获美妙的音乐,值得欣慰。也即将告别 DIY 播放器之路,有更重要的事情要做,也要让我陪伴一路“受苦”的双耳好好休息保护起来。在这个坛子上吸取很多,一路受助无数,有名无名的,特此开源为报。虽不是什么牛品,与众兄弟分享,独乐乐不如众乐乐。
CPU:STM32F103ZE @ 72 MHZ ,3.3v
IIS master:ATMEGA48 @ 16.9344 MHZ ,5v
存储器:SD卡
DAC:PCM1793
显示器:TFT OTM3225 通过FSMC总线驱动.
方向盘:上下左右键、暂停播放键.
软件:
文件系统:FATFS
FLAC解码器:源自于TRAXMOD
支持1级子目录。上一曲、下一曲、暂停。
可行目录选择和播放文件的选择.
支持4种重复播放方式:全部/目录/单曲/所有文件不重复乱序(随机初始化种子用ADC生成).
开源范围: STM32 源程序,相关连线图(相当于原理图但不是全部,因为我没有制版而是采用开发板直接拼起来的)
AVR的程序请详见314forever兄弟的相关帖子,谢谢.
也不包含PCM1793的模拟部分,这个也不是我做的。这个大家自己能做的更好。
说明下:
1.由于 STM32F103ZE只有64K RAM,所以只能播放用foobar转换设置 LV2 及以下的FLAC,说得更深入点就是只能放 的 FLAC文件。不过LV2的FLAC也能压到67%左右.跟默认设置的 LV5其实差不了两三兆。
2.为何不用STM32自带的I2S?这个主要是STM32的MCLK太糟糕,而且PLL来的时钟jitter太大,故弃之不用。
3.本播放器代码使用到的FLAC解码代码模块来自于K9spud LLC的TRAXMOD,
并且最顶层的播放代码做了适于本播放器的大幅修改,并加入了快进和快退的功能。
在此向原作者K9spud LLC致谢,并请遵循其版权声明!
4.本播放器代码使用到ChaN的FATFS R0.07E 文件系统代码模块,并做了小幅修改以适用于本播放器。
在此向原作者ChaN致谢,并请遵循其版权声明!
5.OOPY MUSIC PLAYER 是一个免费音乐播放器!
保留所有原创部分之权利,只允许非商业性、非赢利性使用!
你可以个人性质、非营利性、非商业性的使用、更改和传播本播放器代码。
但本播放器代码作者没有任何义务的维护和技术支持,也不承担任何直接或者间接的由于使用到本播放器代码而导致的后果和风险!
任何的后果和风险将由使用者自行承担,请谨慎使用!
6.进行目录和文件选择时会直接结束当前播放的文件。
我试过让播放与选择并行运行,因为界面选择也使用到SD卡上的字库等文件,发现界面变好慢,(本来就不快),就放弃了。
源程序:点击此处下载 ourdev_627232RYFDPV.rar(文件大小:363K) (原文件名:OOPY_MUSIC_PLAYER_PCM1793.rar)
系统支持文件,放于SD卡根目录下:点击此处下载 ourdev_627235RFEC43.rar(文件大小:480K) (原文件名:SYSTEM.rar)
注:OOPY是闽南语(台语)“黑鼻子”的意思,是我养过的一条可爱的狗的名字,很机灵,可惜后来不幸病死。怀念中。。。。。。 http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627221EN3NIH.jpg
(原文件名:1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627222QKYS95.jpg
(原文件名:2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627223HWG4XF.jpg
(原文件名:3.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627224YTI71A.jpg
(原文件名:4.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627225R0B8NS.jpg
(原文件名:5.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627315C7ZTVJ.jpg
(原文件名:DSC_0000032.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627316RRF0D0.jpg
(原文件名:DSC_0000033.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627318WENA6Y.jpg
(原文件名:DSC_0000035.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627226F5DQ9Z.jpg
(原文件名:6.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627317CPZYB0.jpg
(原文件名:DSC_0000034.jpg)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627227N6G1C6.jpg
(原文件名:7.jpg) 连线图 整理中,不知道来不来得及放到这里。 lz不厚道。沙发,凳子全没了。ding 楼主终于射了!
建议休息数月不要戴耳机听任何东西! mark 好东西! 终于等到了。。。呵呵呵。。。 我建议楼主费费心,写点教程,话说是好东西,话说这代码对我真没啥用,我建立楼主写写思路...比如说"本播放器代码使用到的FLAC解码代码模块来自于K9spud LLC的TRAXMOD"这个是怎么移植的...大体讲讲到哪里下载源码,怎么修改.好吧,我承认我是懒蛋... 哎8楼!!!能共享代码已经很好了 mark 支持顶上! mark 回复【4楼】fsclub 绿林好汉
-----------------------------------------------------------------------
是快聋了 mark 回复【8楼】yirenonege
我建议楼主费费心,写点教程,话说是好东西,话说这代码对我真没啥用,我建立楼主写写思路...比如说"本播放器代码使用到的flac解码代码模块来自于k9spud llc的traxmod"这个是怎么移植的...大体讲讲到哪里下载源码,怎么修改.好吧,我承认我是懒蛋...
-----------------------------------------------------------------------
此代码已经无需修改,已经是一个操作方便的纯WAV、FLAC播放器。
(仅支持一级子目录,在本播放器里称为ALUBM,音乐文件被称为TRACK.)
FLAC解码过程说白了很简单:
先进行flac文件初始化.并找到文件存放FLAC帧流开始的地方。
然后来看最顶层最重要的一个函数是
flac_decode_frame(fc, decoded_buf, flac_read_buf,bytesleft);
准备一个文件读入缓冲,作为存放要解码的帧的存放地点。这个类型是char字符串的。存放从文件读入的帧流信息。
注意这个大小必须大于max_flame_size.并且存放的必须以flac,frame信息头开头.此为flac_read_buf
再准备一个存放解码后要输出的输出缓冲,注意类型是32位 int型的。此为decoded_buf,大小必须为 2*max_block_size.
再准备一个FLACCONTEXT ,存放解码后音频信息,此为fc,fc的结构我不多说了,自己去看定义.
把这几个准备好,然后把他们的指针传递给 解码器,正常结束后,在fc会给出解码后的block大小(以sample计算),在decoded_buf得到解码后的数据,flac_read_buf则消耗了一定的字节数,所以要把消耗掉的字节数去掉并从文件补足需要的帧流信息.把decoded_buf得到的数据输出给音频DAC的输出缓冲。如此循环。
如果你没看明白我在说什么,那请当我什么都没说。
鱼已献上,渔略做修饰。合不合口味各位请自行品尝。最近我可能也不会很多时间花在这个上面。
搞到了好的相机,下面放一些“高清”图,呵呵:
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627524YX52GQ.JPG
(原文件名:1.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627525GTAYZY.JPG
(原文件名:2.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627526MD7H3P.JPG
(原文件名:3.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627527IXUPWY.JPG
(原文件名:4.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627528UP2MN6.JPG
(原文件名:5.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627529SE18FV.JPG
(原文件名:6.JPG)
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627530CBVJBA.JPG
(原文件名:7.JPG)
再来一段视频秀:
点击此处下载 ourdev_627531K9PNJY.rar(文件大小:66.01M) (原文件名:oopy_music_player_show.rar) mark 我也有点心动了,我考虑要不用AD1896 ASRC 再用PCM1798输出,不知道效果如何,呵呵,O(∩_∩)O谢谢楼主分享 CPU:STM32F103ZE @ 72 MHZ ,3.3v
IIS master:ATMEGA48 @ 16.9344 MHZ ,5v
用了双CPU?怎么通讯? 回复【18楼】sufeila
cpu:stm32f103ze @ 72 mhz ,3.3v
iis master:atmega48 @ 16.9344 mhz ,5v
用了双cpu?怎么通讯?
-----------------------------------------------------------------------
atmega48只是做IIS的master,并非主要CPU。
通讯方式是SPI,atmega48做主机产生IIS的LRCK,BCK以及STM32的SPI的CS信号。STM32的SPI1做从机输出SDAT给DAC PCM1793.
具体方式请参考314forever兄弟的一篇相关帖子. 好东东额...着备用 记号~~ 之前也想做类似的东西,用I2S,现在就得重新考虑了,我是想用这款OLED做显示屏,再加两电子管做功放,那效果绝对惊艳,想哄女友的……
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627286WFEOTJ.jpg
(原文件名:T1tRVCXmRIXXbwkjvX_115642.jpg_310x310.jpg) 不知道有音乐频谱显示没? mark 厉害啊,本人一直不敢裸奔 mark 强劲! 回复【23楼】amazing030
--------------------------------------------------------------------------------------------------------------
曾有这个想法,也不难,就是搞个FFT,后来觉得纯粹的音质追求,太多花哨的东西没必要,再加上也不是很多时间就没搞了。
不觉得这个界面已经很“草根化”?搞个频谱不是很协调。
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_627532FWD1C4.JPG
(原文件名:8.JPG)
上面那个视频用的是低速的 16G卡,所以选择的界面很慢。下面这个是使用 4G的,速度快多了。
点击此处下载 ourdev_627549XYFRCK.rar(文件大小:15.31M) (原文件名:oopy_player_show_4G.rar) 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 LZ,共享下原理图? 站对了队这儿高手如云啊! 高手 mark 太棒了。 好东西!用力顶一顶 顶,强大! mark 围观中同情ING 好东西,感谢LZ的分享 感谢LZ 顶起 上面已经更新上传视频。
顺便占楼,用来放图 对LZ崇敬中,非常棒的作品! ……这个好玩。。。买个无损播放器太贵了~~O(∩_∩)O哈哈哈~ 不错,这个就厉害了! TFT液晶屏和TF卡的外壳孔是用手电钻和矬子搞出来的,不算很平整。见笑了。 支持一下sharpufo, 播放器做的很赞. 顺便支持一下音质至上的理念... 以下蓝色文字由坛主:armok 于:2011-04-02,18:53:25 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:STM32/STM8 技术讨论区
即将移去的分区:音响、高清视频
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font> COOL ! 多谢莫大穿裤!
没有外壳衣服之前的样子请见之前的另一篇帖子。 楼主辛苦了,保重身体
开源必须支持 厉害 好东西! 做个记录,回头仔细研究 好东西! 支持CUE就完美了 mark 这种高精尖的帖子不支持的话,我来这坛子干嘛~~~~ 更新: 0.0.2
修正若干文字错误,修正若干小bug.
加入单声道支持.
点击此处下载 ourdev_628877GACSYA.rar(文件大小:363K) (原文件名:OOPY_MUSIC_PLAYER_PCM1793_002.rar) 灰常漂亮!!! 顶 IIS 部分原理连线图(只有IIS部分的连线图,不包括各芯片的供电部分和PCM1793的模拟部分)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_629083MR9XOI.JPG
(原文件名:STM32_ATMEGA48_PCM1793.JPG)
TFT 连线图:
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_629084X6QOO5.JPG
(原文件名:TFT_CON.JPG) http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_629312X9I6Z1.JPG
(原文件名:SD_CARD.JPG) 按键:(配置成输入口,内部上拉)
|
---
PC0------------------------GND (left)
|
---
PC1------------------------GND (play/pause)
|
---
PC2------------------------GND (right)
|
---
PC3------------------------GND (up)
|
---
PC4------------------------GND(down) 好东西!COOL ! 真是好东西啊,期待完成电路图学习学习 更新:0.0.3
Unicode 转 GBK 的对照表使用STM32F103ZE的内部FLASH空间(约87K bytes) .极大的加快了选择文件界面的速度。这个问题主要来自于我调试时候如果文件太大烧写会比较慢,所以以前是放在SD卡中。现在基本完成,而ZE又有足够的空间,所以就内置了。大大的加快了选择操作界面的速度.使用慢速的16G卡现在刷满一屏文件名使用时间也不到0.5秒了。
点击此处下载 ourdev_629509BWNLMV.rar(文件大小:441K) (原文件名:OOPY_MUSIC_PLAYER_PCM1793_003.rar)
另:相关电路图已经更新完毕,各部分的其余部分比如供电、时钟和PCM1793的模拟部分将不会提供。这些大家可以自己完成。ATMEGA48的程序请见314forever 的帖子,谢谢。 m mark 好帖子,下来参考一下FATFS长文件名。 有碘意思~~~ 这个肯定造价不菲啊 好东东 回复【70楼】mylinger 河南馒头
好帖子,下来参考一下fatfs长文件名。
-----------------------------------------------------------------------
ff.c 中的 dir_read 函数做了一些改动。
通过dir_read函数获得长文件名的Unicode。文件寻址是采用的短文件名。
===========================================================================
回复【71楼】xyxq123
有碘意思~~~
-----------------------------------------------------------------------
大核民族,核电站太多了,这次出事了吧
===========================================================================
回复【72楼】loveyouae86 周鹏
这个肯定造价不菲啊
-----------------------------------------------------------------------
这个造价不会很多,在1K内,用的都不是什么补品,花的时间是挺多的。对敝人这种木耳来说是可以了,声音不输或者超过我目前接触过的CD和MP3,有SONY CDP-950, IAUDIO i7,IPOD 3代 60G,松下便携CD CT700等等,像那种MP4,MP5就不做比较了。乡下人,没接触过什么神机。自娱自乐而已.
当然如果你要用神品来做未尝不可,看个人的经济情况。声音好坏主要看你的模拟部分做得如何。这个主要是完成数字部分flac解码及与IIS到DAC的输出. 好东西,有时间学习下 想请教LZ,若要转成SPDIF信号输出(用其他现成的DA),有何良策? 回复【76楼】dy008
想请教lz,若要转成spdif信号输出(用其他现成的da),有何良策?
-----------------------------------------------------------------------
淘宝上找 “CM205 输出板” ,39元还包邮 那个就是,不浪费时间。 谢谢楼主,mark sharpufo兄 有没有想过将decoded也做成PCM buffer以获得更少内存使用以支持level8,我尝试了不少办法,但还是要将level8下的16*1024 filebuffer放到外部RAM才能支持level8. decoded是解码器解码过程中使用到的,如果跟输出缓冲合用会产生不少问题。
我的板子外部RAM坏掉了,所以没法测试外部RAM.
如果使用外部RAM能支持level8就使用外部RAM嘛。
或者用STM32F207,128K RAM,应该够用了. 回复【80楼】sharpufo 风生水起月皎白
decoded是解码器解码过程中使用到的,如果跟输出缓冲合用会产生不少问题。
我的板子外部ram坏掉了,所以没法测试外部ram.
如果使用外部ram能支持level8就使用外部ram嘛。
或者用stm32f207,128k ram,应该够用了.
-----------------------------------------------------------------------
已经试过了,解level8相比level0 cpu占用资源多了不少,而且将经常访问的decoded或是PCM buffer放到外部RAM将导致不流畅,因为众所周知外部RAM也只是处于“能用”的级别,太慢了。当然用STM32F207的另当别论。所以让64K的内部RAM支持level8的确是个头痛的问题。这里只是想与sharpufo讨论是否更好的解决方法,如有冒犯,请见谅 ^_^ 学习 回复【81楼】zzm24
-----------------------------------------------------------------------
你好,欢迎交流,没有什么冒犯不冒犯的,敝人比较随性,最近烦心事多了点,上面可能语气冲了点。
敝人的外部RAM坏了,而这个播放器还需要开启一片RAM做目录和文件的保存和排序,另外LEVEL级别越高,需要的系统堆栈也要大一些,所以现在连默认的LEVEL5都支持不了,更不用说LEVEL 8了. 有偿购买录音模块
QQ:370809806 回复【77楼】90999张耀扬
回复【76楼】dy008
想请教lz,若要转成spdif信号输出(用其他现成的da),有何良策?
-----------------------------------------------------------------------
淘宝上找 “cm205 输出板” ,39元还包邮 那个就是,不浪费时间。
-----------------------------------------------------------------------
谢谢啊!那个看了资料不清楚啊! 做个标记,等有空再研究一下。 mark 强大! 请问STM32F103ZE用什么平台开发 回复【89楼】lee345
-----------------------------------------------------------------------
MDK
我使用的是3.85 使用默认优化级别 谢谢楼主 回复【88楼】jingwaner
-----------------------------------------------------------------------
老乡,幸会幸会,兄台福建哪里的? 崇拜啊,不是崇拜能够言表了 强 老大怎么我在编译时有这么多警告,你帮我看看。
Build target 'Target 1'
compiling main.c...
main.c(75): warning:#9-D: nested comment is not allowed
main.c(80): warning:#9-D: nested comment is not allowed
main.c(263): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(264): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(265): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(271): warning:#223-D: function "playableWAV" declared implicitly
main.c(275): warning:#223-D: function "playableFLAC" declared implicitly
main.c(373): warning:#177-D: variable "k" was declared but never referenced
main.c(373): warning:#177-D: variable "key" was declared but never referenced
main.c(590): warning:#177-D: variable "key" was declared but never referenced
main.c(593): warning:#177-D: variable "k" was declared but never referenced
main.c(825): warning:#188-D: enumerated type mixed with another type
main.c(827): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *"
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(877): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(878): warning:#870-D: invalid multibyte character sequence
main.c(1091): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *"
main.c(1094): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "const XCHAR *"
main.c(1085): warning:#177-D: variable "readed" was declared but never referenced
main.c(1085): warning:#177-D: variable "time" was declared but never referenced
main.c(1085): warning:#177-D: variable "speed" was declared but never referenced
main.c(1189): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1190): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1194): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1196): warning:#223-D: function "playableWAV" declared implicitly
main.c(1196): warning:#223-D: function "playableFLAC" declared implicitly
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1247): warning:#870-D: invalid multibyte character sequence
main.c(1567): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1568): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1572): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *restrict"
main.c(1574): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *"
main.c(1577): warning:#167-D: argument of type "unsigned char *" is incompatible with parameter of type "char *"
main.c(1468): warning:#550-D: variable "Status" was set but never used
main.c(1469): warning:#177-D: variable "i" was declared but never referenced
main.c(1469): warning:#177-D: variable "k" was declared but never referenced
compiling sdcard.c...
compiling stm32f10x_it.c...
assembling stm32f10x_vector.s...
assembling cortexm3_macro.s...
compiling bmpicon.c...
compiling copyright.c...
copyright.c(75): warning:#9-D: nested comment is not allowed
copyright.c(80): warning:#9-D: nested comment is not allowed
compiling stm32f10x_lib.c...
compiling stm32f10x_gpio.c...
compiling stm32f10x_rcc.c...
compiling stm32f10x_flash.c...
compiling stm32f10x_sdio.c...
compiling stm32f10x_dma.c...
compiling stm32f10x_nvic.c...
compiling stm32f10x_fsmc.c...
compiling stm32f10x_spi.c...
compiling stm32f10x_adc.c...
compiling cc936.c...
FATFS\cc936.c(5473): warning:#177-D: variable "p" was declared but never referenced
compiling diskio.c...
FATFS\diskio.c(148): warning:#177-D: variable "i" was declared but never referenced
FATFS\diskio.c(147): warning: C3017W: Status may be used before being set
FATFS\diskio.c(239): warning: C3017W: Status may be used before being set
compiling ff.c...
compiling fsmc_lcd.c...
compiling tft_otm3225.c...
TFT\tft_otm3225.c(618): warning:#223-D: function "delay_ms" declared implicitly
TFT\tft_otm3225.c(626): warning:#223-D: function "delay_ms" declared implicitly
TFT\tft_otm3225.c(634): warning:#223-D: function "delay_ms" declared implicitly
TFT\tft_otm3225.c(642): warning:#223-D: function "delay_ms" declared implicitly
compiling LCD_Printf.c...
compiling bitstream.c...
flac\bitstream.c(52): warning:#550-D: variable "re_cache" was set but never used
flac\bitstream.c(135): warning:#550-D: variable "re_cache" was set but never used
compiling crc8.c...
compiling flacdecoder.c...
flac\flacdecoder.c(185): warning:#188-D: enumerated type mixed with another type
compiling flacplay.c...
flac\flacplay.c(57): warning:#550-D: variable "seekpoint_lo" was set but never used
flac\flacplay.c(57): warning:#550-D: variable "seekpoint_hi" was set but never used
flac\flacplay.c(58): warning:#550-D: variable "offset_lo" was set but never used
flac\flacplay.c(58): warning:#550-D: variable "offset_hi" was set but never used
flac\flacplay.c(391): warning:#177-D: variable "result" was declared but never referenced
flac\flacplay.c(440): warning:#177-D: variable "fres" was declared but never referenced
flac\flacplay.c(441): warning:#177-D: variable "br" was declared but never referenced
flac\flacplay.c(726): warning:#223-D: function "Random_List_Seek_To_Current_File" declared implicitly
flac\flacplay.c(544): warning:#177-D: variable "fres" was declared but never referenced
flac\flacplay.c(545): warning:#177-D: variable "xxx" was declared but never referenced
flac\flacplay.c(545): warning:#177-D: variable "totaltime" was declared but never referenced
flac\flacplay.c(547): warning:#177-D: variable "i" was declared but never referenced
flac\flacplay.c(548): warning:#177-D: variable "m" was declared but never referenced
flac\flacplay.c(548): warning:#177-D: variable "n" was declared but never referenced
flac\flacplay.c(550): warning: C3017W: pause_disp may be used before being set
compiling golomb.c...
compiling subframe_decoders.c...
compiling wavplay.c...
WAV\wavplay.c(95): warning:#177-D: variable "br" was declared but never referenced
WAV\wavplay.c(363): warning:#223-D: function "Random_List_Seek_To_Current_File" declared implicitly
WAV\wavplay.c(246): warning:#177-D: variable "br" was declared but never referenced
WAV\wavplay.c(247): warning: C3017W: pause_disp may be used before being set
linking...
Program Size: Code=34836 RO-data=94788 RW-data=228 ZI-data=55692
FromELF: creating hex file...
".\OUTPUT\MicroSD.axf" - 0 Error(s), 115 Warning(s). 睁眼说瞎话, 楼上你编译不是过了么? 我移植了下, 测完速度么问题, 读不到文件列表继续努力。 过是过了啊就是有115 Warning(s)
楼上的不要笑我,我是刚刚接触这个什么都不懂,还望指教。