使用STM32中的DAC生成音频和波形

本文介绍了STM32的DAC模块,通过配置DAC初始化结构体生成2kHz正弦波,并展示了如何将数字音频数据转换为模拟音频波形输出。利用野火指南者的例程,通过修改程序实现波形输出,并提供了使用Audition软件处理音频文件的方法,最终在示波器上观察输出结果。
摘要由CSDN通过智能技术生成

一、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口
    在这里插入图片描述

四、参考资料

1、STM32F103使用TIM DMA DAC实现播放WAV音乐
2、《零死角玩转STM32——F103指南者》

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值