STM32F103的DAC——实现音频输出
Posted 小小星亮晶晶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103的DAC——实现音频输出相关的知识,希望对你有一定的参考价值。
文章目录
一、DAC
1、 DAC简介
DAC为数字/模拟转换模块,顾名思义,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。
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的正弦波
本次实验所用到软件及工程下载链接:https://pan.baidu.com/s/1gEATonRXK7km3yf-Mu0eEQ
提取码:1234
1、使用Adobe Audition输出一个周期2khz的正弦波
①选择文件
->新建
->音频文件
②设置好文件名、采样率为2000Hz
,选择声道为单声道
,位深度为16
③选择效果
->生成基本音色
④将生成基本音色界面进行如下修改,点击确定即可
⑤点击文件
->导出
->文件
,将其导出为wav文件
2、打开软件 WavToC,它可以将一个将WAV文件转化成C语言代码的文件
点击右下角的打开文件
找到我们刚刚导出的.wav文件
点击生成代码
,便自动生成出了代码
部分数据如下图所示:
另外还可以点击试听
,试听一下是不是正确的声音,比如这里的正弦波会发出嘟——
的声音
最后点击保存代码
即可
可以看到会在保存路径下生成一个.h文件,里面有音频文件生成的数据
3、打开野火例程的DAC输出正弦波工程
打开bsp_dac.c
文件,将正弦波数据换成音频文件生成的数据,这里可以适当删减一部分,修改为POINT_NUM
适合的大小
修改后如下:
修改好后进行编译,烧录进硬件中就可以使用示波器观察输出波形了。
注意:
这里因为条件有限,没有示波器,因此就没有进行最后一步。
三、使用DAC将数字音频歌曲数据转换为模拟音频波形输出
1、使用Adobe Audition截取一段喜欢的音乐
①选择文件
->打开
,找到对应的音乐文件
②选中一段,然后右键,选择存储选区为...
③接着点击更改
转换采样类型
最后点击确定
生成.wav文件
2、打开软件 WavToC,将.wav文件转化成C语言代码的文件
具体步骤跟上例一样,这里不多做阐述
打开.wav文件,点击生成代码
便可转换输出数据,保存代码
即可
然后就可以使用生成的数据和工程进行波形验证了(这里缺少硬件设备,便无结果展示)
四、小结
本实验由于条件有限,没有用示波器进行波形观察,但理论上这个程序的代码是没有问题的。根据 野火 STM32 HAL库开发实战指南的DAC——输出正弦波 下载验证结果可知:使用示波器测量PA4、PA5的引脚可以看到正弦波形外,还可以观察示波器测量出的频率值和电压峰值。
另外还可以基于HAL库去输出一个周期2khz的正弦波,具体过程详见参考链接1。
五、参考链接
1.https://blog.csdn.net/qq_45748462/article/details/112392144
2.https://blog.csdn.net/qq_43279579/article/details/111990896
stm32的dac可以直接输出wav音频文件不外加电路驱动耳机吗?
不可以,stm32没那么大的驱动能力,必须加功放才可以。 参考技术A 估计不行,单片机管脚的驱动能力没有那么强 参考技术B 估计有点悬,高阻抗的耳机或许没问题,一般耳机的话必须要加功放。本回答被提问者采纳以上是关于STM32F103的DAC——实现音频输出的主要内容,如果未能解决你的问题,请参考以下文章