我通过f4的录音例程添加了I2S3(PA15为WS,PB3为CLK,PB4为ext_sd,)
//进入PCM 录音模式
void recoder_enter_rec_mode(void)
{
I2S2_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b); //飞利浦标准,主机发送,时钟低电平有效,16位帧长度
I2S2ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b); //飞利浦标准,从机接收,时钟低电平有效,16位帧长度
I2S2_SampleRate_Set(16000); //设置采样率
I2S2_TX_DMA_Init((u8*)&i2splaybuf[0],(u8*)&i2splaybuf[1],1); //配置TX DMA
DMA1_Stream4->CR&=~(1<<4); //关闭传输完成中断(这里不用中断送数据)
I2S2ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2); //配置RX DMA
I2S3_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b); //飞利浦标准,主机发送,时钟低电平有效,16位帧长度
I2S3ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b); //飞利浦标准,从机接收,时钟低电平有效,16位帧长度
I2S3_SampleRate_Set(16000); //设置采样率
I2S3_TX_DMA_Init((u8*)&i2splaybuf[0],(u8*)&i2splaybuf[1],1); //配置TX DMA
DMA1_Stream5->CR&=~(1<<4); //关闭传输完成中断(这里不用中断送数据)
I2S3ext_RX_DMA_Init(i2s3recbuf1,i2s3recbuf2,I2S3_RX_DMA_BUF_SIZE/2); //配置RX DMA
i2s_rx_callback=rec_i2s_dma_rx_callback;//回调函数指wav_i2s_dma_callback
i2s3_rx_callback=rec_i2s3_dma_rx_callback;
I2S2_Play_Start(); //开始I2S数据发送(主机)
I2S2_Rec_Start(); //开始I2S数据接收(从机)
I2S3_Play_Start(); //开始I2S数据发送(主机)
I2S3_Rec_Start(); //开始I2S数据接收(从机)
//recoder_remindmsg_show(0);
}
回调函数内容如下
//录音 I2S_DMA接收中断服务函数.在中断里面写入数据
void rec_i2s_dma_rx_callback(void)
{
u16 bw;
u8 res;
if(rec_sta==0X80)//录音模式
{
if(DMA1_Stream3->CR&(1<<19))
{
res=f_write(f_rec,i2srecbuf1,I2S_RX_DMA_BUF_SIZE,(UINT*)&bw);//写入文件
if(res)
{
printf("write error:%d
",res);
}
}else
{
res=f_write(f_rec,i2srecbuf2,I2S_RX_DMA_BUF_SIZE,(UINT*)&bw);//写入文件
if(res)
{
printf("write error:%d
",res);
}
}
wavsize+=I2S_RX_DMA_BUF_SIZE;
}
}
void rec_i2s3_dma_rx_callback(void)
{
u16 bw;
u8 res;
if(rec_sta==0X80)//录音模式
{
if(DMA1_Stream0->CR&(1<<19))
{
res=f_write(f_rec,i2s3recbuf1,I2S3_RX_DMA_BUF_SIZE,(UINT*)&bw);//写入文件
if(res)
{
printf("write error:%d
",res);
}
}else
{
res=f_write(f_rec,i2s3recbuf2,I2S3_RX_DMA_BUF_SIZE,(UINT*)&bw);//写入文件
if(res)
{
printf("write error:%d
",res);
}
}
wavsize+=I2S3_RX_DMA_BUF_SIZE;
}
}
我现在的两个都可以录音,但是录出来的效果是那种空灵效果,请问下该怎么解决这个问题
一周热门 更多>