stm32-base-03-flash
本系列须知:
- 本博客中stm32入门系列是一些基础外设的使用,所用为正点原子stm32f103zet6精英版
- 使用的是hal库和cubemx
本实验内容如下
- 学会读写flash
引子
本实验本来是关于flash模拟eeprom
但由于笔者问题,所以本文暂时只写了关于flash部分,而关于模拟eeprom暂时还没有
学习博客为:
首先,我们需要知道flash是什么
flash存储着操控stm32的程序,所以它是一个存储区域
其次,EEPROM是什么?
EEPROM也是一块存储区域
那么,为什么要让flash模拟EEPROM?
因为它们存储的方式不同,导致EEPROM优越于flash,而由于EEPROM的价格高于flash,所以通常单片机采用flash,但又由于实际工程项目中需要EEPROM,所以我们探索出一种让flash模拟EEPROM的方法
其中官方文档给出了其二者的差异性和区别,需要官方文档可直接搜AN2594
On the other hand, the microcontrollers used in those systems are each time more often based on embedded Flash memory. To eliminate components, save silicon space and reduce system cost, the STM32F10xxx Flash memory may be used instead of EEPROM for simultaneous code and data storage.
Unlike Flash memory, however, external EEPROM does not require an erase operation to free up space before data can be rewritten. Hence a special software management is required to store data into embedded Flash memory
翻译
另一方面,这些系统中使用的微控制器每次都更多地基于嵌入式闪存。为了省去元件、节省芯片空间和降低系统成本,可以使用 STM32F10xxx 闪存代替 EEPROM 来同步存储代码和数据
然而,与 Flash 存储器不同的是,外部 EEPROM 不需要在重写数据之前进行擦除操作来释放空间。因此,需要特殊的软件管理才能将数据存储到嵌入式闪存中。
我的理解如下
如果将写数据比作吃饭,flash相当于你吃午饭前必须把早饭吐出来,而EEPROM不需要你吐掉早饭你只需要正常吃饭就行了。
理解为什么要将flash模拟EEPROM后,我们可以正式学习相关内容了
本文学习知识点如下
- 如何读、写flash
- 如何将flash模拟EEPROM
flash
学习博客为:
HAL读写FLASH笔记_hal flash 读写-CSDN博客
HAL库 FLASH程序编写注意事项_hal库的flash写函数的注意事项-CSDN博客
写
写有以下四个步骤
- 解锁
- 擦除
- 写
- 上锁
解锁
HAL有集成函数
1 |
|
擦除
1 |
|
- *FLASH_EraseInitTypeDef pEraseInit
1 |
|
- TypeErase擦除方式
1 |
|
NbPages,指擦除多少页;
PageError
HAL库里给出解释了
- @param[out] PageError pointer to variable that
- contains the configuration information on faulty page in case of error
- (0xFFFFFFFF means that all the pages have been correctly erased)
总而言之,其为发生错误的扇区地址
写
HAL库中有集成函数
1 |
|
- 其中TypeProgram是指写入方式
FLASH_TYPEPROGRAM_DOUBLEWORD 单次8个字节的方式
FLASH_TYPEPROGRAM_FAST 单次32行8个字节的方式
FLASH_TYPEPROGRAM_FAST_AND_LAST 单次32行8个字节的方式,但是是烧写地址的最后一页。
- Address不用多说,写入的地址
- data
上锁
1 |
|
写函数(总)
1 |
|
读
读函数有些问题,笔者还没解决
1 |
|
实验
发送一段数据
1 |
|