请选择 进入手机版 | 继续访问电脑版

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

[复制链接]
欣荣 发表于 2021-1-1 17:48:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
文章目次



一、DAC简介

  DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于盘算机存储、处理的数字编码,由盘算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号经常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上DAC 外设,它的分辨率可设置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用DMA 功能,都具有出错 检测本领,可外部触发。
二、输出一个周期2khz的正弦波



  • 博主直接使用的是野火指南者DAC输出正弦波的例程

  • DAC初始化布局体详解
  1. 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指南者》

来源:https://blog.csdn.net/qq_42762607/article/details/111998949
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )