音频数据的Flash读取与DAC播放

一、关于Flash

Flash 是存储芯片的一种,通过特定的程序可以修改里面的数据。Flash 存储器又称闪存,它结合了ROM 和RAM 的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM 的优势), U 盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash 全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader 以及操作系统或者程序代码或者直接当硬盘使用(U 盘)。

Flash的编程原理都是将1写为0,但不能将0写为1,所以在进行Flash编程前,必须将对应的块擦除,即将该块的每一位都变为1,块内所有字节变为0xFF。

STM32的闪存(Flash)模块主要包括:主存储器、信息块和闪存存储器接口寄存器。

①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K字节。注意,小容量和中容量产品则每页只有 1K 字节。

②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3,BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。

③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

二、Flash地址空间的数据读取

Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。

打开STM32CubeMx,新建工程,这里只提及关键的几个步骤。
在这里插入图片描述配置调试模式为Serial Wire ,时钟源配置为SysTick
在这里插入图片描述
这里配置管脚PC13,后面利用STM32自带的LED灯。
在这里插入图片描述设置堆栈大小为4K或2K。
在这里插入图片描述然后点击GENERATE CODE,生成工程。打开生成的代码将flash.c和flash.h添加到工程文件中。
在这里插入图片描述
在main.c中添加下列代码,添加完毕后点击编译。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照下述连接STlink和SM32。
在这里插入图片描述
然后点击魔法棒,点击DeBug,选择STlink,在选择完调试器之后,点击右边的 Setting 按钮。
在这里插入图片描述
出现IDCODE所示即说明连接成功。
在这里插入图片描述
将将程序下载到STM32里。在这里插入图片描述
点击进入Debug模式。
在这里插入图片描述
点击View->memory windows,选择 memory 1打开内存观察窗口,并在地址栏中输入:0x800c000,观察将要修改的flash区间区容:
在这里插入图片描述
在这里插入图片描述
点击View->Watch windows,选择Watch 1打开一个变量观察窗口,将变量FlashWBuff 和 FlashRBuff加入到 Watch 1 观察窗口:
在这里插入图片描述
全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样,
在这里插入图片描述
而定义好的句子写到了地址0x0800c000中了。
在这里插入图片描述

三、基于片内Flash的提示音播放程序

利用AU获取wav格式的正弦波以及截取到的音频,并通过STM32f103c8t6的DAC模块,转换为模拟音频,并用示波器观察波形。

点击左上角的文件->新建->音频文件,设置采样率2000Hz,声道单声道,位深度16位。
在这里插入图片描述
点击效果->生成->音调,设置如下。
在这里插入图片描述
点击文件->导出->文件
在这里插入图片描述
设置导出文件格式。
在这里插入图片描述
用UltraEdit打开刚才保存的wav文件。
在这里插入图片描述
CTRL+A后拖动鼠标右键,选择十六进制复制选定视图,将内容粘贴到notepad++中,
点击Edit编辑->列块编辑->输入0x
在这里插入图片描述
打开下载好的DAC输出正弦波的程序,在bsp_dac.c中用上述内容替换框选内容,就可以输出不同的波形。
在这里插入图片描述
编辑后,借助音频模块听听看能否还原,由于手头没有音频播放模块,暂不详述。

四、总结

通过本实验我对片内flash的深刻的认识,可以不借助外设如一些外部flash或EEPROM实现存放功能,还学会了利用AU获取wav格式的正弦波,等硬件到手就可以验证了。

五、参考资料

STM32之flash的读写
STM32之DAC音频播放

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值