基于STM32的FALSH读写与DAC功能播放音频
作者:互联网
一、FLASH读写
1、FLASH原理
STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。下面我们就来介绍下这些组成部分:
①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是0X08000000, BOOT0、BOOT1 都接 GND 的时候,就是从 0X08000000 开始运行代码的。
②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能,这里我们不做介绍,大家可以百度了解。
③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。
在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。
2、创建工程
3、代码修改
添加flash.c和flash.h
添加代码
#include "flash.h"
uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];
4、配置keil
进入debug
在view中打开窗口
在watch1添加变量FlashWBuff 和 FlashRBuff
在Memory1中输入地址0x800c000观察
二、DAC功能输出音频
1、DAC介绍
数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+ 以获得更精确的转换结果。
DAC主要特征
● 2个DAC转换器:每个转换器对应1个输出通道
● 8位或者12位单调输出
● 12位模式下数据左对齐或者右对齐
● 双DAC通道同时或者分别转换
● 每个通道都有DMA功能
● 外部触发转换
● 输入参考电压VREF+
DAC管脚
注意: 一旦使能DACx通道,相应的GPIO引脚(PA4或者PA5)就会自动与DAC的模拟输出相连(DAC_OUTx)。为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5在之前应当设置成模拟输入(AIN)。
使能DAC通道
将DAC_CR寄存器的ENx位置’1’ 即可打开对DAC通道x 的供电。经过一段启动时间tWAKEUP,DAC通道x 即被使能。
注意: ENx位只会使能DAC通道x的模拟部分,即便该位被置’0’,DAC通道x的数字部分仍然工作。
使能DAC输出缓存
DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。
DAC输出电压
数字输入经过DAC被线性地转换为模拟电压输出,
其范围为0到VREF+ 。
任一DAC通道引脚上的输出电压满足下面的关系:
DAC输出 = VREF x (DOR / 4095) 。
DAC数据格式
根据选择的配置模式,数据按照下文所述写入指定的寄存器:
─ 8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0]位(实际是存入寄存器DHRx[11:4]位)
─ 12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4]位(实际是存入寄存器DHRx[11:0]位)
─ 12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0]位(实际是存入寄存器DHRx[11:0]位)
2、使用DAC输出正弦波
1、使用Audition新建
设置采样率
2、效果->生成->音调
设置频率
3、导出wav文件
4、截取音频
5、使用WavToC,将WAV文件转化成C语言代码的文件
打开刚才生成的wav文件
在代码在工程中替换
由于没有示波器与音频模块,无法进行测试
三、参考
https://blog.csdn.net/lushoumin/article/details/87694389
https://blog.csdn.net/zhanglifu3601881/article/details/96632971
https://blog.csdn.net/baidu_37366055/article/details/98069127
标签:输出,12,闪存,DAC,FALSH,STM32,寄存器,通道 来源: https://blog.csdn.net/Liang55_55/article/details/122243907