基于STM32的DAC音频输出

  • 一、DAC
    • 1.1 DAC简介
    • 1.2 DAC功能框图剖析
  • 二、使用DAC输出周期2kHz的正弦波
    • 2.1 使用Adobe Audition输出一个周期2khz的正弦波
    • 2.2 将WAV文件转化成C语言代码
    • 3.3 打开野火例程的DAC输出正弦波工程
  • 三、使用DAC将数字音频歌曲数据转换为模拟音频波形输出
  • 四、小结
  • 五、参考链接

一、DAC

1.1 DAC简介

DAC为数字/模拟转换模块,顾名思义,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。

1.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的正弦波

2.1 使用Adobe Audition输出一个周期2khz的正弦波

  1. 新建音频文件,设置好文件名、采样率为2000Hz,选择声道为单声道,位深度为16;
  2. 选择效果,生成基本音调,将生成基本音色界面进行如下修改,点击确定即可;
  3. 导出文件,将其导出为wav文件;

2.2 将WAV文件转化成C语言代码

打开软件WavToC,它可以将一个将WAV文件转化成C语言代码的文件:

找到刚刚导出的.wav文件;

点击生成代码;

可以点击试听,试听一下是不是正确的声音,比如这里的正弦波会发出嘟——的声音,最后点击保存代码即可;

最后可以在相同路径下查看得到的数据;

3.3 打开野火例程的DAC输出正弦波工程

打开bsp_dac.c文件,将正弦波数据换成音频文件生成的数据,这里可以适当删减一部分,修改为POINT_NUM适合的大小:

修改好后进行编译,烧录进硬件中就可以使用示波器观察输出波形了。

这里因为条件有限,没有示波器,因此就没有进行最后一步。

三、使用DAC将数字音频歌曲数据转换为模拟音频波形输出

  1. 使用Adobe Audition截取一段喜欢的音乐
    选择文件,打开找到对应的音乐文件,再截取选中一段,然后右键,选择存储选区为…
  2. 点击更改转换采样类型
  3. 最后点击确定生成.wav文件,再用WavToC,将.wav文件转化成C语言代码的文件,具体操作与上例一样,这里不多做阐述。

四、小结

本次实验由于条件有限,没有用示波器进行波形观察,但理论上这个程序的代码是没有问题的。 据下载验证结果可知:使用示波器测量PA4、PA5的引脚可以看到正弦波形外,还可以观察示波器测量出的频率值和电压峰值。

五、参考链接

1.https://blog.csdn.net/qq_45748462/article/details/112392144
2.https://blog.csdn.net/qq_43279579/article/details/111990896

基于STM32的DAC音频输出相关推荐

  1. STM32实现DAC功能输出音频波形

    目录 一.DAC简介 二.输出周期为2kHz的正弦波 三.音频信号输出 四.参考资料 一.DAC简介 DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它 ...

  2. 基于STM32F103C8T6的FLASH的DAC音频输出

    目录 一.知识点 二.音频准备 2.1 生成wav文件 2.2 提取.wav文件十六进制 2.3 notepad++ 2.4 录制"您好欢迎光临 " 三.编写程序 3.1 写入FL ...

  3. STM32之DAC音频播放

    本文内容:本文主要介绍如何用AU获取wav格式的正弦波以及截取到的音频,并通过stm32f103c8t6的DAC模块,转换为模拟音频,并用示波器观察波形. 一.获取正弦信号 点击左上角的文件,新建,音 ...

  4. 基于STM32实现串口通信输出hello windows!

    文章目录 前言 一.介绍 1.串口协议和RS-232.485标准 2.RS232.485电平与TTL电平的区别 3.USB/TTL转232模块的工作原理 二.安装 1.安装STM32CubeMX 2. ...

  5. STM32F103的DAC音频输出

    目录 一.DAC输出周期2khz的正弦波 1.使用Audition输出一个周期2khz的正弦波 2.使用UltraEdit得到相关数据 3.使用notepad++添加相关内容 4.添加数据 5.波形观 ...

  6. 单片机dac c语言,基于单片机Stm32f103 DAC电流输出解决方案

    描述 最近在做电流型信号输出的项目,遇到了些问题这里把这些解决方法做一个笔记方便以后运用.在搞这个的时候因为手册这部分讲的不是很详细,所以在使用上也遇到了些阻力. 用的是64封装的芯, 此芯ADC的基 ...

  7. 基于STM32的flash读写和DAC音频播放

    一.STM32的flash读写 1.利用STM32CUBEMX创建工程 之前有过很多次创建工程的例子,这里大致过程如下: 2.keil中添加代码及修改配置 在flash.c中添加如下代码, 在main ...

  8. 基于 STM32对音频数据的 Flash 读取与 DAC 播放

    目录 1 项目准备1.1 具体要求 1.2 项目环境 2 原理简介 2.1 STM32 的内部 FLASH 2.2 STM32 的 DAC 通道2.2.1 何为 DAC 2.2.2 STM32 的 D ...

  9. 基于stm32片内Flash数据的DAC输出

    stm32片内Flash的提示音播放 前言 一.DAC简介 二.使用DAC输出单周期的正弦波 三.PCM模块输出音频 前言 使用用Adobe audition音频编辑软件录制"您好欢迎光临! ...

最新文章

  1. sqlserver日志文件过大的处理方法
  2. MySQL数据库的性能优化总结
  3. Oracle中case when用法
  4. 代码流程图生成器_【进阶Python】第五讲:迭代器与生成器
  5. .NET(C#)基于Socket编程实现平行主机之间网络通讯有图片传输的Demo演示
  6. iocp三层架构服务器模型
  7. Linux shell脚本详解及实战(一)——shell简介、shell变量及脚本规范
  8. java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程安全问题深入理解
  9. JS:三种常用的函数定义方式
  10. SQL笔试经典50题及答案解析(题目41-50)
  11. 车辆信息管理系统(C语言大作业)
  12. 基于STM32的手势识别检测
  13. 如何设置excel为0的单元格内容为不显示
  14. 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库
  15. 国产 Linux 操作系统面临的困境
  16. 【shadertoy】线性动态模糊的实现 Analytical Motion Blur
  17. 什么是“便携式”应用程序,为什么如此重要?
  18. 快速提高计算能力——matlab多项式计算
  19. TMF Open-API框架
  20. 汽车软件刷新——当前安全访问策略的缺陷及改进方案

热门文章

  1. Head First 设计模式 —— 13. 代理 (Proxy) 模式
  2. 学生管理系统(软件架构课程实验)
  3. 再快一点?动态内容如何加速
  4. 近世代数1:映射,变换
  5. ESP-MESH网络的简单理解图
  6. 电商直播抖音短视频运营创业项目商业计划书
  7. 硅谷产品实战-总结:01什么是优秀的产品经理?
  8. 2015互联网金融安全论坛北京站圆满举行
  9. 香港高防服务器租用应该如何选择?
  10. C++实现自己的文本转语音程序(简单版)