ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-31 18:02:26  阅读:253  来源: 互联网

标签:DAC Flash 失性 STM32F103C8T6 存储设备 数据 调试


目录

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

1、Flash简介

2、Flash的硬件实现机制

 3、使用到的硬件及软件

4、STM32CubeMX工程配置

5、keil代码

6、STlink调试说明

7、调试

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

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

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

三、总结

四、参考资料


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

1、Flash简介

Flash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。

2、Flash的硬件实现机制

Flash的内部存储是MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。

在Flash之前,紫外线可擦除(uv-erasable)的EPROM,就已经采用了Floating Gate存储数据这一技术了。

典型的Flash内存单元的物理结构

数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于图中的外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示,因此,Flash的存储单元的默认值,不是0(其他常见的存储设备,比如硬盘灯,默认值为0),而是1,而如果将电荷释放掉,电压降低到一定程度,表述数字0。

 Flash和普通设备相比所具有的特殊性

 3、使用到的硬件及软件

STM32F103C8T6、STlink
软件:Keil、STM32CubeMX

4、STM32CubeMX工程配置

定时器配置

RCC

引脚配置

中断配置

系统时钟树

设置堆栈大小,设置为2k或4k

然后导出

5、keil代码

链接:百度网盘 请输入提取码
提取码:wpsg

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

如果下载源代码,只需要修改main函数中:

编译无误,进行调试

6、STlink调试说明

事先在电脑上下载好响应的ST-Link驱动

回到Keil下,在魔法棒Option选项卡进行设置
首先是选择调试器,如果使用的是 ST-Link,在 Debug 选项卡中,请选择ST-Link Debugger,如果你使用的是 JLINK,那么需要选择J-LINK/J-Trace Cortex

在选择完调试器之后,点击右边的 Setting 按钮,如果看到以下内容说明连接成功

 

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

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

7、调试

点击仿真调试

View->memory windows->memory 1打开内存观察窗口

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

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

 在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容。

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

 

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

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

打开软件Adobe Audition

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

 

效果->生成->音调

 文件->导出->设置导出为wav文件

 

用UltraEdit得到相关数据
用UltraEdit打开刚才保存的wav文件

CTRL+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容

 

可见复制的是11行到59行的数据

复制到notepad++中
Edit编辑->列块编辑->输入0x

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

链接:百度网盘 请输入提取码 

 提取码:706i

将内容复制到keil文件对应的位置,在下图红框中进行替换。

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

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

步骤跟前面差不多,这里不过多赘述

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

三、总结

通过此次实验对Flash有了一定的了解

四、参考资料

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

Flash硬件原理 - 轻轻的吻 - 博客园

标签:DAC,Flash,失性,STM32F103C8T6,存储设备,数据,调试
来源: https://blog.csdn.net/m0_61863551/article/details/122256119

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有