IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 音频数据的Flash读取与DAC播放 -> 正文阅读

[嵌入式]音频数据的Flash读取与DAC播放

一、内容简介

基于片内Flash的提示音播放程序。

1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。

2)数字音频还原播放任务:编程读取此段音频,分别通过
stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;

提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。

二、stm32的DAC播放与内部flash

1) 关于DAC

数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。
DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。
DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+ 以获得更精确的转换结果。

DAC的主要特征:
  
●  2个DAC转换器:每个转换器对应1个输出通道

●  8位或者12位单调输出

●  12位模式下数据左对齐或者右对齐

●  双DAC通道同时或者分别转换

●  每个通道都有DMA功能

●  外部触发转换

●  输入参考电压VREF+

2) 关于flash

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。

STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。

下面我们就来介绍下这些组成部分:

①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是0X08000000, BOOT0、BOOT1 都接 GND 的时候,就是从 0X08000000 开始运行代码的。

②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能,这里我们不做介绍,大家可以百度了解。

③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

三、Flash地址空间的数据读取

实验验证: stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。

1) 工程代码

stm32f103c6t8的内部flash工程需要在stm32CubeMX中进行相关配置(具体的配置方法参考博客)后再导出,导出后需要额外添加两个代码文件,这里我就直接将同学分享的源代码附在下面:
链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn
工程打开后如下图所示:
在这里插入图片描述
编译后没有错误;
接下来,下载好ST-LINK驱动,并将其连接到电脑上,就可以进行烧录调试了;

ST-Link驱动安装: 链接:https://pan.baidu.com/s/1EwMTGsOyckWO-XTQbUJH4A
提取码:ykpz

判断ST_Link是否连接成功的标志是:右击此电脑——>管理——>设备管理器——>通用串行总线设备;如果有STM32 STLink,即表示连接成功;
在这里插入图片描述

2) 相关配置

接下来对代码进行调试,点击魔法棒,在Debug页面下进行如下操作:
在这里插入图片描述
点击Settings,选择SW接口模式,并且右边出现内容即可表示连接成功;
在这里插入图片描述
由于使用st-link和keil进行烧录会严格检查stm32型号,如果不是对应的型号烧录会报错,所以我们最好检查一下我们的型号是否正确:
魔法棒——>Device
在这里插入图片描述
最后点击“LOAD”将代码烧录到芯片中,出现以下页面即表示烧录成功;
在这里插入图片描述

3)结果验证

将stm32 芯片的BOOT0和BOOT1都置为0,然后点击调试按钮;
首先,点击“View”——>“Memory Windows”——>"Memory 1"观察存储地址;
在这里插入图片描述
然后点击“View”——>“Watch Windows”——>"Watch 1",将变量FlashWBuffFlashRBuff加入到 Watch 1 观察窗口;
在这里插入图片描述
接下来点击全速运行,即可发现FlashWBuff和FlashRBuff中的内容变得一样了;
在这里插入图片描述
在这里插入图片描述
切换到Memory 1 窗口下,可以发现我们想写入的内容也写入到对应的位置当中去了;
在这里插入图片描述

四、片内Flash的提示音播放程序

1) 通过DAC还原原始正弦波型号

Ⅰ、生成音频文件
首先,在软件Adobe Audition下新建音频文件,具体流程为:

文件——>新建——>音频文件

文件名自行设置,将采样率设置为2000HZ,选择单声道,位深度为16位,具体如下:
在这里插入图片描述
在这里插入图片描述

然后再点击:效果——>生成基本音色
在这里插入图片描述
进行如下调整:
在这里插入图片描述
最后就可以导出音频文件啦!
具体流程为: 文件——>导出——>文件
将文件存储在合适的位置,确保文件的格式为wav,采样类型为2000HZ,单声道,16位深度;
在这里插入图片描述
Ⅱ、导出相关数据
首先,在软件UltraEdit(可以在官网上下载)上打开刚刚生成的音频文件,如下图所示:
在这里插入图片描述
然后ctrl+A选中所有内容,接下来右击选择 十六进制复制选定视图,将内容粘贴到一个新建文件中;
在新建文件中,ctrl+A,右击选择范围输入起始的行号和列号(左右两边都有对应行列数,对应选择即可),确定就可以选中所需内容;
在这里插入图片描述
将选中的内容复制到notepad++中,然后选中第一行,分别在每一个数字前进行如下操作:编辑——>列块编辑——>输入框中输入,0x
最终可以看到如下结果:
在这里插入图片描述Ⅲ、结果验证
DAC生成正弦波的例程代码

链接:https://pan.baidu.com/s/18zsQG5mZXbjafPuAJEUkMg
提取码:706i

工程打开后如下:
在这里插入图片描述

将数据复制到keil文件对应的位置,在下图红框中进行替换;
在这里插入图片描述
最后和上面烧录调试的方法一样,观察结果即可;
我这里没有示波器,就不附上结果图了;

2) 数字音频转换为模拟音频播放

在Adobe Audition下打开音乐文件,然后改变音频的采样率,具体流程为:编辑——>转换采样类型,将采样率设置为6000HZ,选择单声道,位深度为16位,具体如下:
在这里插入图片描述
然后存储选中的5~10秒,点击确定即可;
在这里插入图片描述
之后的步骤跟之前的一样,烧录完成后,借助STM32的音频模块验证能否还原音频信号;
这里由于没有音频播放模块,所以结果也不附上啦!!

五、总结

通过本次实验,我了解了stm32 内flash的数据读取。

六、参考内容

ST-LINK驱动的安装
STM32 进阶教程 13 – FLASH的读写操作
STM32之内部FLASH原理

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:06:15  更:2022-01-01 14:08:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 3:50:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码