基于stm32片内Flash数据的DAC输出
stm32片内Flash的提示音播放
- 前言
- 一、DAC简介
- 二、使用DAC输出单周期的正弦波
- 三、PCM模块输出音频
前言
使用用Adobe audition音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB),然后编程将其分批次写入Stm32f103芯片内部flash区域。
然后将数字音频还原播放,编程读取此段音频,我们这里通过stm32f103自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
一、DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。
如音频信号的采集及还原就是这样一个过程。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
功能框图
DAC原理
DAC的运行过程,其实就是由定时器定时触发DAC转换数据,每当出现定时器更新事件,由DMA运送新的数据到达DAC的寄存器,DAC输出新的数据,而由于这些数据正是一个周期的正弦波的数字形式(我们使用软件生成),经过一个周期的DAC转换,就能输出一个连续的模拟正弦波数据了。
了解了DAC的工作原理,我们不仅可以控制生成正弦波,通过控制配置定时器分频因子和时钟周期就可以控制正弦波的频率了。
具体公式如下
fsin=1/Tsysclk(TIM_Prescaler+1)(TIM_Period+1)*N
其中N为正弦波单个周期的点数
二、使用DAC输出单周期的正弦波
我本次用到了野火的例程,野火例程里的正弦波输出,在其代码基础上稍微修改一下,使其输出频率为2KHZ的正弦波
首先我们打开野火关于正弦波的文件,然后打开matlab采样脚本
使用matlab打开一下文件
在其中修改采样点数,可以看到matlab绘制的波形图
我们把这个把输出的采样点数据复制到野火提供的例程代码中
存放在下面数组中
然后我们编译,将代码烧到开发板中即可,使用示波器观察PA4、PA5通道即可,这里由于实验条件限制,所以没有使用示波器观测现象。
三、PCM模块输出音频
我们先使用录音软件录制一段“你好,欢迎光临”的声音,然后使用Adobe Audition软件打开录制好的音频,截取片段并生成.wav
文件
上图生成的波形是立体声波形,我们点击右键–提取声道为单声道文件
然后选中生成的单声道文件,框选想要录制的音频区域,然后右键选择存储选区(注意截取的音频不要太长,STM32内部flash存储空间可能不够)
配置如下
将生成的文件使用Ultraedit
打开
然后CTRL+A
,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建的UltraEdit文件中
在新建文件中,CTRL+A
,接着鼠标右键,选择范围输入起始的行号和列号,选中我们需要的内容
然后CTRL+C
,将所选文本复制到notepad++所创建的一个新文件去
然后ALT+C
,进入列块编辑模式,输入想要插入的内容,如下图所示
然后将生成的十六进制文件数据放到刚刚的数组中,烧录后观察现象。
参考
STM32 基础系列教程 16 - I2S(模拟)
STM32F103使用TIM DMA DAC实现播放WAV音乐
STM32笔记–DAC(正弦波发生)
STM32F103的DAC——输出声音效果
详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)
【Audio】I2S传输PCM音频数据分析总结(二)
基于stm32片内Flash数据的DAC输出相关推荐
- 基于STM32F103C8T6片内Flash的音频播放(DAC通道)
基于STM32F103C8T6片内Flash的音频播放(DAC通道) 一.STM32的DAC通道介绍 1.DAC 简介 2.STM32中的DAC主要特点 3.DAC 功能框图剖析 4.DAC配置 二. ...
- stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现
引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...
- STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程
STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...
- 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...
- STM32CubeMX | 28 - STM32片内Flash的使用
本系列文章汇总: STM32CubeMX系列教程 本篇文章主要介绍如何使用STM32中的片内FLash. 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板 ...
- 基于STM32与NOR FLASH的SPI通信
SPI的通信很容易实现,相比之下,驱动FLASH反而耗费了我学习SPI整个过程的大部分时间.下面是我学习过程的一些记录. 硬件平台:秉火ISO_V2开发板 实现功能:STM32使用SPI协议读写板 ...
- STM32F103基于片内flash的数据读取与音乐播放
目录 一.前言 二.题目要求 三.什么是片内flash 四.闪存的编程和擦除 五.基于flash的数据读取 1.工程创建 2.修改代码 3.烧录 4.调试 六.基于flash的提示音播放 1.生成正弦 ...
- U盘GPIO文件系统映射-STM32利用内置FLASH做U盘
受到linux对一切设备的控制都当成文件对待的启发 于是便有了这个将GPIO映射到U盘中的想法,这样一来便可以在任何支持U盘的设备中扩展系统的硬件功能了 我的QQ是243786753,这属于原创作品, ...
- STM32F103VET6利用片内FLASH虚拟U盘,使用文件复制方式实现IAP
在原子论坛偶尔搜到一篇 利用STM32片内FLASH虚拟U盘,使用文件复制方式实现IAP的帖子http://www.openedv.com/forum.php?mod=viewthread&t ...
最新文章
- 安装 kubernetes-dashboard
- jeecms系统_自定义对象流程
- Scikit-learn数据预处理分类变量编码之标签二值化
- 转:HTTP请求(GET、POST和soap区别)和响应
- php 邮件类库,[3.3]-扩展类库:基于PHPMailer的邮件发送 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
- Openfire:安装指南
- [渝粤教育] 西南科技大学 婚姻家庭继承法 在线考试复习资料
- 物料编码在PDM与ERP集成中的应用研究
- 豆瓣评论【数据集分享】
- 机器学习(一)协同过滤推荐算法
- 张涵诚对于税务信息化跨入大数据云计算时代的思考
- java如何编写响应_Java开发人员的反应编程介绍 - Fernando Almeida
- UPC2022/3/18 晚训练赛补题
- 解决浏览器无法打开github官网的问题
- 为啥有些人开着电视才能睡着?
- Nginx是干什么的
- 后缀表达式转中缀表达式
- 【机器学习11】LAD,K-means,SVM分析鸢尾花和月亮数据集
- 后端程序员必须要懂的MySQL数据库
- 电路(二)电阻电路的等效分析(附二元泰勒公式)