目标:得到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
工程代码:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>