基于STM32F103C8T6片内Flash的音频播放(DAC通道)

一、STM32的DAC通道介绍

1、DAC 简介

  • DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
  • STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。

2、STM32中的DAC主要特点

  • 拥有2个DAC转换器
  • DAC通道为8位或12位单调输出
  • DAC通道为12位模式下数据的左对齐或者右对齐
  • DAC通道具有同步更新功能
  • DAC通道可以生成噪声波形
  • DAC通道可以生成三角波形
  • 双DAC通道同时或者分别转换
  • 每个DAC通道都有DMA功能

3、DAC 功能框图剖析

在这里插入图片描述

  • ①中表示的是DAC模块模拟部分的供电和DAC模块的参考电压 ,STM32 的 DAC 规定了它的参考电压输入范围为 2.4—3.3V。一般,取值为3.3V。
  • ②中DAC_OUTx表示DAC输出通道,对应引脚是PA4或者PA5。

4、DAC配置

(1)开启相应引脚时钟,设置 PA4 为模拟输入。(DAC1对应PA4,DAC2对应PA5)

STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我们要使能 PORTA 的时钟并设置 PA4 为模拟输入。
DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢?
因为一但使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。即使是直接用芯片也可以无脑设置为模拟输入,实验可得虽然引脚为模拟输入,但仍可输出相应信号。

(2)使能相应 DAC 时钟,本次实验通道对应为DAC1;
(3)初始化 DAC,设置 DAC 的工作模式;
(4)使能 DAC 转换通道;

二、实验要求

  • 1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。
  • 2)数字音频还原播放任务:编程读取此段音频,分别通过 (a)stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
  • 提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。

三、数据准备

1、生成mav文件

  • Audition生成输出一个周期2khz的正弦波的mav文件

  • ①选择文件->新建->音频文件
    在这里插入图片描述

  • ②设置相关采用频率
    在这里插入图片描述

  • ③效果->选择生成基本音色
    在这里插入图片描述

  • ④设置相关频率
    在这里插入图片描述

  • ⑤导出为mav文件,选择文件->导出->文件
    在这里插入图片描述

  • Audition生成一段数字音频歌曲数据的mav文件

  • 打开一段歌曲音频文件
    在这里插入图片描述

  • 将音频剪切成5-10s
    在这里插入图片描述

  • 右击->存储选区
    在这里插入图片描述

  • 点击更改:选择采样类型为8000Hz,单声道,16位,再点击确认
    在这里插入图片描述

  • 导出wav文件
    在这里插入图片描述

2、使用UltraEdit得到相关数据

  • ①用该软件打开刚才保存的wav文件
    在这里插入图片描述

  • ②CTRL+A全选,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
    在这里插入图片描述

  • ③在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容
    在这里插入图片描述

3、使用notepad++添加相关内容

  • ①打开该软件后,将上面选中的内容复制粘贴到该软件中(在上面软件中,右键选择复制)
    在这里插入图片描述
  • ②在需要添加内容的位置:Alt+c,为十六进制数加0X前缀(一列一列的添加)
    在这里插入图片描述

四、使用DAC输出周期2khz的正弦波

  • 观察正弦波的波形我们直接使用野火提高的例程
    在这里插入图片描述

  • 这里使用MATLAB打开例程中的采样程序
    在这里插入图片描述

  • 然后把输出的采样点复制到波形数据中
    在这里插入图片描述

  • 编译烧录下载
    在这里插入图片描述

  • 使用示波器测量PA4、PA5的引脚便可看到正弦波形
    (这里由于没有示波器就无法展示波形图)

五、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出

  • 将上面使用notepad++添加0x前缀之后的数据复制到keil工程中bsp_dac.c文件的波形数据的数组中
    在这里插入图片描述

  • 编译烧录,使用示波器观察波形
    (这里由于没有示波器就无法展示波形图)

六、总结

本次对STM32DAC的通道的使用过程中,学习到了DAC是集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。整个学习过程很有意思,挺好玩的。

参考

详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
STM32F103的DAC——输出声音效果

版权声明:本文为CSDN博主「阿布布啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45970808/article/details/122177628

生成海报
点赞 0

阿布布啊

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

音频数据的Flash读取与DAC的播放

一、Flash地址空间的数据读取 1.Flash简介 在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部

音频数据的Flash读取与DAC播放(精简)

一、创建STM32CUBEMX工程 芯片选择F103C8 配置定时器 打开外部时钟 配置时钟 配置PC13为output对应板子上的LED 设置堆栈大小为4K,导出 二、KEIL下的配置 将flash.c 和flash