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

STM32内部flash分区

STM32的内部Flash根据型号和容量的不同,分区方式可能有所差异,但通常都包含以下几个主要部分:

主存储器:这是内部Flash的主要部分,用于存放程序代码和数据常量。在STM32F4系列中,主存储器被划分为多个扇区,例如STM32F4共有12个主存储器扇区,这12个扇区分为4个16KB、1个64KB以及7个128KB扇区。不同型号的STM32,其Flash容量和扇区大小也会有所不同。例如,STM32F103C8T6的内部Flash容量为64KB,被划分为多个1KB大小的扇区;而STM32F103ZET6的Flash容量则为512KB或1024KB,扇区大小可能为2KB或4KB。
系统存储器:这部分存储器包含出厂时就已经存在的boot代码,用于在系统存储器自举模式下启动设备。它通常用于给主存储器下载代码,例如通过CAN、串口等方式进行代码下载时,就会用到这部分存储器。
OTP(一次性可编程)区域:OTP区域共528字节,被分成两个部分。前面512字节(32字节为1块,分成16块)可以用来存储一些用户数据(一次性的,写完一次后不可擦除)。后面16字节用于锁定对应块,以防止数据被意外修改。
选项字节:选项字节用于配置Flash的读写保护、电源管理中的BOR级别、软件/硬件看门狗等功能。这部分共32字节,可以通过修改Flash的选项控制寄存器来进行配置。
此外,对于某些STM32系列(如STM32F1),其内部Flash还可能包含信息块和闪存存储器接口寄存器等部分。信息块通常包含启动程序代码和选择字节,而闪存存储器接口寄存器则用于控制Flash的读写操作。

在进行Flash读写操作时,通常需要遵循以下步骤:

启用Flash访问:通过设置Flash控制寄存器(FLASH_CR)中的特定位来启用对Flash的访问权限。
解锁Flash:通过向FLASH_KEYR寄存器写入特定值来解锁Flash,以允许对其进行写操作。
检查Flash状态:在进行Flash编程之前,需要检查Flash是否处于忙碌状态。可以通过读取FLASH_SR寄存器中的BSY位来判断。
执行Flash编程:将要写入的数据写入Flash目标地址。写入操作通常是按字进行的,即每次写入4个字节(或根据并行位数不同而有所变化)。
等待Flash操作完成:执行Flash编程后,需要等待编程操作完成。可以通过轮询FLASH_SR寄存器中的BSY位来检查。
锁定Flash:完成Flash编程后,应该锁定Flash以防止意外修改。通过将FLASH_CR寄存器中的LOCK位设置为1来锁定Flash。
需要注意的是,进行Flash编程时需要小心谨慎,因为不正确的操作可能会导致Flash数据的损坏。因此,在编程之前应仔细阅读相关的芯片参考手册,并按照手册中提供的准确步骤和注意事项进行操作。


http://www.kler.cn/a/450164.html

相关文章:

  • EasyExcel停更,FastExcel接力
  • docker部署微信小程序自动构建发布和更新
  • 完整微服务设计 功能实现
  • java Redis 操作工具类封装(备忘)
  • 【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
  • 一个比RTK或redux更轻量级更易使用的 React 第三方状态管理工具库的配置与使用
  • SQL SERVER日常运维巡检系列之-实例级参数
  • sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
  • W25Q128存储器详解
  • 微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
  • 如何详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器?
  • 如何使用nvm来管理node版本
  • 线程的安全、volatile、synchronized
  • 【运维笔记】向日葵远程:输入法大写无法切换至小写
  • 【React中最优雅的异步请求】
  • vue3+vite一个IP对站点名称的前端curd更新-会议系统优化
  • Spark-Streaming receiver模式源码解析
  • Redis实现延迟任务 + RedisUtil升级
  • 音频接口:PDM TDM128 TDM256
  • QT-简单视觉框架代码
  • Spring Security 自动踢掉前一个登录用户,一个配置搞定!,网易前端社招面经
  • 前端框架Vue的路由机制
  • 【已解决】黑马点评项目Redis版本替换过程中误删数据库后前端显示出现的问题
  • 基于 SOME/IP 的动态服务发现与调用:原理、实现与示例全解析
  • selenium学习笔记(一)
  • 软件测试之非功能测试设计