当前位置: 首页 > article >正文

【STM32】嵌入式(片上)Flash的读写(以STM32F407ZGT6为例,HAL库)

一、嵌入式Flash的主要特性以及模块构成

1.主要特性

图源:STM32F4xx中文参考手册 p59

        在参考手册中,我们可以了解到,Flash由四部分构成:主存储器块,系统存储器,OTP与选项字节。根据自举模式的选择,可以将程序下载到主存储器块或系统存储器块。

         所以,当我们选择主Flash或系统存储器作为自举空间时,程序都会保存到嵌入式Flash中,并在其上运行。

        为了提高Flash读取指令的效率,嵌入式Flash提供了自适应实时存储器加速器 (ART Accelerator™)。该加速器通过预读取128位指令的方式,提升程序运行的速度。

 图源:STM32F4xx中文参考手册 p62

        在CubeMX生成的代码中,HAL_Init已经帮我们实现了这项功能。

 2.模块构成

        下表展示了嵌入式Flash四个块的空间大小以及地址。(注意,不同型号的嵌入式Flash会有不同。例如,F103型号的嵌入式Flash的读写最小单位是页,总内存是64KB或128KB) 

图源:STM32F4xx中文参考手册 p59 

        当选择主Flash为自举空间时,程序就会下载到主存储器中。然而,主存储器共有1MB的内存,只存储程序会造成空间的浪费。因此,当RAM不够用时,可以将常量存在主存储器中(注意,这里必须是常量,因为只有常量区和代码区才存储在Flash中。有关这部分的内容,可以看我的另一篇文章);也可以将主存储器视为EEPROM,自己向主存储区中读写数据(区别在于EEPROM通过电路结构实现擦除,而读写嵌入式Flash需要自行擦除)

二、嵌入式Flash的读写函数(HAL库)

1.读写函数涉及到的结构体

/*stm32f4xx_hal_flash_ex.h*/
/*** @brief  FLASH Erase structure definition*/
typedef struct
{uint32_t TypeErase;   /*!< Mass erase or sector Erase.This parameter can be a value of @ref FLASHEx_Type_Erase */uint32_t Banks;       /*!< Select banks to erase when Mass erase is enabled.This parameter must be a value of @ref FLASHEx_Banks */uint32_t Sector;      /*!< Initial FLASH sector to erase when Mass erase is disabledThis parameter must be a value of @ref FLASHEx_Sectors */uint32_t NbSectors;   /*!< Number of sectors to be erased.This parameter must be a value between 1 and (max number of sectors - value of Initial sector)*/uint32_t VoltageRange;/*!< The device voltage range which defines the erase parallelism
http://www.lryc.cn/news/2415748.html

相关文章:

  • VMware vCenter/vSphere/vSan/Esxi/7.0 lic许可
  • godaddy又支持支付宝支付了。今天backorder了一个域名,尝试用支付宝支付。居然可以支付了。当时的汇率结算。...
  • java快速培训
  • Java中常用的代码汇总
  • 文本框限制只能输入数字、汉子、字母的方法
  • ShopNC多用户商城系统,B2B2C企业级电商平台
  • 果然,ChatGPT还是被拿去搞黄色了...
  • 奥特曼在银行里下象棋的梗
  • 空指针解引用(nullpointer dereference)_空指针解引用分析
  • SAP MM 存储条件 - Room Temperature Vs Ambient
  • 启动IIS 发生意外错误0x8ffe2740
  • 如何零基础制作一款自己的游戏!(一)
  • 用html画一颗圣诞树
  • MapInfo7.0序列号和许可文件
  • 用NetBeans进行JavaFX 开发(一) 入门篇
  • 微信小程序开发中的用户数据统计与分析
  • IOS15升级教程
  • CRMEB商城系统营销功能解读——秒杀功能
  • 2014台州学院ACM集训队寒假练习赛1
  • Sanic学习笔记-搭建简单WEB基础框架
  • ACDsee_14中文许可证秘钥
  • 硬盘安装OpenSUSE心得
  • 【自动化】DCS PLC区别;PLC常见的六大应用
  • 内链、外链、反链、友情链接及相应作用
  • 不再迷茫!一文带你掌握服务器硬件那些事儿
  • 《职场浮生记》无法启动因为dll丢失?丢失dinput8.dll的几种具体手段分析
  • 復興航空235號班機紀錄片的思考和延伸
  • 键盘的各个部分和指法(图片版)
  • Python到底都能干什么?这篇文章告诉你
  • FFmpeg源码分析: AVFrame与AVPacket