一、DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
DAC功能
功能框图
整个 DAC 模块围绕框图下方的“数字至模拟转换器 x”展开,它的左边分别是参考电源的引脚:𝑉𝐷𝐷𝐴、𝑉𝑆𝑆𝐴及𝑉𝑟𝑒𝑓+,其中 STM32 的 DAC 规定了它的参考电压𝑉𝑟𝑒𝑓+输入范围为2.4——3.3V。“数字至模拟转换器 x”的输入为 DAC 的数据寄存器“DORx”的数字编码,经过它转换得的模拟信号由图中右侧的“DAC_OUTx”输出。而数据寄存器“DORx”又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。图中的左上角为 DAC 的触发源,DAC 根据触发源的信号来进行 DAC 转换,其作用就相当于 DAC 转换器的开关,它可以配置的触发源为外部中断源触发、定时器触发或软件控制触发。
二、输出一个周期2khz的正弦波
使用Adobe Audition生成一个2KHz的正弦波
根据下面这个算法,让其触发周期不变,算出2KHz需要的点数1800。
新建一个音频文件
设置参数
生成基本音色
设置参数
得到正弦波形
左键拖动选取一段时间为0.225的片段,然后右键进行下图操作。
选取0.225长的原因是因为,2000KHz所需要的取点数为1800,这里采样频率是8000KHz,所以在0.225秒内才可以采够1800个点。
点击确定
用WavToC将wave文件转换输出
然后打开keil 工程,关于野火STM32指南者开发板的例程中的DAC-正弦波
将转化wave文件得到的添加进去,然后修改周期点数为1800。
在例程中的bsp_dac.c中,将自己得到1800个点的代码放进去。
编译无错
烧录进去,进行验证,示波器观察。
三、输出一段音频波形
自己上网下载自己喜欢的音乐,然后用上面那个音频软件(Adobe Audition)打开,采取一段来进行波形输出(最好2~3秒)。
将截取的存储为新文件。
进行如下选择,采样类型。
然后用另一个软件,将wave文件转换为代码。
然后将生成的代码,像正弦波一样,替换进去,顺便改变其点数,16000
进行编译,无错,然后烧入板子。
用示波器查看。