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

一、DAC简介

DAC简介

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

1)STM32 的 DAC简介
STM32 的 DAC 主要特点

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

DAC输出电压计算

DAC输出 = VREF x (DOR / 4096)
其中DOR是对应的数字信号,VREF为参考电压。

2)DAC数字信号格式
如图,DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往 DORx寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。 而STM32 的 DAC 支持 8/12 位模式, 8 位模式的时候是固定的右对齐的,而 12 位模式可以设置左对齐/右对齐。即单 DAC 通道 x总共有 3 种情况:
8 位数据右对齐:用户将数据写入 DAC_DHR8Rx[7:0]位(实际是存入 DHRx[11:4]位)。

12 位数据左对齐:用户将数据写入 DAC_DHR12Lx[15:4]位(实际是存入 DHRx[11:0]位)。

12 位数据右对齐:用户将数据写入 DAC_DHR12Rx[11:0]位(实际是存入 DHRx[11:0]位)。
之后这些数据会传输到DORx 寄存器。

如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。 如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。

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

1、Flash原理

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

Flash的编程原理都是只能将1写为0,而不能将0写为1,所以在进行Flash编程前,必须将对应的块擦除,即将该块的每一位都变为1,块内所有字节变为0xFF。

STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。

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

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

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

2、使用到的硬件及软件

STM32F103C8T6、STlink
软件:Keil、STM32CubeMX

三、建立工程

按照以往步骤建立工程即可
部分配置如下图
定时器配置

管脚配置,对应外设c8t6本身设计好的PC13 LED灯

对应的GPIO设置

设置堆栈大小

时钟配置

1、Keil代码撰写

工程源码链接(主:flash.h文件需要自己重新加入到路径中)
链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn

将事先准备好的flash.c 及flash.h加入到工程中

在main.c文件中添加部分代码



2、STlink调试说明

接线

ST-LINK STM32
SWCLK/TCK SWCLK/TCK
SWDIO/TMS SWDIO/TMS
GND GND
VCC VCC

下载好响应的ST-Link驱动,上电,可以看到STLink在电脑上显示出来了(我这里需要安装驱动)

可以说明ST-Link 驱动已经安装完成。接下来只需要在 mdk 工程里面配置一下 ST-Link即可。

回到Keil下,在魔法棒Option选项卡进行设置

首先是选择调试器,如果使用的是 ST-Link,在 Debug 选项卡中,请选择ST-Link Debugger,如果你使用的是 JLINK,那么需要选择J-LINK/J-Trace Cortex。

在选择完调试器之后,点击右边的 Setting 按钮

如果右侧IDCODE有显示的话就是连接成功了

JTAG 模式和 SWD 模式使用方法都是一样的,不同的是,SWD 接口调试更加节省端口,一般情况下,为了节省更多的资源,建议大家使用 SWD 模式仿真。

之后,点红框的箭头就可以将程序烧录到stm32中

注意:使用st-link和keil进行烧录会严格检查stm32型号,如果不是对应的型号烧录会报错。

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

建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语言/音乐信号进行实验。
生成单音正弦波
文件—>新建—>音频文件

效果->生成->音调

文件->导出->设置导出为wav文件(我这里已经导出成功)

用UltraEdit得到相关数据
用UltraEdit打开刚才保存的wav文件
使用16进制复制刚才的wav文件

这里借用DAC生成正弦波的例程代码

链接:https://pan.baidu.com/s/18zsQG5mZXbjafPuAJEUkMg
提取码:706i
将内容复制到keil文件对应的位置,在下图红框中进行替换。

之后,编译下载,看能否观察到预期的正弦波。

4、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出 操作同上,采样率修改一下,其余烧录步骤都是一样的,不再赘述。


编辑好代码后,烧录,借助音频模块听听看能否还原。

总结

学习了基于片内Flash的提示音播放程序的实现,了解到片内flash的作用。

参考

[1] https://blog.csdn.net/qq_40147893/article/details/107423621

[2] https://blog.csdn.net/lushoumin/article/details/87694389

[3] https://blog.csdn.net/zhanglifu3601881/article/details/96632971

[4] https://blog.csdn.net/Ace_Shiyuan/article/details/78196648

基于片内Flash的提示音播放程序相关推荐

  1. 基于stm32f103c8t6的flash的数据读取以及提示音播放程序

    文章目录 一. 题目 二. 所使用软件硬件 三. 基于flash的数据读取 四. 基于片内Flash的提示音播放程序 1. 使用DAC输出周期2khz的正弦波 2. 使用DAC输出数字音频歌曲数据转换 ...

  2. STM32F103基于片内flash的数据读取与音乐播放

    目录 一.前言 二.题目要求 三.什么是片内flash 四.闪存的编程和擦除 五.基于flash的数据读取 1.工程创建 2.修改代码 3.烧录 4.调试 六.基于flash的提示音播放 1.生成正弦 ...

  3. android 提示音播放

    我封装了一个简单的提示音播放控件 代码: import android.content.Context; import android.media.AudioAttributes; import an ...

  4. 杰理之内置flash 提示音 播放暂停控制【篇】

  5. 基于 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 ...

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

    文章内容: STM32F103C8T6 的 Flash 地址空间的数据读取. STM32F103C8T6 自带的 DAC 通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还 ...

  7. STM32F103C8T6音频数据的Flash读取与DAC播放

    目录 一.Flash地址空间的数据读取 1.Flash简介 2.Flash的硬件实现机制 3.使用到的硬件及软件 4.STM32CubeMX工程配置 5.keil代码 6.STlink调试说明 7.调 ...

  8. 音频数据的Flash读取与DAC播放

    目录 二.Flash地址空间的数据读取 1.flash 2.stm32CubeMX文件创建 3.keil文件配置 4.s-TLINK调试 三.基于片内Flash的提示音播放程序 1.输出2000kHZ ...

  9. STM32 音频数据的Flash读取与DAC播放

    STM32 音频数据的Flash读取与DAC播放 STM32 音频数据的Flash读取与DAC播放 STM32 音频数据的Flash读取与DAC播放 一.题目内容 二.Flash地址空间数据读取 1. ...

  10. STM32之音频数据的Flash读取与DAC播放

    文章目录 一. STM32103之内部Flash原理 1. Flash介绍 2. Flash的组成 3. STM32内部框架图 二. SD卡的读写 1. 实验过程 2. 查看hello.txt 3. ...

最新文章

  1. java 程序运行过程 简介
  2. Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法
  3. python流程控制-python简单流程控制
  4. javascript DOM 遍历
  5. Python读写与追加excel文件
  6. bioconductor 安装包_R语言 | 你知道自己的Bioconductor版本么?
  7. Redis的持久化 RDB AOF
  8. RPLIDAR A2 Windows 下开发
  9. 74HC595级联电路编程篇(四)
  10. wifi认证源码html,openwrt 实现本地wifidog简单认证,认证端纯html
  11. 童甫带您去了解海航科技集团旗下的小二租车近况
  12. java数字转罗马数字
  13. 华为机试HJ69:矩阵乘法
  14. 要想文章好,图片少不了,22个技能助您获得美图(带字幕视频)
  15. 【蓝桥杯单片机国赛 第九届】
  16. AHB2APB 同步桥的设计代码(Verilog)
  17. 计算机版初中语文课文原文,初中语文课文蝉原文
  18. 新能源储能仪表推荐-ACR10R-D16TE4 防逆流仪表通讯接线及Modbus-RTU协议通讯表说明
  19. 关于成为黑客的七个步骤
  20. 广东金融学院计算机专业学费,广东金融学院学费、住宿费收费标准

热门文章

  1. pfc颗粒linux安装包,离散元颗粒流软件(PFC3D/PFC2D)
  2. nodejs+vue+elementui企业考勤管理系统
  3. 局域网传输/共享大文件
  4. 海外拼多多Temu最新动态,怎么快速提升销量和权重?(测评补单)
  5. matlab画矩阵中的两列,matlab 图例 两列
  6. ExtJs6中利用TreePicker实现下拉树
  7. 数字孪生堆场智慧安全管控平台
  8. harmonyos2.0刷机包,鸿蒙harmony os 2.0刷机包|鸿蒙harmony os 2.0系统刷机包 v1.021-520下载站...
  9. 用continue计算100以内奇数和_一分钟明白break和continue
  10. origin函数拟合