一、DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用DMA 功能,都具有出错 检测能力,可外部触发。
二、输出一个周期2khz的正弦波
博主直接使用的是野火指南者DAC输出正弦波的例程
DAC初始化结构体详解
typedef struct
{
uint32_t DAC_Trigger; //DAC触发方式
uint32_t DAC_WaveGeneration; //是否自动输出噪声或三角波
uint32_t DAC_LFSRUnmask_TriangleAmplitude; //选择噪声生成器的低通滤波器或三角波的幅值
uint32_t DAC_OutputBuffer; //选择是否使能输出缓冲器
}DAC_InitTypeDef;
(1)DAC_Trigger
本成员用于配置 DAC 的触发模式,当 DAC 产生相应的触发事件时,才会把 DHRx 寄 存器的值转移到 DORx 寄存器中进行转换。
(2) DAC_WaveGeneration
本 成员用于 设 置 是 否 使 用 DAC 输 出 伪 噪 声 或 三 角 波,使用伪噪声和三角波输出时,DAC都会把 LFSR 寄存器的值叠加到 DHRx 数值上,产生伪噪声和三角波,若希望产生自定义的输出时,直接配置为 DAC_WaveGeneration_None 即可。
(3) DAC_LFSRUnmask_TriangleAmplitude
本成员通过控制 DAC_CR 的 MAMP2 位设置 LFSR 寄存器位的数据,即当使用伪噪声或三角波输出时要叠加到 DHRx 的值,非噪声或三角波输出模式下,本配置无效。
(4) DAC_OutputBuffer本 结 构 体 成 员 用 于 控 制 是 否 使 能 DAC 的 输 出 缓 冲(DAC_OutputBuffer_Enable/Disable),使能了 DAC 的输出缓冲后可以减小输出阻抗,适合直接驱动一些外部负载。
更详细的介绍请参考《零死角玩转STM32——F103指南者》
为了输处2KHz正弦波,我们还需要修改一下例程
示波器观察结果
三、将一段数字音频歌曲数据转换为模拟音频波形输出
总体与正弦波输出程序一致,只需将波形数据换成音频信号数据即可
(1)使用Audition软件打开音频歌曲,选中2~3秒
(2)右键选中的音频,选择存储选区为,设置采用频率为8KHz,单声道,16位,格式为Wave PCM,选择保存位置,确认。
-(3)使用音频转化软件将保存的wav格式音频转为数据
生成的数据
(4)复制其中一部分数据,将其粘贴到波形数据数组里
(5) 使用示波器观察输出的音频波形(接PA4口)
一、DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用DMA 功能,都具有出错 检测能力,可外部触发。
二、输出一个周期2khz的正弦波
博主直接使用的是野火指南者DAC输出正弦波的例程
DAC初始化结构体详解
typedef struct
{
uint32_t DAC_Trigger; //DAC触发方式
uint32_t DAC_WaveGeneration; //是否自动输出噪声或三角波
uint32_t DAC_LFSRUnmask_TriangleAmplitude; //选择噪声生成器的低通滤波器或三角波的幅值
uint32_t DAC_OutputBuffer; //选择是否使能输出缓冲器
}DAC_InitTypeDef;
(1)DAC_Trigger
本成员用于配置 DAC 的触发模式,当 DAC 产生相应的触发事件时,才会把 DHRx 寄 存器的值转移到 DORx 寄存器中进行转换。
(2) DAC_WaveGeneration
本 成员用于 设 置 是 否 使 用 DAC 输 出 伪 噪 声 或 三 角 波,使用伪噪声和三角波输出时,DAC都会把 LFSR 寄存器的值叠加到 DHRx 数值上,产生伪噪声和三角波,若希望产生自定义的输出时,直接配置为 DAC_WaveGeneration_None 即可。
(3) DAC_LFSRUnmask_TriangleAmplitude
本成员通过控制 DAC_CR 的 MAMP2 位设置 LFSR 寄存器位的数据,即当使用伪噪声或三角波输出时要叠加到 DHRx 的值,非噪声或三角波输出模式下,本配置无效。
(4) DAC_OutputBuffer本 结 构 体 成 员 用 于 控 制 是 否 使 能 DAC 的 输 出 缓 冲(DAC_OutputBuffer_Enable/Disable),使能了 DAC 的输出缓冲后可以减小输出阻抗,适合直接驱动一些外部负载。
更详细的介绍请参考《零死角玩转STM32——F103指南者》
为了输处2KHz正弦波,我们还需要修改一下例程
示波器观察结果
三、将一段数字音频歌曲数据转换为模拟音频波形输出
总体与正弦波输出程序一致,只需将波形数据换成音频信号数据即可
(1)使用Audition软件打开音频歌曲,选中2~3秒
(2)右键选中的音频,选择存储选区为,设置采用频率为8KHz,单声道,16位,格式为Wave PCM,选择保存位置,确认。
-(3)使用音频转化软件将保存的wav格式音频转为数据
生成的数据
(4)复制其中一部分数据,将其粘贴到波形数据数组里
(5) 使用示波器观察输出的音频波形(接PA4口)
举报