STM32F4 I2S3时钟没输出

2019-07-20 10:05发布

我使用I2S3和Wm8978来录音,但是我按照I2S2进行相应修改后,为什么几根时钟线没时钟输出?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
bibanu
1楼-- · 2019-07-20 13:50
我也是使用I2S3,可以正常使用,I2S和你的一样,还有端口和接收函数处修改:
u8 WM8978_Init(void)
{
        u8 res;

        GPIO_InitTypeDef  GPIO_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE);                        //使能外设GPIOB,GPIOC时钟
     
        //复用功能输出
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_SPI3);         //PA4,        AF6  I2S_LRCK                         I2Sn_WS
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_SPI3);        //PC10,        AF6  I2S_SCLK                         I2Sn_CK
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_SPI3);        //PC12 ,AF6  I2S_DACDATA                 I2Sn_SD
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_SPI3);                //PC7 ,        AF6  I2S_MCK                                I2Sn_MCK
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_SPI3);        //PC11 ,AF5  I2S_ADCDATA          I2Snext_SD

       
        IIC_Init();//初始化IIC接口
        res=WM8978_Write_Reg(0,0);        //软复位WM8978
        if(res)return 1;                        //发送指令失败,WM8978异常
        //以下为通用设置
        WM8978_Write_Reg(1,0X1B);        //R1,MICEN设置为1(MIC使能),BIASEN设置为1(模拟器工作),VMIDSEL[1:0]设置为:11(5K)
        WM8978_Write_Reg(2,0X1B0);        //R2,ROUT1,LOUT1输出使能(耳机可以工作),BOOSTENR,BOOSTENL使能
        WM8978_Write_Reg(3,0X6C);        //R3,LOUT2,ROUT2输出使能(喇叭工作),RMIX,LMIX使能       
        WM8978_Write_Reg(6,0);                //R6,MCLK由外部提供
        WM8978_Write_Reg(43,1<<4);        //R43,INVROUT2反向,驱动喇叭
        WM8978_Write_Reg(47,1<<8);        //R47设置,PGABOOSTL,左通道MIC获得20倍增益
        WM8978_Write_Reg(48,1<<8);        //R48设置,PGABOOSTR,右通道MIC获得20倍增益
        WM8978_Write_Reg(49,1<<1);        //R49,TSDEN,开启过热保护
        WM8978_Write_Reg(10,1<<3);        //R10,SOFTMUTE关闭,128x采样,最佳SNR
        WM8978_Write_Reg(14,1<<3);        //R14,ADC 128x采样率
        printf("WM8978_Init OK ");               
        return 0;
}

void rec_i2s_dma_rx_callback(void)
{   
        u16 bw;
        u8 res=0;
        if(rec_sta==0X80)//录音模式
        {  
                if(DMA1_Stream2->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;
        }
}
lzandyc
2楼-- · 2019-07-20 17:55
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 22:14
帮顶
不良苏
4楼-- · 2019-07-21 03:48
bibanu 发表于 2016-5-12 14:59
**** 作者被禁止或删除 内容自动屏蔽 ****

兄弟你有用到SD卡吗,话说板子上SD卡的引脚与PC10 PC11 PC12 共用了  你用这三个引脚不冲突吗
不良苏
5楼-- · 2019-07-21 06:08
 精彩回答 2  元偷偷看……

一周热门 更多>