首页 > 系统相关 >STM32的内存映射机制详解

STM32的内存映射机制详解

时间:2024-08-01 16:28:23浏览次数:24  
标签:映射 起始 STM32 地址 详解 内存 寄存器 外设

目录

前言

一、基本概念

二、内存映射的组成

三、典型布局

四、常用映射


前言

刚开始学习STM32的同学可能只知道按案例配置RAM、Flash的起始地址和容量,但是这个地址是怎么来的,可能并不清楚,接下来让我来给大家介绍一下STM32的内存映射机制

STM32的内存映射机制是一种将不同的内存区域(包括Flash、SRAM、外设寄存器等)按逻辑功能映射到单片机的线性地址空间中的方法。这种机制使得用户可以通过访问特定的地址来操作存储单元或外设寄存器,从而实现对STM32单片机内部资源的直接控制。

一、基本概念

  • 内存映射:将芯片理论上的地址空间分配给存储器或外设寄存器,使它们具有唯一的地址标识。这一过程类似于给每个房间分配一个门牌号,以便能够准确地找到并访问它们。
  • 线性地址空间:STM32单片机的地址空间是线性的,即地址是连续编号的,从0x00000000开始,一直到某个最大值(取决于单片机的具体型号和配置,最大可达4GB)。

二、内存映射的组成

STM32单片机的内存映射可以分为两大部分:系统存储器映射区域外设寄存器映射区域

  • 系统存储器映射区域:主要包括SRAM(用于存放数据,如全局变量、堆栈等)和Flash(用于存储程序代码)。这些区域在单片机的地址空间中占据固定的位置,用户可以通过访问这些地址来读写数据或执行代码。
  • 外设寄存器映射区域:映射了各外设控制需要的寄存器。这些寄存器是外设与单片机之间通信的桥梁,通过访问这些寄存器可以配置外设的工作模式或获取其工作状态。STM32将外设寄存器按照所在的总线(如APB1、APB2、AHB等)进行分组,每个组内的寄存器地址是连续的。

三、典型布局

以STM32F429系列为例,其典型的存储器映射布局如下:

  • Flash memory:0x08000000 ~ 0x080FFFFF(1MB),存储程序代码。
  • SRAM:0x20000000 ~ 0x2003FFFF(256KB),用于存储运行时的数据。
  • APB1外设:0x40000000 ~ 0x4000FFFF,包含连接在APB1总线上的外设,如TIMER2、UART2等。
  • APB2外设:0x40010000 ~ 0x400FFFFF,包含连接在APB2总线上的外设,如TIMER1、SPI1等。

四、常用映射

FMC 总共管理 1.5GB 空间,拥有 6 个存储块(Bank)

从FMC的角度,外部器件比划分为固定大小的存储区域,每个存储取得大小为256MB

  • 区域1可连接多达4个NOR Flash或PSRAM器件,此区域被划分为NOR/PSRAM1~4共4个子区域,带4个专用片选信号
  • 区域2和3用于连接NAND Flash器件,此空间的MU存储器特性必须通过软件重新配置到寄存器中
  • 区域5和6用于连接SDRAM器件(每个存储区域一个器件)

我们给板子加了SDRAM或者NANDFLASH这种FMC接口扩展的芯片,怎么知道它们的映射的起始地址呢。下图是STM32F429的FMC映射图,可以看到sdram的存储块属于BANK5和BANK6,起始地址分别为0XC0000000和0XD0000000,而nandfalsh的存储块属于bank2和bank3,起始地址分别为0X70000000和0X80000000。

注意,有的同学好奇为什么0X80000000作为存储代码的起始地址,又作为nandflash的起始地址,又作为nandflash的起始地址,这不冲突吗?起始并不是,仔细看的话,芯片内部flash起始地址是0X08000000,而nandflash起始地址是0X80000000,后面的0不一样多的。

标签:映射,起始,STM32,地址,详解,内存,寄存器,外设
From: https://blog.csdn.net/qq_38072731/article/details/140820500

相关文章

  • STM32G030F6P6TR_IAP
       bootloader程序 STM32FLASH读写1/**2******************************************************************************3*@filestmflash.c4*@brief读写STM32内部flash(STM32G030F6P6TR)5**************************************......
  • STM32—GPIO
    1.GPIO介绍GPIO可配置8种输入输出模式模式名称性质特征浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平下拉输入数字输入可读取引脚电平,内部链接下拉电阻,悬空时默认低电平模拟输入模拟输入GPIO无效,......
  • Java并发—Java内存模型以及线程安全
    目录 一、Java内存模型JMM的核心概念二、什么是线程安全? 1、原子性2、有序性3、可见性三、如何确保线程安全?1、sychronized关键字2、Lock接口和其实现3、volatile关键字4、Atomic原子类5、ThreadLocal6、不可变对象7、并发集合类8、并发工具类9、Future和Ca......
  • MongoDB复制集/集群搭建详解
    文章目录复制集介绍三节点复制集模式Pss模式PSA模式典型三节点复制集环境搭建注意事项搭建配置复制集复制集状态查询复制集常用命令安全认证创建用户创建keyFile文件启动mongod复制集连接方式复制集成员角色属性成员角色配置隐藏节点配置延时节点添加投票节点移除复制......
  • Grafana Loki 架构详解,比 ES 成本低很多
    在本指南中,我们将详细了解GrafanaLoki架构及其组件。在公司的分布式环境中,存储和管理来自各种系统资源的日志是一项具有挑战性的任务。为了简化这项任务,引入了一个称为日志聚合的概念,它从各种系统资源中收集、存储、管理日志。有各种各样的日志聚合工具,其中一个工具是GrafanaL......
  • 基于STM32设计的实验室智能门禁系统(华为云IOT)(198)
    基于STM32设计的实验室智能门禁系统(华为云IOT)(198)文章目录一、前言1.1项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路【4】供电方式1.3项目开发背景【1】选题的意义......
  • 用Python编写你的网络监控系统详解
    概要在现代网络管理中,实时监控网络流量和状态是保证网络正常运行的关键。使用Python编写网络监控工具可以帮助管理员及时发现和解决网络问题。本文将详细介绍如何使用Python编写网络监控工具,包括基本概念、常用库及其应用场景,并提供相应的示例代码。网络监控的基本概念网......
  • Python WSGI服务器库之gunicorn使用详解
    概要在部署PythonWeb应用程序时,选择合适的WSGI服务器是关键的一步。Gunicorn(GreenUnicorn)是一个高性能、易于使用的PythonWSGIHTTP服务器,适用于各种应用部署场景。Gunicorn设计简洁,支持多种工作模式,能够有效地管理和处理大量并发请求。本文将详细介绍Gunicorn......
  • c++function bind包装器详解
    包装器function包装器function包装器也叫适配器,c++中的function本质是一个类模板,也是一个包装器,那么为什么需要包装器呢。template<classF,classT>TuseF(Ff,Tx){staticintcount=0;cout<<"count:"<<++count<<endl;cout<<"count:&q......
  • STM32F1基于HAL库的学习记录实用使用教程分享(二、GPIO_Input 按键)
    往期内容STM32F1基于HAL库的学习记录实用使用教程分享(一、GPIO_Output)文章目录往期内容前言一、GPIO_Input1.浮空输入(GPIO_Mode_IN_FLOATING)2.上拉输入(GPIO_Mode_IPU)3.下拉输入(GPIO_Mode_IPD)4.上拉和下拉的区分原因二、配置1.RCC2.SYS(1).Debug(2).SystemWa......