STM32:I2S驱动WM8978

本文详细介绍了使用STM32F4通过I2S驱动音频IC WM8978的过程,包括GPIO配置、I2S寄存器配置、DMA设置以及音乐播放的实现步骤。在实践中,作者强调了正确配置GPIO的AF选项、理解STM32的I2S与SPI资源共享以及检查硬件设计的重要性。
摘要由CSDN通过智能技术生成

最近项目中使用STM32F4驱动音频IC:WM8978。

WM8978为DAC+ADC芯片,本身并不具备编解码的功能,一方面,可通过I2S接口接收PCM数据,转为模拟信号输出,此为DAC过程,即放音;一方面,可接收模拟信号转为数字信号,通过I2S接口传输给MCU,此为ADC过程,即录音。WM8978还使用I2C接口配置其工作参数,比如音量,EQ,3D环绕等。WM8978本身可直连1W/8欧的小喇叭。

因为使用过程中掉过坑,记录一下容易出错的地方。下面只论及I2S而没有涉及I2C。

1.GPIO配置

我使用的是I2S3,对着硬件工程师给的原理图,再使用STM32CubeMX对照各个管脚看看是否有此映射。不得不说,新版的STM32CubeMX使用起来有些不顺。我只喜欢使用STM32CubeMX查看资源,却不喜欢这个软件的代码,架构有些不合我意。

我使用的还是传统的库,版本为V1.4.0。

    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA |
        RCC_AHB1Periph_GPIOB | 
        RCC_AHB1Periph_GPIOC, ENABLE);            //使能外设GPIOB,GPIOC时钟

    //PB3/4/5 复用功能输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5;
    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(GPIOB, &GPIO_InitStructure);//初始化

    //PC7复用功能输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
    //PA15复用功能输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值