文章目录
课程任务要求,条件不足无法验证后续操作。
一. 题目
预备实验: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的正弦波
- 使用Audition输出一个周期2khz的正弦波
菜单栏选择文件->新建->音频文件
设置相关采用频率
菜单栏点击效果 ->生成基本音色
设置完相关频率,点击确定
导出为wav文件,选择文件->导出->文件
- 使用UltraEdit得到相关数据
官网下载链接:Download UltraEdit text editor for Windows
用该软件打开刚才保存的wav文件
ctrl+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
我们想要的只是中间的那一块内容。
在新建文件中,ctrl+A,接着鼠标右键,选择范围输入起始的行号和列号。
- 使用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)