其他分享
首页 > 其他分享> > STM32F103C8T6音频数据的Flash读取与DAC播放

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

作者:互联网

目录

一、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