请问STM32F407作为I2S从机为什么会出现数据错位?

2019-07-14 15:17发布

STM32F407作为I2S从机,位时钟和同步时钟有外部codec提供,使用DMA传输数据。
播放wav文件时的,操作顺序如下:
1.打开文件,解析文件头信息;
2.配置MCU端I2S;
3.设置并启动DMA,循环模式;
4.设置外部codec芯片,产生位时钟和同步时钟;
注:2,4步需要根据文件进行设置。
5.在DMA传输过半中断和传输完成中断中,读取wav文件的音频数据,填充DMA缓冲区;
6.播放结束后,关闭DMA和I2S;
7.关闭codec芯片。

播放下一曲文件时,重复以上7个步骤。

遇到的问题是:播放第一个wav文件,完全正常;播放第二个或后面的文件时,出现沙沙声或者声音变大了,
用示波器观察到数据错位了。经多次观察,错位的位数不固定。

请问有高手遇到过类似的问题吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
吕少大大
2019-07-14 23:39
CB电阻 发表于 2018-12-12 07:39
我也遇到了这样的问题。楼主最后把所有的问题都解决了吗?

没有完全解决,问题描述都写出来了。

另外说明,我用STM32作为I2S的从机,但是作为从机时,STM32并没有MCLK输入。
切换波特率的时候,我并没有对内部MCLK进行调整,这可能是一个很重要原因。

所以,我建议尽量用STM32作为I2S作为主机,并把MCLK向外输出。
如果可能,可以用12.288M晶振作为MCU主时钟,并配置把这个时钟向外输出,连接到外部CODE。这样,所有I2S电路的MCLK使用的都是12.288M。

一周热门 更多>