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

文章目录

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

一. 题目

预备实验: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

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

左键单击P13引脚设置成GPIO_Output

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

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

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

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

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

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

在main.c中加入如下代码

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

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

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

使用stlink下载程序进行调试

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

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

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

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

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

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

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

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

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

下载成功

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

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

进行调试

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

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

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

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

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

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

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

此时,回到memory

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

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

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

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

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

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

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

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

设置相关采用频率

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

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

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

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

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

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

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

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

  1. 使用UltraEdit得到相关数据

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

记得保存

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

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

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

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

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

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

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

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

用Audition打开一段音乐

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

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

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

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

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

五. 参考链接

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

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

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

上一篇:STM32F1C8T6音频数据的Flash读取与DAC播放


下一篇:[识原理图]1.22 JTAG、存储及CPU资源(存储器,总线 后续)