实验内容
1.Flash地址空间的数据读取。 stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
2.基于片内Flash的提示音播放程序。 1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。 2)数字音频还原播放任务:编程读取此段音频,分别通过 (a)stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果; 提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。
一、Flash地址空间的数据读取
(一)、创建CubeMX工程
工程源码链接(主:flash.h文件需要自己重新加入到路径中) 链接: https://pan.baidu.com/s/18os4zjSZZH1_qTXHQFniyg 提取码: p36a
1.打开STM32CUBEMX,选择ACCESS TO MCU SELECTCR创建新项目
注:若STM32CUBEMX未曾下载依赖包,请参考: https://blog.csdn.net/qq_48273416/article/details/121012116
2.在Pat Number那输入自己的芯片,我选择的是stm32F103C8, 选中你要的芯片的封装类型,然后点击Start Project 3.进入如下界面后,在System Core中点击SYS,在Debug那里选择Serial Wire,以及下方选项如图选择 4.进入上面的RCC,HSE那里设为Crystal/Ceramic Resonator 5.鼠标右击设置管脚,对应外设c8t6本身设计好的PC13 LED灯
6.设置GPIO 7.中断配置 8.进入Project Manager界面输入你的项目名称和你项目保存的地址,将IDE那项改为MDK-ARM,调节堆栈的大小,堆栈大小为4k或2k
注:项目保存的地址不能有中文,否则可能会出错
(二)、编辑代码
1.将事先准备好的flash.c 及flash.h加入到工程中 2.在main.c文件中添加代码 3.编译无误,进行调试
(三)、STlink调试
1.连线方式如下:
ST-LINK | STM32 |
---|
SWCLK/TCK | SWCLK/TCK | SWDIO/TMS | SWDIO/TMS | GND | GND | VCC | VCC |
2.进入debug 3.View->memory windows->memory 1打开内存观察窗口,并在地址栏中输入:0x800c000,观察将要修改的flash区间内容: 4.View->Watch windows->Watch 1打开一个变量观察窗口,将变量FlashWBuff 和 FlashRBuff加入到 Watch 1 观察窗口: 5.全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了 6.最后在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容 7.断电,重新上电后再次调试,程序刚停在main入口处时还可以看到Flash对应区间的内容保持上一次写入内容值
二、基于片内Flash的提示音播放程序
(一)、使用DAC输出周期2khz的正弦波
1.文件—>新建—>音频文件 2.效果->生成->音调 3.文件->导出->设置导出为wav文件 4.用UltraEdit打开刚才保存的wav文件 5.CTRL+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中,再在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容 6.这里借用DAC生成正弦波的例程代码
链接: https://pan.baidu.com/s/18br7p37b3tgbOIV9m3YV0w 提取码: xt5i
7.将内容复制到keil文件对应的位置,在下图红框中进行替换 8.最后编译下载,看能否观察到预期的正弦波
(二)、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出
1.使用Audition截取一段喜欢的音乐,选择文件->打开,找到对应的音乐,选中一段,然后右键,选择存储选区,接着更改采用类型 2.使用UltraEdit得到相关数据,方法同使用DAC输出周期2khz的正弦波基本一致 3.使用notepad++添加相关内容,方法同使用DAC输出周期2khz的正弦波基本一致,借助音频模块听听看能否还原。
三、总结
本次实验不算很复杂,但过程比较繁琐,操作过程中需细致谨慎,通过本实验了解到了片内flash可以不借助外部设备即可实现存放功能,以及本次实验对于我们了解DAC有着重要的意义,这对于以后我们进一步学习使用stm32,有着比较好的帮助。
四、参考文献
https://blog.csdn.net/qq_46467126/article/details/122098829 https://blog.csdn.net/qq_47538417/article/details/122230944
|