目录
一 题目要求
在SD卡创建一个test-speed.txt文件,循环(不加延时)分批一次写入256字节,累计写入不少于64KB字节;然后读取此文件数据,通过串口显示出来。分析写入和读取的速率。
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通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
二 创建工程
使用stm32cube创建工程,SYS和RCC还是和以前选择好,
然后在GPIO中配置PC13为LED灯的输出管脚。
对应的GPIO设置如下
这里的栈堆大小为改为0x4000,然后配置好名字路径等导出就好了
三 keil处理
导出后在自己的工程文件里面加入flash.h和flash.c。具体文件我使用的是别人的文件。
然后点开main.c修改代码如下
然后编译无错误
STlink接线
STlink stm32
SWLCK SWLCK
SWDIO SWDIO
GND GND
VCC VCC
连接后在工程内配置stlink
点开魔法笔,在debug中选择使用右边的,然后选择STlink在点settings
如果接下来的界面种有显示如下界面就说明成功
然后构建此代码,构建后点击以下图标烧录
烧录成功后开始调试
四 调试
点击放大镜进入调试模式,然后选择view- >memory windows->memory 1打开内存观察窗口输入0x0800c00然后按回车键。
然后view-Watch windows->Watch 1进入观察窗口,在观察窗口里面比较一下两个
然后按F5进入全速运行模式可以看到我们想要输入的内容出现在了里面
然后尝试断电,断电后再次接入电源,开始调试,发现程序刚停在main入口处时还可以看到Flash对应区间的内容保持上一次写入内容值。重复写入没有出现任何的变化。
接下来就是编译后烧录到stm32芯片中了。
五 使用DAC输出周期为2KHZ的正弦波。
打开Adobe软件,点击文件-新建-音频文件格式如下
点击确认后选择效果-生成基本音色在已下架以下界面中设置如下
然后文件-导出-文件 进行设置导出
然后使用ultraedit打开刚才保存的wav文件,如下
然后全选后鼠标右键选择复制十六进制视图接着复制到另外一个文件中再全选选择行列从19列到58列,然后复制到notepad++上。
接着点击每一列的前面一个选择编辑,列块编辑,列里面加上“0x”,在第二列数据开始时加上",0x”如下
这里借用DAC生成正弦波的例程代码
链接:百度网盘 请输入提取码
提取码:706i
将内容复制到keil文件对应的位置,在下图红框中进行替换。
如下
之后编译看是否能够看到自定义的正弦波。
使用DAC输出数字音频歌曲数据,转换为模拟音频波形
打开准备好的歌曲文件,然后到处,和以前一样的过程只把采样频率改一下就好了
然后就可以 导出了,然后相同的步骤进行 复制到notepad++中在利用keil进行编译并烧录。
六 总结
本次实验着重对单片机内的flash区进行存储练习,不借助外部储存即可实现对文件的调用。