Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器,可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。 一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area),这个区域不是用来存储数据的,用于放置数据的校验值检测和纠错的。 块,是Nand Flash的擦除操作的基本/最小单位。 页,是Nand Flash的写入操作的基本/最小的单位。
STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器三部分组成
主存储器
信息块
闪存存储器接口寄存器
在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行; 在进行写或擦除操作时,不能进行代码或数据的读取操作。 它们的地址分布及大小如下: STM32的Flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的Flash大小,不同的芯片flash大小不同。
STM32F103系列的FLASH 容量一般为 512K 字节,属于大容量芯片
在SD卡创建一个.txt文件,循环(不加延时)分批一次写入256字节,累计写入不少于64KB字节;然后读取此文件数据,通过串口显示出来,并分析写入和读取的速率。
具体操作参考博客:STM32F103之完成对SD卡的数据读取
利用FATS从SD卡读出数据,并且串口输出 (1)代码修改
STM32F103C8T6只有20KB内存(RAM)供程序代码和数组变量存放,因此针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ 提取码:pmvn
解锁(固定的KEY值) 由于内部 FLASH 空间主要存储的是应用程序,是非常关键的数据,为了防止误操作修改了这些内容,芯片复位后默认会给控制寄存器 FLASH_CR 上锁,这个时候不允许设置 FLASH 的控制寄存器,从而不能修改 FLASH 中的内容。所以对 FLASH 写入数据前,需要先给它解锁。 解锁的操作步骤如下: (1)往 FPEC 键寄存器 FLASH_KEYR 中写入 KEY1 = 0x45670123 (2)再往 FPEC 键寄存器 FLASH_KEYR 中写入 KEY2 = 0xCDEF89AB
页擦除 在写入新的数据前,需要先擦除存储区域,STM32 提供了页(扇区)擦除指令和整个 FLASH 擦除(批量擦除)的指令,批量擦除指令仅针对主存储区。 页擦除的过程如下: (1)检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何 Flash 操作; (2)在 FLASH_CR 寄存器中,将“激活页擦除寄存器位 PER ”置 1; (3)用 FLASH_AR 寄存器选择要擦除的页; (4)将 FLASH_CR 寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除; (5)等待 BSY 位被清零时,表示擦除完成。
写入数据 擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还需要配置一系列的寄存器,步骤如下: (1)检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作; (2)将 FLASH_CR 寄存器中的 “激活编程寄存器位 PG” 置 1; (3)向指定的 FLASH 存储器地址执行数据写入操作,每次只能以 16 位的方式写入; (4)等待 BSY 位被清零时,表示写入完成。
PC13
#include "flash.h"
电路连线:
连接好后,安装好ST-Link驱动 链接:https://pan.baidu.com/s/1cmreV0 安装好驱动后,上电,查看设备管理器,可以看到STLink在电脑上显示出来
ST-Link Debugger
Settings
SWDIO
LOAD
View->memory windows->memory 1
0x800c000
View->Watch windows->Watch 1
FlashWBuff 和FlashRBuff
'Add FlashWBuff’ to watch1
FlashWBuff 和 FlashRBuff
Watch 1
FlashWBuff
FlashRBuff
STM32的DAC模块主要特点有:
DAC结构框图如下
建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语言/音乐信号进行实验。
工程链接:https://pan.baidu.com/s/1gEATonRXK7km3yf-Mu0eEQ 提取码:1234
文件->新建->音频文件
notepad++
Edit-
Column editor
,0x
bsp_dac.c
编程读取此段音频,通过stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果。
存储选择为
使用DAC输出周期2KHZ的正弦波
音频文件生成的数据(刚刚从FLASH写入并读出的数据)
本文介绍了STM32内部的Flash原理,以及认识了DAC。通过实例——使用DAC输出周期2KHZ的正弦波和使用STM32F103的DAC功能实现音频输出,进一步了解了Flash的写入过程,将音频文件写入Flash比较复杂,要通过采用audition、ultraedit、notepad++ 手工将wav音频数据提取、再将音频歌曲数据转换为模拟音频波形输出(循环)一系列过程才能成功做出来。
https://blog.csdn.net/lushoumin/article/details/87694389 https://www.cnblogs.com/pertor/p/9484663.html https://blog.csdn.net/zhanglifu3601881/article/details/96632971 https://www.jianshu.com/p/a0c6ec6fcff4 https://blog.csdn.net/qq_43279579/article/details/111990896 https://blog.csdn.net/qq_45748462/article/details/112392144