STM32内部Flash

目录

一、内部Flash简介

二、内部Flash构成

1. 主存储器

2. 系统存储区

3. 选项字节

三、内部Flash写入过程

1. 解锁

2. 页擦除

3. 写入数据

四、工程空间分布

某工程的ROM存储器分布映像:

1. 程序ROM的加载与执行空间

2. ROM空间分布表


一、内部Flash简介

        STM32芯片内部有一个Flash存储器,主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部Flash中。由于Flash存储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部Flash中加载代码并运行。由于访问内部Flash的速度要比外部的SPI-Flash快得多,所以在紧急状态下常常会使用内部Flash存储关键记录

二、内部Flash构成

1. 主存储器

        一般说STM32内部Flash的时候,都是指主存储器区域,它是存储用户应用程序的空间芯片型号说明中的256k Flash、 512k Flash都是指这个区域的大小

        主存储器分为256页,每页大小为2KB,共512KB。这个分页的概念,实质就是Flash存储器的扇区,与其他Flash一样,在写入数据前,要先按页(扇区)擦除。 主存储器的页数量、页大小根据芯片型号均有不同。

2. 系统存储区

        该区域用户无法访问,它在芯片出厂时已经固化了启动代码,它负责实现串口、USB以及CAN等ISP烧录功能。

3. 选项字节

        选项字节用于配置Flash的读写保护、待机/停机复位、软件/硬件看门狗等功能,这部分共16字节。可以通过修改Flash的选项控制寄存器修改。

三、内部Flash写入过程

1. 解锁

        由于内部Flash空间主要存储的是应用程序,是非常关键的数据,为了防止因误操作修改了这些内容,芯片复位后默认会给控制寄存器Flash_CR上锁,这时不允许设置Flash的控制寄存器,从而不能修改Flash中的内容。所以对Flash写入数据前,需要先给它解锁。

2. 页擦除

        在写入新的数据前,需要先擦除存储区域,STM32提供了页(扇区)擦除指令和整个Flash擦除(批量擦除)的指令,以批量擦除仅针对主存储区的指令

3. 写入数据

        擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还需要配置一系列的寄存器。

四、工程空间分布

        由于内部Flash本身存储程序数据,若不是有意删除某段程序代码,一般不应修改程序空间的内容。所以在使用内部Flash存储其他数据前,需要了解哪一些空间己经写入了程序代码,存储了程序代码的扇区都不应做任何修改。

        通过 查询 应用程序 编译时产生的 “ *.map ” 后缀文件,可以 了解 程序 存储到了 哪些区域。

某工程的ROM存储器分布映像:

1. 程序ROM的加载与执行空间

        两段分别以 “ Load Region LR_ROM1 ” 及 “ Execution Region ER_IROM1 ” 开头的内容,分别描述程序的 加载及执行空间

        在芯片刚上电运行时,会 加载程序及数据,例如它会 从程序的存储区域加载到程序的 执行区域,还把一些 已初始化的全局变量 从ROM复制到RAM空间,以便 程序运行时 可以 修改变量的 内容。

        加载完成后,程序开始从执行区域开始执行。在map文件中,加载及执行空间的 基地址 (Base) 都是 0x08000000,它正好是 STM32内部Flash的首地址,即 STM32的 程序存储空间直接就是执行空间。它们的大小(Size) 分别为0x000014c4及0x000014b4。

        执行空间的 ROM 比较小 的原因就是 因为部分 RW-data类型的 变量被拷 贝到 RAM空间了

        它们的最大空间(Max)均为0x00080000, 即 512K字节,它指的是 内部Flash的最大空间

        计算程序 占用空间时,需要 使用 加载区域的大小进行计算,本例子中的 内部Flash是从0x08000000至( 0x08000000+0x000014c4 ) 地址的 空间区域。

2. ROM空间分布表

        在加载及执行空间总体描述之后,紧接着一个ROM详细地址分布表,它列出了工程中的各个段(如函数、常量数据) 所在的地址Base Addr及占用的空间Size。

        列表中的 Type 说明了 该段的类型,CODE 表示 代码,DATA 表示 数据,而 PAD 表示 段之间的 填充区域,它是 无效的内容,PAD 区域往往是为了解决地址对齐的问题

        表中的最后一项,它的基地址是 0x08001494,大小为 0x00000020,可知它占用的最高的地址空间为 0x080014b4,与执行区域的最高地址0x000014b4一样,但它们 比加载区域说明中的最高地址0x80014c4要小,所以以加载区域的大小为准

        从内部 Flash 页地址 分布表,可知 仅使用页 0~2 就可以 完全存储 本应用程序,所以从页 3( 地址 0x08001800 )以后的 存储空间都 可以用于其他用途,使用这些 存储空间时不会篡改 应用程序空间的 数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.3.28-29日ICVS-AI智能汽车产业峰会(杭州)

本次安策将携手泰雷兹一起,参展ICVS2024第四届AI智能汽车产业峰会(杭州),2024年3月28日-29日,欢迎新老朋友参加和莅临27号展台交流。 随着自动驾驶汽车政策密集落地。从我国四部门联合发布《关于开展智能网联汽车准入和上路通行试点工作的通知…

【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二)

上一篇:【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 文章目录 1. 前言2. 分配BackendId2.1 何时为backend process分配BackendId2.1.1 找出未使用的slot(inactive slot)2.3 BackendId序号从多少开始?2.4 后端进程退出后,其BackendId被释放…

【头歌·计组·自己动手画CPU】一、计算机数据表示(讲解版) 【计算机硬件系统设计】

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

五、Redis之发布订阅及事务管理

5.1 发布订阅 5.1.1 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 …

力扣题目-1633.各赛事的用户注册率

力扣题目-1633.各赛事的用户注册率 仅作学习,不作他用 题干 用户表: Users Column NameTypeuser_namevarcharuser_idint user_id 是该表的主键(具有唯一值的列)。 该表中的每行包括用户 ID 和用户名。 注册表: Register Column NameTy…

C入门番外篇——C, Are you OK?

今日路上看到一个车牌,52U0K,感觉很有意思,如果做一下简单的翻译就是,“我爱你,好么?” 这样让我脑子中闪现了这样的一个画面:“一个男生追一个女生,看到女生不怎么搭理自己的样子&a…

Spring核心基础:全面总结Spring中提供的那些基础工具类!

内容概要 Spring Framework 提供了众多实用的工具类,这些工具类在简化开发流程、提升代码质量和维护性方面发挥了重要作用,以下是部分关键工具类的总结及其使用场景: StringUtils:不仅提供了基础的字符串操作,如拼接…

转融通业务是什么?好处和弊端是什么?

转融通业务是指证券金融公司借入证券、筹得资金后,再转借给证券公司,为证券公司开展融资融券业务提供资金和证券来源,包括转融券业务和转融资业务两部分。从证券金融公司角度看,向证券公司提供资金和证券供其开展融资融券业务&…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

一、概述 ① 缓存穿透:大量请求根本不存在的key(下文详解) ② 缓存雪崩:redis中大量key集体过期(下文详解) ③ 缓存击穿:redis中一个热点key过期(大量用户访问该热点key,…

Unity类银河恶魔城学习记录3-2 Entity源代码 P48

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic;…

2.6 作业

第五章 静态成员与友元 一、填空题 1、一个类的头文件如下所示&#xff0c;num初始化值为5&#xff0c;程序产生对象T&#xff0c;且修改num为10&#xff0c;并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; public: Tes…

Android13 系统源码适配安装可卸载的三方apk应用

Android13 系统源码适配安装可卸载的三方apk应用 文章目录 Android13 系统源码适配安装可卸载的三方apk应用一、前言二、Android 系统运行后默认安装三方apk实现1、Android 系统默认安装三方apk实现主要思路2、Android 系统默认安装三方apk具体实现&#xff08;1&#xff09;准…

chartGPT网站

在人工智能日益发展的今天&#xff0c;大语言模型成为了我们生活与工作中不可或缺的一部分。它们能够帮助我们处理文本、回答问题、生成创意内容&#xff0c;甚至协助编程和数据分析。然而&#xff0c;由于网络环境的复杂性&#xff0c;找到一个既稳定又快速的大语言模型网站并…

C++ 中template 模版

C模板&#xff08;Templates&#xff09;主要是编写泛型代码&#xff0c;在编译时为不同数据类型生成相应的函数或类实例&#xff0c;主要有函数模板&#xff0c;类模板 函数模板 #include <iostream> #include <string>using namespace std;template<typenam…

OLAP技术的发展及趋势简述

这里写自定义目录标题 历史发展基于电子表格的数据分析基于传统数据库的数据分析基于大数据的数据分析 当下的现状OLAP技术的分类MOLAPROLAPHOLAP 主流的OLAP引擎新技术的普及内存向量计算列式数据存储及交换增量查询多源融合计算下推物化视图 发展趋势智能化分析多源融合和自动…

C Primer Plus(第六版)15.9 编程练习 第3题

#include <stdio.h> void getbit(int num); int main() { getbit(127); return 0; } void getbit(int num) { int result; int sum0; int mask1; result num; while(result!0) { if((result & mask) 1) sum; result >> 1; } printf("%d打开的位有%d个…

【学习笔记】树上差分总结(点差分/边差分)

一.树上差分的基本概念 1.树上差分的定义 树上差分&#xff0c;顾名思义&#xff0c;意思就是在树上做差分。 至于什么是差分呢&#xff1f;如果不会的同学&#xff0c;可以先看看我的这篇博客:一维,二维差分の详解&#xff08;简单易懂&#xff09;_一维差分-CSDN博客 2.树…

智能小程序框架——模块化语法参考(ESModule 语法、CommonJS 语法)

小程序的逻辑代码使用 JavaScript 语法进行编写。可以将一些公共的代码抽离成为一个单独的 js 文件&#xff0c;作为一个模块&#xff0c;以实现逻辑共享复用。主要有 ESModule 和 CommonJS 两种形式。一个项目内应保持使用一种语法形式&#xff0c;否则可能出现导入异常的情况…

SpringBoot中使用Spring自带线程池ThreadPoolTaskExecutor与Java8CompletableFuture实现异步任务示例

场景 关于线程池的使用&#xff1a; Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)&#xff1a; Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)_executorservice executorservice executors.newfix-CSDN博客 Java中创建线程的方式…

springboot(ssm考试信息报名系统 在线考试报名系统Java系统

springboot(ssm考试信息报名系统 在线考试报名系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&a…