我的407&411单片机WAV播放器-VL(III) palyer

时经两个月的摸索,终于在stm32f407基础上成功实现了简易的播放器,同时也在stm32f411上完成了移植。这个过程中充满了挑战、充斥着喜悦。

原本打算只是在407vet上完成这个应用 ,但从某原子的407zg上移植过来比较顺利,有之前stm32f103ze播放器的调试经验所以基本没遇到什么问题,很轻松实现了SD/microSD上的音频文件到I2S接口的DAC播放,407vet封装为LQFP100,也没有使用LCD屏幕,省去了UI这块的调试。又遇到今年的疫情特别情况,在5月份搞了一版PCB去打样,也正好用上我手上的两片407vet。

下面是PCB焊接好的“开发板”

407开发板

随着调试进程跟进,升级后的407开发板如下

407开发板飞线升级USB

特点就是尽量使用已经验证过的电路和模块,比如CS4334做DAC,SD卡、拨轮开关和电源部分都是之前103ze上验证过的,为新407ze的学习提供了保证。

411ce这边的情况稍微复杂一点,因为我手上的IC封装是WLCSP49,它是项目上剩余下来的,同时跟它一起的还有当时项目的PCB,它的封装比较特殊,所以当时项目上PCB板采用了特殊的盲孔工艺,虽然都是4层板但打板成本比一般的都高,这次就索性利用起来了。411ce因为封装限制,不能使用SDIO接口从SD/microSD卡读取数据,于是采用了它的USB数据接口,某宝上买了两个microUSB转USB的接口,方便直连U盘。这里还重新回到407vet上学习USB这块的应用 ,最终也完成让411ce工作在HOST(USB_OTG_FS)下,实现了USB磁盘读取功能。但411ce的sram资源不及407vet,整个播放器的运行几乎吃尽了它的内存。

这是411ce编译后的代码大小,如下图。

我的407&411单片机WAV播放器-VL(III) palyer_第1张图片 411编译结果

这是几款单片机的资源对比,可见411的性能确实不适合此应用。粗略计算一下,SRAM的使用量是684+121740Bytes,即119.55KB,相比只有128KB的容量确实已经差不多耗尽。

我的407&411单片机WAV播放器-VL(III) palyer_第2张图片 各型号资源对比

虽然实现了当初的想法-尽量在这块小板上实现了播放功能,但也相信代码上还存在优化空间。为了优化编译效率和代码体积,这个过程中也有考虑从ARMCC切换到GNUC,当然也遇到了不少问题,决定这个阶段还是暂时停留在ARMCC,而且我用的MDK版本还是比较老一些的,可能还有一些地方存在隐患。抱着学习的态度,相信后面会慢慢过渡到最终的理想状态。

411这边的工程由于用了1.8的ST库,与407zg的工程1.4的库还是有些改动的。所以自己重新学习了库的修改,包括HSI到HSE的时钟切换等。

这是411的“开发板”,都是临时飞线的方式进行全部代码验证。

411搭建开发板
411ce子板细节

 

我的407&411单片机WAV播放器-VL(III) palyer_第3张图片 411工作后

 

纵观整个过程,还是有很多值得学习的知识点,比如FATFS、USB_OTG_FS等。甚至之前一度怀疑FullSpeed的12Mbps速度是否够读取文件到411ce进行解码播放,但结果表示它还是做到了。当然作为一个播放器没有 UI显示确实说不过去,但按照当前的sram开销,除了外扩RAM没有其它的办法可以解决这个问题,407ve还是可以考虑。一套还算说得过去的UI界面不低于一个产品的外观形态设计,当然最近也在了解一些Rockbox的UI框架,在后续的应用上希望有帮助。

如上一个比较简练的wav播放框架基本就搭建完了,它没有高精的时钟源,对真正的高保真&高还原度还有差距,也只支持了8K-192KHz的采样率,16-24bit的数据位宽,距离说得过去的384KHz及以上的32bit的decode支持还有很多空间要弥补,但它已经具备了一个基础平台,提供了在这个平台上可以一步步的实现HIFI的途径。

这是从某网上随便找到的一张HIFI播放器的参数表,可见其中还是充满了门道。

我的407&411单片机WAV播放器-VL(III) palyer_第4张图片 网上的播放器参数

 

411ce只是突发奇想的尝试,后续播放器还是会继续回到407,至于UI框架会开销更多内存,外扩等方面的问题有待慢慢研究吧。

你可能感兴趣的:(stm32,嵌入式开发)