STM32F401硬件I2S驱动DAC芯片TM8211播放WAV音频教程

前言:

        本文主要演示如何使用I2S驱动TM8211,因此不使用外部存储,使用芯片内部flash存储WAV格式音频,音频数据加上程序不超过内部flash大小即可。

芯片介绍:

        TM8211是两路16位数模转换集成电路,广泛应用于数字音频、多媒体系统。

具体关于TM8211的介绍这里不再赘述,详见数据手册。

软件模拟I2S驱动TM8211的方法可参考博客:tm8211 双路16位DAC使用方法-CSDN博客

准备:

硬件:

1、STM32F401RET6

2、STLinkV2

3、TM8211+功放+喇叭

软件:

1、CubeMX - (用于配置I2S)

2、CubeIDE - (代码编写和编译烧录)

电气连接:

STM32  ---------  TM8211

PB15    ----------  I2S_DIN

PB13    ----------  I2S_CK

PB12    ----------  I2S_WS

Cube相关配置:

生成CubeIDE代码:

程序部分: 

由于CubeMX已经把硬件I2S驱动配置好了,TM8211使用硬件I2S驱动非常简单。

此段代码参考博客:STM32CbueIDE Audio播放音频 WM8978 + I2S_stm32 cube配置i2s录音和播放-CSDN博客

音频播放部分代码:

/*                  I2S 音频播放代码                          */
#define	BUFFER_SIZE					2048


// 播放一段测试音频
void Paly_TestAudio(void)
{
	uint32_t DataLength = 0;
	uint8_t* DataAddress = NULL;
	uint16_t* TempAddress = NULL;

	DataLength = sizeof(data) - 0x2c;
	DataAddress = (unsigned char *)(data+ 0x2c);
	TempAddress = (uint16_t*)DataAddress;

	while(1)
	{
		HAL_I2S_Transmit(&hi2s2, TempAddress, BUFFER_SIZE / 2, 1000);
		DataLength -= BUFFER_SIZE;
		TempAddress += (BUFFER_SIZE / 2);
		if(DataLength < BUFFER_SIZE) break;
	}
}

PS:代码中data数组存放WAV音频数据。(在datas.h中定义)

main部分代码:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_CRC_Init();
  MX_I2S2_Init();
 
  Palyer();
 
  while (1)
  {
 
  }
}

需要引入的头文件:

#include "main.h"
#include "cmsis_os.h"
#include "i2s.h"
#include "rtc.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "datas.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
测试使用的音频,datas.h下载链接:

I2SAudio.rar_w800i2s播放mp3资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/sudaroot/12497400

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰森硬创客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值