基于STM32的DAC音频输出

本文详细介绍了如何使用STM32的DAC模块输出2kHz的正弦波,包括使用Adobe Audition生成音频文件、将其转换为C代码并应用于野火例程。步骤还包括从数字音频到模拟波形的转换,以及关键的代码修改和测试方法。
摘要由CSDN通过智能技术生成

一、DAC

1.1 DAC简介

DAC为数字/模拟转换模块,顾名思义,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。

1.2 DAC功能框图剖析

STM32的DAC模块框图如下:
在这里插入图片描述

整个DAC模块围绕框图下方的 “数字至模拟转换器x” 展开,它的左边分别是参考电源的引脚:VDDA、VSSA及Vref+,其中STM32的DAC规定了它的参考电压Vref+输入范围 为2.4~3.3V。“数字至模拟转换器x” 的输入为 DAC 的数据寄存器 “DORx” 的数字编码,经过它转换得的模拟信号由图中右侧的 “DAC_OUTx” 输出。而数据寄存器 “DORx” 又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。

图中的左上角为DAC的触发源,DAC根据触发源的信号来进行DAC转换,其作用就相当于DAC转换器的开关,它可以配置的触发源为外部中断源触发、定时器触发或软件控制触发。

STM32的DAC外设有固定的输出通道,分别为PA4和PA5,因此实验时直接使用示波器测量PA4和PA5引脚的输出即可。

关于更多DAC的资料详见 野火STM32 HAL库开发实战指南第37节DAC-输出正弦波

二、使用DAC输出周期2kHz的正弦波

2.1 使用Adobe Audition输出一个周期2khz的正弦波

  1. 新建音频文件,设置好文件名、采样率为2000Hz,选择声道为单声道,位深度为16;
    在这里插入图片描述
  2. 选择效果,生成基本音调,将生成基本音色界面进行如下修改,点击确定即可;
    在这里插入图片描述
  3. 导出文件,将其导出为wav文件;
    在这里插入图片描述

2.2 将WAV文件转化成C语言代码

打开软件WavToC,它可以将一个将WAV文件转化成C语言代码的文件:
在这里插入图片描述
找到刚刚导出的.wav文件;
在这里插入图片描述
点击生成代码;
在这里插入图片描述
可以点击试听,试听一下是不是正确的声音,比如这里的正弦波会发出嘟——的声音,最后点击保存代码即可;
在这里插入图片描述
最后可以在相同路径下查看得到的数据;

3.3 打开野火例程的DAC输出正弦波工程

打开bsp_dac.c文件,将正弦波数据换成音频文件生成的数据,这里可以适当删减一部分,修改为POINT_NUM适合的大小:
在这里插入图片描述

修改好后进行编译,烧录进硬件中就可以使用示波器观察输出波形了。

这里因为条件有限,没有示波器,因此就没有进行最后一步。

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

  1. 使用Adobe Audition截取一段喜欢的音乐
    选择文件,打开找到对应的音乐文件,再截取选中一段,然后右键,选择存储选区为…
    在这里插入图片描述
  2. 点击更改转换采样类型
    在这里插入图片描述
  3. 最后点击确定生成.wav文件,再用WavToC,将.wav文件转化成C语言代码的文件,具体操作与上例一样,这里不多做阐述。

四、小结

本次实验由于条件有限,没有用示波器进行波形观察,但理论上这个程序的代码是没有问题的。 据下载验证结果可知:使用示波器测量PA4、PA5的引脚可以看到正弦波形外,还可以观察示波器测量出的频率值和电压峰值。

五、参考链接

1.https://blog.csdn.net/qq_45748462/article/details/112392144
2.https://blog.csdn.net/qq_43279579/article/details/111990896

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值