基于STM32F103C8T6片内Flash的音频播放(DAC通道)

  • 一、STM32的DAC通道介绍
    • 1、DAC 简介
    • 2、STM32中的DAC主要特点
    • 3、DAC 功能框图剖析
    • 4、DAC配置
  • 二、实验要求
  • 三、数据准备
    • 1、生成mav文件
    • 2、使用UltraEdit得到相关数据
    • 3、使用notepad++添加相关内容
  • 四、使用DAC输出周期2khz的正弦波
  • 五、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出
  • 六、总结
  • 参考

一、STM32的DAC通道介绍

1、DAC 简介

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

2、STM32中的DAC主要特点

  • 拥有2个DAC转换器
  • DAC通道为8位或12位单调输出
  • DAC通道为12位模式下数据的左对齐或者右对齐
  • DAC通道具有同步更新功能
  • DAC通道可以生成噪声波形
  • DAC通道可以生成三角波形
  • 双DAC通道同时或者分别转换
  • 每个DAC通道都有DMA功能

3、DAC 功能框图剖析

  • ①中表示的是DAC模块模拟部分的供电和DAC模块的参考电压 ,STM32 的 DAC 规定了它的参考电压输入范围为 2.4—3.3V。一般,取值为3.3V。
  • ②中DAC_OUTx表示DAC输出通道,对应引脚是PA4或者PA5。

4、DAC配置

(1)开启相应引脚时钟,设置 PA4 为模拟输入。(DAC1对应PA4,DAC2对应PA5)

STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我们要使能 PORTA 的时钟并设置 PA4 为模拟输入。
DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢?
因为一但使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。即使是直接用芯片也可以无脑设置为模拟输入,实验可得虽然引脚为模拟输入,但仍可输出相应信号。

(2)使能相应 DAC 时钟,本次实验通道对应为DAC1;
(3)初始化 DAC,设置 DAC 的工作模式;
(4)使能 DAC 转换通道;

二、实验要求

  • 1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。
  • 2)数字音频还原播放任务:编程读取此段音频,分别通过 (a)stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
  • 提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。

三、数据准备

1、生成mav文件

  • Audition生成输出一个周期2khz的正弦波的mav文件

  • ①选择文件->新建->音频文件

  • ②设置相关采用频率

  • ③效果->选择生成基本音色

  • ④设置相关频率

  • ⑤导出为mav文件,选择文件->导出->文件

  • Audition生成一段数字音频歌曲数据的mav文件

  • 打开一段歌曲音频文件

  • 将音频剪切成5-10s

  • 右击->存储选区

  • 点击更改:选择采样类型为8000Hz,单声道,16位,再点击确认

  • 导出wav文件

2、使用UltraEdit得到相关数据

  • ①用该软件打开刚才保存的wav文件

  • ②CTRL+A全选,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中

  • ③在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容

3、使用notepad++添加相关内容

  • ①打开该软件后,将上面选中的内容复制粘贴到该软件中(在上面软件中,右键选择复制)
  • ②在需要添加内容的位置:Alt+c,为十六进制数加0X前缀(一列一列的添加)

四、使用DAC输出周期2khz的正弦波

  • 观察正弦波的波形我们直接使用野火提高的例程

  • 这里使用MATLAB打开例程中的采样程序

  • 然后把输出的采样点复制到波形数据中

  • 编译烧录下载

  • 使用示波器测量PA4、PA5的引脚便可看到正弦波形
    (这里由于没有示波器就无法展示波形图)

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

  • 将上面使用notepad++添加0x前缀之后的数据复制到keil工程中bsp_dac.c文件的波形数据的数组中

  • 编译烧录,使用示波器观察波形
    (这里由于没有示波器就无法展示波形图)

六、总结

本次对STM32DAC的通道的使用过程中,学习到了DAC是集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。整个学习过程很有意思,挺好玩的。

参考

详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
STM32F103的DAC——输出声音效果

基于STM32F103C8T6片内Flash的音频播放(DAC通道)相关推荐

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

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

  2. 【Arduino + Linux】基于 Helix 解码库实现 MP3 音频播放

    目录 一.MP3 文件结构 1.1.ID3V2.3 1.1.1.标签头 1.1.2.扩展标签头 1.1.3.标签帧 1.2.音频数据 1.3.ID3V1 1.4.MP3文件结构图 二.MP3 解码库 ...

  3. Android通过意图使用内置的音频播放器

    假设实现一个音频文件的播放,那么在应用程序中提供播放音频文件功能的最简单的方式是利用内置的"Music(音乐)"应用程序的功能--即使用系统自带的或已安装好的音乐播放器来播放指定的 ...

  4. DAC+DMA+TIM实现音频播放问题记录

    目录 1. 概述 2. 音频采样率 2.1 定时器触发周期 2.2 音频文件的格式 3. DAC的左对齐和右对齐 3.1 为什么要使用左对齐 3.2 左对齐数据的读写 3.3 音频数据的使用 3.3. ...

  5. 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx

    基于嵌入式Linux下Madplay音频播放器设计论文 滁州职业技术学院计算机应用技术专业毕业论文PAGE I 滁州职业技术学院信息工程系--2015届计算机应用专业毕业论文 姓 名: 周杰 班 级: ...

  6. 基于RTMP协议的Flash流媒体网页直播播放器

    本文记录一些基于Flash技术的网页播放器.基于Flash的网页播放器相比于其他网页播放器来说最大的优势就是"免插件安装"了,这一点可以很大的提高用户的体验质量. 主要是几种常用的 ...

  7. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

  8. 10个jQuery HTML5音频播放器

    根据Buzz Angle Music的数据,2017年第一季度,仅美国就消费了830亿个音频流.这比上一季度增长了61.2%. 同时,音乐销量下降了23.8%. 2017年5月8日:此热门文章已更新, ...

  9. [微信音频播放器] html5 audio 制作的微信播放器

    weixinAudio.js 一个简单的微信样式播放器 播放器DOM及CSS是微信里内置的音频播放器的样式,重新创建了控制层js,方便在在公众号,APP等场景使用. 例子 demo 地址 github ...

最新文章

  1. python3.5安装教程-linux下安装python3.5.3的方式
  2. [ERR] Not all 16384 slots are covered by nodes.
  3. c++扔鸡蛋问题egg dropping puzzle(附完整源码)
  4. gitignore忽略文件夹_原创 | 详解gitignore的使用方法,让你尽情使用git add .
  5. android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断...
  6. python写excel
  7. Web前端开发好学吗?谈谈一位学姐的前端工程师之路
  8. 基于行跟踪的ROWDEPENDENCIES ORA_ROWSCN信息
  9. 5. Linux 设备文件名
  10. 学生用计算机重启,如何使学校的电脑在重启后不自动还原系统?
  11. waitpid使用实例
  12. 51单片机通过WIFI模块ESP8266控制四路继电器
  13. 【算法】格雷码(Gray Code)与8421二进制码之间的转换算法 (LeetCode89)
  14. C#_HelloWorld 篇
  15. 银行卡四要素验证API接口用法简介
  16. 主机-配件-接口-整机-3c-2
  17. 简谐振动的能量与合成(大学物理笔记)
  18. Thinking in Java:并发
  19. 程序人生 - 详解微星笔记本几大系列
  20. 阿里云iot mqtt

热门文章

  1. UI设计推荐-分享18个高清高品质PSD的进度条素材
  2. 推荐一部不错的电影 《当幸福来敲门》
  3. 一、T100之料件管理
  4. 350导热油 shell_320和350导热油是能达到320℃和350℃吗?
  5. aardio 谷歌浏览器自动化 (七) 切换框架
  6. 电脑日常使用指南(电脑的正确使用姿势)
  7. Xilinx FPGA通过FLASH加载程序的时序
  8. 2022年仿魔客吧素材下载站主题源码+Discuz内核开发
  9. 中小商业银行数字人民币应用发展
  10. 亲爱的,你已经连阅读理解都做不过AI了