求助:参考STM32F4xx Discovery I2S例程库版本1.0.0 I2S2_SD数据口读到数据一直为0。

2019-07-20 21:56发布


目标:得到64倍采样16KHz输出的音频数据
现象:参考STM32F4xx Discovery I2S例程库版本1.0.0 I2S2_SD数据口读到数据一直为0。
问题:
1. 为什么I2S2_CK 输出1.024MHz的时钟,数据口依然只能读到0?

描述:
                           
                                                                                     图1

根据图1可得:                            
I2S BitRate = 通道数 x 采样数据宽度 x 采样频率 = 1 × 16 × 64 = 1.024MHz
在这个手册第10页可以看到 1.024MHz的解释:

图2 出自: http://www.st.com/web/en/resource/technical/document/application_note/DM00040802.pdf


系统初始化的时候

HSE_Frequency = 16 MHz

PLL_M = 16
PLLI2S_N = 258
PLLI2S_R = 3
可以得到一个86MHz的内部I2S 时钟输入,

  I2S_InitStructure.I2S_AudioFreq = 32000; 
  I2S_InitStructure.I2S_Standard = I2S_Standard_LSB;
  I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
  I2S_InitStructure.I2S_CPOL = I2S_CPOL_High;
  I2S_InitStructure.I2S_Mode = I2S_Mode_MasterRx;
  I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;

用示波器检测 I2S 复用单片机的时钟引脚【SPI2_SCK】可以检测到1.024MHz的时钟输出,但是数据口读出来的全部是 0.

于是我尝试做以下挣扎。。。。。。


图3 根据图3计算公式: Fs = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD))] ------>当是16bit数据宽度的时候
                             Fs = 86 MHz / [(16*2)*((2*42)+0))] = 0.031994MHz = 32KHz
                                      此处与初始化I2S时设置的采样率基本一致。




咪头的主要信息以及配置:
 SELECT 直接 接 GND



最终得到如下波形:
I2S2_SD = 0;     I2S2_CK = 1.024MHz




工程代码:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。