珠玉在前:F407的方案
链接中的方案基于F407,此处基于CubeMx写一个更方便移植到各个平台的版本,同时也记录一下一些bug
原理之前的方案都有介绍,我这里写一下cube的配置和其他HAL库API的使用
配置SDIO,但是亲测使用4线的可能会有奇奇怪怪的问题,不知道为什么
因此这里只考虑使用SD 1bit,其次也要考虑SDIO时钟不能超过25MHz,因此时钟分频这里选择2
可以开启DMA和中断,但是中断优先级必须最高,不然被打断可能会影响读写
配置文件系统FATFS,点了SD卡之后就可以比较方便地使用ST官方提供的库
这里只用到了单个通道,如果想做左右声道的可以使用两个输出,后面会有相应代码支持
DAC使用Circular模式,半字节数据宽度
定时器6做为DAC触发信号,ARR值需要根据实际MP3文件的采样率做调整,比如是44100的话ARR就是时钟频率除以44100
部分代码贴在这里,大伙可以先从这个链接F407的方案下载他的MP3_Player.c然后在这里做修改,这里程序主要改成HAL库的函数,方便做移植
【注意:我这里是单个声道输出,双声道输出需要写两个dac通道】
比如,把 DAC_DMA_Stop(); 改为 HAL_DAC_Stop_DMA(&hdac, DAC_CHANNEL_1);
//尝试解码成功
if(MP3DataDecoder(&read_ptr, &bytes_left))
{
//打印MP3信息
printf(" \r\n Bitrate %dKbps", Mp3FrameInfo.