文章目录

  • 一. 题目
  • 二. 所使用软件硬件
  • 三. 基于flash的数据读取
  • 四. 基于片内Flash的提示音播放程序
    • 1. 使用DAC输出周期2khz的正弦波
    • 2. 使用DAC输出数字音频歌曲数据转换为模拟音频波形输出
  • 五. 参考链接

课程任务要求,条件不足无法验证后续操作。

一. 题目

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

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

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

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

二. 所使用软件硬件

硬件:

  • stm32f103c8t6最小核心板
  • stlink下载器

软件:

  • stm32cubemx
  • adobe audition
  • UltraEdit
  • notepad++

三. 基于flash的数据读取

用stm32cubemx创建工程

对于stm32cubmx不熟悉的可以查看我的另一篇:STM32CubeMX实现串口通信_diyu-CSDN博客_stm32cubemx串口通信

这次的配置基本与这个一致。

因为使用stlink下载程序,所以这里debug调试接口选择Serial Wire

左键单击P13引脚设置成GPIO_Output

调整栈大小,将栈大小设为大于2k

将事先准备好的flash.c 及flash.h加入到工程中(flash.h文件放在Inc文件夹下即可)

工程代码(无需密码):https://diyugreat.lanzouw.com/iJCBdy6bklc

在main.c中加入如下代码

使用stlink下载程序进行调试

驱动安装我以前装过了,所以这些自行参考商家资料即可。

打开keil,点击魔法棒。设置调试方式为stlink

点击完 setting后,你可能遇到版本问题,更新下即可。

显示图中方框内容就成功了,然后点击确定即可。

编译无误后,点击load,即可下载进芯片中

下载成功

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

进行调试

View->memory windows->memory 1打开内存观察窗口,并在地址栏中输入:0x800c000,观察将要修改的flash区间区容:

View->Watch windows->Watch 打开两个个变量观察窗口,将变量FlashWBuff 和 FlashRBuff加入到 Watch 1和2 观察窗口

全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了

此时,回到memory

断电,重新上电后再次调试,程序刚停在main入口处时还可以看到Flash对应区间的内容保持上一次写入内容值

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

1. 使用DAC输出周期2khz的正弦波

  1. 使用Audition输出一个周期2khz的正弦波

菜单栏选择文件->新建->音频文件

设置相关采用频率

菜单栏点击效果 ->生成基本音色

设置完相关频率,点击确定

导出为wav文件,选择文件->导出->文件

  1. 使用UltraEdit得到相关数据

官网下载链接:Download UltraEdit text editor for Windows

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

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

我们想要的只是中间的那一块内容。

在新建文件中,ctrl+A,接着鼠标右键,选择范围输入起始的行号和列号。

  1. 使用notepad++添加相关内容

下载地址:Notepad++ - Download (softonic.com)

打开该软件后,新建文件,然后将上面选中的内容复制粘贴到该软件中(在前面软件中,右键选择复制)

在需要添加内容的位置,alt+c 或者点击编辑—>列块编辑,按列块插入0x, 每列重复操作

最后效果(注意查看最后一行,因为可能最后一行内容少,我这里选择将最后一行去掉)

记得保存

打开野火例程dac输出,这里选用stm32f103指南针的

下载链接:[野火]《STM32库开发实战指南》系列 — 野火产品资料下载中心 文档 (embedfire.com)

打开bsp_dac.c,添加前面的16进制数据

最后编译,烧录进硬件中,就可以使用示波器观察了,这里因条件有限,就没有进行最后一步。

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

用Audition打开一段音乐

选中一段,然后右键,选择存储选区,接着更改采用类型

接下来的操作与之前一样,使用UltraEdit、notepad++。
还是使用野火提供的样例程序——DAC输出正弦波即可。

最后编译,烧录进硬件中,就可以使用示波器观察了,这里因条件有限,就没有进行最后一步。

五. 参考链接

STM32 进阶教程 13 – FLASH的读写操作_张十三的博客-CSDN博客_stm32f103c8t6flash读写

STM32F103的DAC——输出声音效果_Harriet的博客-CSDN博客_stm32dac输出音频

[野火]《STM32库开发实战指南》系列 — 野火产品资料下载中心 文档 (embedfire.com)

基于stm32f103c8t6的flash的数据读取以及提示音播放程序相关推荐

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

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

  2. android bmob获取数据,Android基于bmob后端云实现数据读取

    最近在上手一个app作为练手,是关于失物招领的,其中要实现的一个功能是从云端读取数据展示在app的listview当中,其实这个功能挺常见的,不过这里还是拿来分享一下,主要介绍我解决的过程以及思路. ...

  3. c语言stm32串口控制单片机,基于STM32F103C8T6单片机电脑串口通讯控灯设计(原理图+程序+论文)...

    题目:基于STM32F103C8T6单片机电脑串口通讯控灯设计 内容要求: 一. 任务 通信是指不同的独立系统利用线路互相交换数据,它的主要目的是将数据从一端传送到另一端,实现数据的交换.在现代工业控 ...

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

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

  5. 基于fpga 对sgm58031进行数据读取

    最近项目上用到了sgm58031这款芯片,经过两天时间的调试,成功实现了对于该芯片的读取和相关配置. sgm58031是圣邦微的一款4通道输入ADC芯片,芯片地址为1001000,读操作为1,写操作为 ...

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

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

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

  8. STM32利用flash读取音频数据读取与DAC播放

    目录 一.博客内容 二.Flash地址空间的读取 2.1 Flash原理 2.2 软.硬件准备 2.3 利用CubeMX建立工程 2.4 工程代码 2.5 ST-Link的使用 ​2.6 仿真调试 三 ...

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

    文章目录 一.Flash地址空间的数据读取 1.Flash简介 内部 FLASH 的构成 2.建立工程 3.编辑代码 4.STlink调试仿真 二.基于片内Flash的提示音播放程序 1.使用DAC输 ...

最新文章

  1. 在maven项目中使用Junit进行单元测试(一)
  2. Combinations
  3. 《魂斗罗:归来》手游子弹中没中,没你想得那么简单!
  4. 更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
  5. 被指抄袭后 新浪微博APP绿洲更换Logo 重新上架
  6. svn 配置详解,以及各种可能遇到的问题
  7. 一个Python 爬虫程序
  8. 【高等数学笔记】拉格朗日乘数法(Lagrange Multiplier Method):其实也没那么难嘛
  9. 大数据讲课笔记5.5 MR案例——倒排索引
  10. android+发短信示例,【Android】如何实现Android发送短信(示例代码)
  11. Hubstudio指纹浏览器和YiLu代理(易路代理)的配置教程
  12. 海上风电消防火灾报警系统中消防主机超远距离联网方案
  13. win7 计算机无法搜索,Win7电脑搜索功能不能用的解决方法
  14. 固态硬盘计算机怎么自定义分区,如何设置SSD固态硬盘为主硬盘 怎样把SSD分区设置成主分区?...
  15. FireStart教程:基于SharePoint的出差报销流程一
  16. 一切没你想象那么糟,让你瞬间开心的30件小事
  17. 最短路径----狄克斯特拉 (digkstra)+邻接矩阵
  18. 石墨笔记,Onenote和Effie哪个适合SMZDM开箱评论者?
  19. WPS、office使用入坑心得
  20. lenovo thinkpad t460s trackpiont小红点移动速度调整

热门文章

  1. 比较两个对象 取最大值 并返回对象
  2. Windows Phone开发之应用商店
  3. python catia_CATIA Python接口:CATIA.SystemService.Evaluate
  4. 前端项目cnpm install时报错,Failed to connect to github.com port 443: Connection refused
  5. 我如何为家居装饰品牌建立最快的电子商务商店[PART 2]
  6. Linux之open()、close()函数
  7. 【直播数据分析】2022年 9月 最新抖音wss 分析
  8. 终于摸透了iPhone闹钟用法,别放那里浪费了
  9. Linux网络编程经典书籍推荐
  10. 转自-三聚氰胺的为什么都是奶业巨头呢_文伟_新浪博客