目录
一、实验内容
预备实验: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通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
二、 基于flash的数据读取
创建工程,选择芯片
配置RCC,并且配置PC13为output对应板子上的LED
配置时钟
配置工程
生成代码。
将flash.c和flash.h添加进工程,完整工程代码链接:百度网盘
提取码:0809
在main.c文件这些地方添加代码
#include "flash.h"
uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];
uint8_t i;
uint8_t FlashTest[] = "Hello I am diyu";
FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) ); // 写入数据到Flash
for(i=0;i<255;i++)
FlashWBuff[i] = i;
FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 ); // 写入数据到Flash
FlashReadBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255 ); // 从Flash中读取数
点击魔法棒进行设置
编译无误后下栽进芯片
点击debug进入调试,打开memor1窗口
Periodic Windows Update开启变量自动更新
打开watch1窗口
将变量FlashWBuff 和 FlashRBuff加入到 Watch 1和2 观察窗口
全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了 回到memor1
三、DAC音频播放
打开Audition,创建文件
采样率2000Hz,声道单声道,位深度16位
点击效果生成基本音色
设置如下
导出文件
打开软件WavToC,这是一个将WAV文件转化成C语言代码的文件,选择打开文件
添加刚才的正弦信号生成的wav文件
点击生成代码
点击试听可以听到”嘟~“的声音
打开野火例程dac输出,在bsp_dac.c下的函数中,替换内容,就可以输出不同的波形
没有示波器,最后一步波形效果图就下次再试了
四、总结
做了flash的读写和dac音频播放过后,学到了很多,临近期末事情也有一点多博客就写的随便一点了。
五、参考文献
STM32 进阶教程 13 – FLASH的读写操作_张十三的博客-CSDN博客_stm32f103c8t6flash读写