音频开发-----STM32配置CODEC之WM8721

STM32配置CODEC之WM8721

一、简介

因一个USB声卡项目使用到WM8721 Codec芯片.花了一天的时间调试代码.最终完成.可以输入跟输出.网上找到的资料基本是FPGA配置的.没有找到用MCU配置的代码.所以才自己动手写一个.做好后方便使用.同时也分享出来,方便大家使用.

以下是芯片的几个特点:

  1. WM8731,是一款低功耗的高音质音频器。
  2. 立体声输入输出.LINE IN , MIC IN可选.
  3. 时钟配置两种模式,Normal模式USB模式.
  4. 支持4种IIS数据格式,:左对齐右对齐IIS模式DSP模式

二、芯片框图

芯片框图

三、WM8731寄存器

芯片总共有11个寄存器.具体的细节要看数据手册.

WM8731寄存器
  • R0寄存器:LRINBOTH: 用左声道参数控制右声道装载控制 LINMUTE:静音控制 LINVOL:音量控制
  • R1寄存器:RLINBOTH:用右声道参数控制左声道装载控制 RINMUTE:静音控制 RINVOL:音量控制
  • R2寄存器:LRHPBOTH:用左通道耳机参数控制右通道耳机输出 LZCEN:左通道过零检测使能 LHPVOL:左通道耳机输出音量控制
  • R3寄存器:RRHPBOTH:用右通道耳机参数控制左通道耳机输出 RZCEN:右通道过零检测使能 RHPVOL:右通道耳机输出音量控制
  • R4寄存器:MICBOOST:麦克风输入推子使能 MUTEMIC:麦克风静音控制。INSEL:ADC输入选择(LININ MIC)BYPASS:直通模式使能。DACSEL:DAC输出选择,这里应该跟使能一个意思。SIDETONE:侧音控制使能,应该跟回声抑制相关。SIDEATT:抑制值。
  • R5寄存器:ADCHPD:ADC高通滤波器的使能。DEEMP:去加重控制 DCAMU:DAC软静音控制。HPOR 当高通滤波器禁用时存储直流偏移
  • R6寄存器:电源管理相关。具体就不细说了。
  • R7寄存器:FORMAT:控制IIS通讯接口的时序。IWL:数据宽度。LRP:控制LRCK信号的相位。 LRSWAP:DAC左右声音时钟交换。MS:主从模式选择。BCLKINV:BCLK反相。
  • R8寄存器:USB/NORMAL:模式选择 BOSR:选择时LRCK跟BCLK时钟关系 SR:采样率控制 CLKIDV2:分频器控制 CLKODIV2:分频器控制
  • R9寄存器:激活接口
  • R15寄存器:软件复位芯片寄存器

四、关于IIC配置

下面的配置的代码:

#define WM8731_ADDR				0X1A      //WM8731的器件地址,固定为0X1A 


/*
*********************************************************************************************************************

@ Brief  : WM8731写寄存器

@ Param  : reg:寄存器地址 val:寄存器的值

@ Return : NONE

@ Author : YWJ(QQ:872180981)

@ Data   : 2020-06-21 12:21

*********************************************************************************************************************
*/
uint8_t WM8731_Write_Reg(uint8_t reg,uint16_t val)
{ 
    uint8_t rest=0;
    xBSP_I2C_Simu_Start(); 
    xBSP_I2C_Simu_Send_Byte((WM8731_ADDR<<1)|0);//发送器件地址+写命令		
    if(xBSP_I2C_Simu_Wait_Ack())return 1;	//等待应答

    xBSP_I2C_Simu_Send_Byte((reg<<1)|((val>>8)&0X01));//写寄存器地址+数据的最高位
    if(xBSP_I2C_Simu_Wait_Ack())return 2;	

    xBSP_I2C_Simu_Send_Byte(val&0XFF);	//发送数据
    if(xBSP_I2C_Simu_Wait_Ack())return 3;	
    xBSP_I2C_Simu_Stop();
    return 0;	
} 

/*
*********************************************************************************************************************

@ Brief  : WM8731初始化函数

@ Param  : NONE

@ Return : NONE

@ Author : YWJ(QQ:872180981)

@ Data   : 2020-06-21 12:23

*********************************************************************************************************************
*/
uint8_t WM8731_Init(void)
{
	uint8_t res;

    //I2C_Send_Byte(0X1E00);//复位WM8731
    res=WM8731_Write_Reg(0x0F,0);	//软复位WM8731
    if(res)return 1;			//WM8731异常
	
	WM8731_Write_Reg(0X00,0X017);
	WM8731_Write_Reg(0X01,0X017);
	//WM8731_Write_Reg(0X02,0X028);//左声道输出音量
	//WM8731_Write_Reg(0X03,0X028);//右声道输出音量
	
	WM8731_Write_Reg(0X04,0X010);
	WM8731_Write_Reg(0X05,0X000);
	WM8731_Write_Reg(0X06,0X002);//硬件中只使用到LINEIN,因此关掉了MICIN,根据实际需要配置
	WM8731_Write_Reg(0X07,0X049);
	WM8731_Write_Reg(0X08,0X000);
	WM8731_Write_Reg(0X09,0X001);
	

	return 0;
}

五、资料下载

以上相关的资料,我会整理放到网盘.包括 : 模拟IIC代码 WM8731配置代码 芯片数据手册

由于百度网盘会更新,可以进群看QQ公告.所以资料都会在同一个地址分享.

QQ:872180981

群号:339420387

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章