为SensorTile添加一颗外部麦克风实现双通道输入
[复制链接]
使用STSW-STLKT01_V1.3.1的AudioLoop例程 SensorTile上有一颗数字麦克风数字引脚通过PB6->DATA,PC2->CLK连接 L/R接在GND上,数据在CLK上升沿读取 PB6在SensorTile内部连接,没有外接引脚所以不能把新增麦克风挂在这个引脚通过一条数据线读取 在main.c中AUDIO_CHANNELS决定了麦克风的数量,默认为1 AUDIO_CHANNELS为1时DFSDM模块通过PB6读取板子上的麦克风数据 AUDIO_CHANNELS为2时通过PB6读取外部2个麦克风数据, AUDIO_CHANNELS为3或4时除了通过PB6读取外部2个麦克风数据还通过PC0读取另外2个外部麦克风数据,实现4通道输入 DFSDM 数据线CLK和DATA同时挂2颗麦克风 一个麦克风L/R接GND,DFSDM模块在CLK上升沿读取DATA数据 另一个L/R接VDD,DFSDM模块在CLK下降沿读取数据 我手头上只有一颗数字麦克风评估板想实现双通道就要同时使用板子上的麦克风和外接麦克风
在AUDIO_CHANNELS为2时,代码没有对板子上的MP34DT04连接的引脚初始化,需要对代码做些修改 让板子上的MP34DT04和外接的数字麦克风共用PC2做为时钟,PB6做为MP34DT04的DATA数据线,PB8做为外接麦克风的DATA数据线 修改后的代码如下: 因为我的麦克风开发板L/R是接在VDD的,所以要个性haudio_in_dfsdmchannel[1].Init.SerialInterface.Type 为DFSDM_CHANNEL_SPI_FALLING; 在main.c中除了将AUDIO_CHANNELS修改为2还需要修改AudioProcess函数 因为1麦克风时PCM_Buffer保存的数据都是通道1的数据 2个麦克风时PCM_Buffer为麦克风1和麦克风2的数据交替存储 修改为下边代码才能实现板载麦克风通过左声道播放,外接麦克风通道右声道播放 - for(indexIn=0;indexIn<AUDIO_IN_BUF_LEN;indexIn+=2)
- {
- audio_out_buffer[IndexOut++] = PCM_Buffer[indexIn];
- audio_out_buffer[IndexOut++] = PCM_Buffer[indexIn+1];
- }
-
复制代码
|