STM32 音频播放:TM8211+PAM8403

STM32 有I2S外设,可通过I2S外设接DAC转换芯片,再接功放和扬声器,播放声音;

音量调节:如果音量控制放在功放的输出端,控制的是功放输出的增益,而不是输入信号的强弱,所有噪声不会衰减。如果音量控制放在功放的输入端,就可以控制输入信号的强弱,在小音量时输入信号和背景噪声就会同步减少,对提高功放输出功率的音质是有好处的。

STM32_I2S+TM8211+PAM8403播放音频

该方案很简单,只需要用STM32的I2S外设传输wav音频数据给TM8211,TM8211的DAC信号经过PAM8403放大,PAM8403接上喇叭负载即可发声。

下面是STM32作为主机将音频文件的数据发送给TM8211,要注意音频的频率和I2S的频率一致,TM8211的数据格式是LSB,该代码防呆主函数即可实现音频播放。

cpp 复制代码
#define	BUFFER_SIZE					2048 //此缓冲区大小通常用于音频数据传输的缓存管理。

/**
 * @brief TM8211音频播放函数
 * @note 该函数用于播放存储在beeze_data数组中的WAV音频数据
 */
void TM8211_Palyer(void)
{
    uint32_t DataLength = 0;        // 定义音频数据长度变量
    uint8_t* DataAddress = NULL;    // 定义音频数据地址指针
    uint16_t* TempAddress = NULL;   // 定义临时16位数据指针
    
    SPK_MUTE(1);    // 设置PAM8403的静音引脚拉高静音,避免播放开始时的爆破音
    
    // 计算实际音频数据长度,减去WAV文件头的0x2c字节
    DataLength = sizeof(beeze_data) - 0x2c;
    
    // 设置数据起始地址,跳过WAV文件头(偏移0x2c字节)
    DataAddress = (unsigned char *)(beeze_data + 0x2c);
    
    // 将数据地址转换为16位指针,便于按16位单位处理
    TempAddress = (uint16_t*)DataAddress;

    // 循环播放音频数据
    while(1)
    {
        // 通过I2S接口发送音频数据到TM8211 DAC芯片
        // 发送BUFFER_SIZE/2个16位数据,超时时间为1000ms
        HAL_I2S_Transmit(&hi2s3, TempAddress, BUFFER_SIZE / 2, 1000);

        // 更新剩余数据长度
        DataLength -= BUFFER_SIZE;
        
        // 更新数据指针,指向下一个数据块
        TempAddress += (BUFFER_SIZE / 2);
        
        // 判断是否播放完成,如果剩余数据小于缓冲区大小则退出循环
        if(DataLength < BUFFER_SIZE) break;
    }
    
    SPK_MUTE(0);    // 播放完成后取消静音
}

科普知识

1、codec是什么

音频编解码芯片:Audio codec,又叫声卡;本质就是ADC和DAC

2、codec的作用

在移动设备中,codec的作用可以归结为4种,分别如下:

  • playback:对PCM等信号进行D/A转化,把数字的音频信号转化为模拟信号
  • capture:对Mic、linein或者其他输入源的模拟信号进行A/D转化,把模拟的声音信号转化成数字信号(CPU能够处理的信号)
  • control0:对音频通路进行控制,比如播放音乐、收听调频收音机;又或者接听电话时音频信号在codec内的流通线路是不一样的
  • control1:对音频信号做出相应的处理,例如音量控制,功率放大,EQ控制等

3、Asoc又是什么

Asoc是接口,codec是硬件概念,而Asoc是软件概念,是对codec的硬件功能进行一些软件接口封装,以方便对codec进行控制。Asoc对Codec驱动的一个基本要求是:驱动程序的代码必须做到与平台无关(低耦合),以方便同一个codec的代码不经过修改即可在不同平台适配

相关推荐
串口哑火达人16 小时前
(六)RT-Thread网络通信--AT组件与ESP8266
c语言·单片机·嵌入式硬件·mcu·物联网
qq_4112624217 小时前
把esp32-c2当单片机用,不用wifi,如何配置,节省更多内存
单片机·嵌入式硬件
王家视频教程图书馆19 小时前
vue3从本地选择一个视频 展示到视频组件中
前端·javascript·音视频
kaikaile199519 小时前
农业物联网基于STM32的LoRa无线通信系统设计与实现
stm32·嵌入式硬件·物联网
新科技事物19 小时前
AI编曲软件帮原创音乐人,用清唱歌词的音频快速做出专业的歌曲编曲伴奏
人工智能·音视频
新科技事物20 小时前
AI编曲软件提升出歌效率,原创音乐人凭清唱歌词的音频快速作编曲伴奏成歌
人工智能·音视频
香水5只用六神1 天前
【RTOS快速入门】07_同步互斥与通信概述
单片机·嵌入式硬件·学习·操作系统·freertos·rtos·嵌入式软件
爱倒腾的老唐1 天前
01、STM32-嵌入式系统
stm32·嵌入式硬件
码农三叔1 天前
(6-4-02)IMU融合与机体状态估计:综合实战:腿式机器人的IMU关节融合与状态估计(2)
人工智能·嵌入式硬件·机器人·人机交互·人形机器人
AI科技1 天前
清唱歌词的音频直接用,原创音乐人用AI编曲软件直接生成完整歌曲的编曲伴奏
人工智能·音视频