CS4344驱动

简介

音频PCM输出相关文章最多的就是WM8978,这里说同个公司推出的更低成本的方案,CS4344。该芯片只有输出没有输入,不需要配置任何东西,内部自动检测直接使用。

使用

CS4344使用iis传输数据,iis相关定义可查看https://blog.csdn.net/shaynerain/article/details/108052027

正常接引脚后,可直接使用,可以带动耳机,如果接喇叭需要功放。

控制引脚

MCU

CS4344

I2S_SD:串行数据

SDIN

I2S_CK:串行时钟线

SCLK

I2S_WS:声道切换

LRCK

I2S_MCK:主时钟输出

MCLK

单片机直接发送即可播放声音

控制方式

wav相关内容可参考https://blog.csdn.net/shaynerain/article/details/108052144

目前采用的wav文件中的PCM播放,大致过程如下:

1、WAV双缓存

2、iis开启DMA发送完成中断

3、发送缓存1数据,完成后发送缓存2数据

4、循环中检测缓存发完,发完后立马读取新的缓存,知道文件读取完成

 

此顺序可参照定时器确定频率,用DAC输出音乐https://blog.csdn.net/shaynerain/article/details/108052191

 

from:https://blog.csdn.net/shaynerain

下面是一个基于STM32的CS4344驱动程序示例,使用的是软件方式进行控制: ```c #include "stm32f10x.h" #include "cs4344.h" void CS4344_Init(void) { SPI_InitTypeDef SPI_InitStructure; // 使能SPI时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); // SPI2 GPIO 初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // SPI2参数配置 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); // 使能SPI SPI_Cmd(SPI2, ENABLE); } void CS4344_WriteReg(uint8_t address, uint16_t data) { uint16_t reg_data = ((uint16_t)address << 8) | data; // 使能SPI SPI_Cmd(SPI2, ENABLE); // 发送数据 SPI_I2S_SendData(SPI2, reg_data); // 等待传输完成 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); // 禁止SPI SPI_Cmd(SPI2, DISABLE); } void CS4344_SetVolume(uint8_t left_volume, uint8_t right_volume) { // 将音量转换为芯片需要的格式 uint16_t left_data = ((uint16_t)left_volume << 8) | (left_volume >> 1); uint16_t right_data = ((uint16_t)right_volume << 8) | (right_volume >> 1); // 设置音量寄存器 CS4344_WriteReg(CS4344_LEFT_VOL_REG, left_data); CS4344_WriteReg(CS4344_RIGHT_VOL_REG, right_data); } ``` 以上是一个简单的CS4344驱动程序示例,其中`CS4344_Init()`函数用于初始化SPI接口和GPIO,`CS4344_WriteReg()`函数用于向芯片的寄存器写入数据,`CS4344_SetVolume()`函数用于设置芯片的音量。需要注意的是,在实际使用时,还需要根据具体的应用需求和系统架构进行相应的修改和配置,以确保芯片能够正常工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值