记:STM32F4参考手册-存储器和总线架构

STM32F4参考手册-存储器和总线架构

目录

STM32F4参考手册-存储器和总线架构

系统架构

AHB/APB总线桥(APB)

存储器组织结构

存储器映射

SRAM概述

Flash概述

位段

自举配置

嵌入式自举程序

物理重映射


系统架构

主系统由32位多层AHB总线矩阵构成,可实现以下部分部分的互连:

        八条主控总线

                Cortex-M4F内核I总线、D总线和S总线

                DMA1存储器总线

                DMA2存储器总线

                DMA2外设总线

                以太网DMA总线

                USB OTG HS DMA总线

        七条被控总线

                内部Flash ICode总线

                内部Flash DCode总线

                主要部分SRAM1(112KB)

                主要部分SRAM2(16KB)

                主要部分SRAM2(64KB)(仅适用于STM32F42xxx和STM32F43xxx器件)

                AHB1外设(包括AHB-APB总线桥和APB外设)

                AHB2外设

                FSMC

借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。

总线矩阵:用于主控总线间的访问总裁管理。仲裁采用循环调度算法。

Tips:图中显示,64KB的CCM数据RAM(内核耦合存储器)不属于总线矩阵,只能通过CPU对其进行访问。

S0--I总线:

        用于将Cortex-M4F内核的指令总线连接到总线矩阵。内核通过此总线获取指令。

        此总线访问的对象是包含代码的存储器(内部Flash/SRAM或通过FSMC的外部存储器)。

S1--D总线:

        用于将Cortex-M4F内核的数据总线连接到总线矩阵。此总线用于访问位于外设或SRAM中的数据,也可通过此总线获取指令(效率低于ICode总线)。

        此总线访问的对象是内部SRAM、APB1外设、APB2外设以及通过FSMC的外部存储器。

S2--S总线:

        用于将Cortex-M4F内核的系统总线连接到总线矩阵。此总线用于访问位于外设或SRAM中的数据,也可通过此总线获取指令(效率低于ICode总线)。

        此总线访问的对象是内部SRAM、APB1外设、APB2外设以及通过FSMC的外部存储器。

S3、S4--DMA存储器总线:

        用于将DMA存储器总线主接口连接到总线矩阵。DMA通过此总线来执行存储器数据的传入和传出。

        此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。

S5--DMA外设总线:

        用于将DMA外设主总线接口连接到总线矩阵。DMA通过此总线访问AHB外设或执行存储器间的数据传输。

        此总线访问的对象是内部SRAM、AHB外设、APB1外设、APB2外设以及通过FSMC的外部存储器。

S6--以太网DMA总线:

        用于将以太网DMA主总线接口连接到总线矩阵。以太网DMA通过此总线向存储器存取数据。

        此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。

S7--USB OTG HS DMA总线:

        用于将USB OTG HS DMA主总线接口连接到总线矩阵。USB OTG HS DMA通过此总线向存储器加载/存储数据。

        此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。

AHB/APB总线桥(APB)

借助两个AHB/APB总线桥,可在AHB总线与两个APB总线之间实现完全同步的连接,从而灵活选择外设频率。

每次芯片复位后,所有外设时钟都将关闭(SRAM和Flash接口除外)。使用外设前,必须在RCC_AHBxENR或RCC_APPBxENR寄存器中使能其时钟。

Tips:对APB寄存器执行16位或8位访问时,该访问将转换为32位访问(总线桥将16位或8位数据复制后提供给32位向量)

存储器组织结构

程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。

各字节按小端格式在存储器中编码。字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。

可寻址的存储空间分为8个主要块,每个块为512MB。

未分配给片上存储器和外设的所有存储区域均视为保留区。

存储器映射

详看STM32F4参考手册。例如:

边界地址外设总线寄存器映射
0xA000 0000 - 0xA000 0FFFFSMC控制寄存器AHB3第1241页的第32.6.9节:FSMC寄存器映射

SRAM概述

ST32F405xx/07xx和STM32F415xx/17xx带有4KB备份SRAM(具体在电池备份域一节)和192KB系统SRAM。

ST32F42xxxx和STM32F43xxx带有4KB备份SRAM(具体在电池备份域一节)和256KB系统SRAM

系统SRAM可按字节、半字(16位)或全字(32位)访问。读写操作以CPU速度执行,且等待周期为0

系统SRAM分为三个块:

        映射在地址0x2000 0000的112KB和16KB块,可供所有AHB主控总线访问。

        映射在地址0x2002 0000的64KB块,可供所有AHB主控总线访问。(适用于STM32F2xxx和STM32F3xxx)。AHB主控总线支持并发SRAM访问(通过以太网或USB OTG HS)。例如,当CPU对112KB或64KB的SRAM进行读/写操作时,以太网MAC可以同时对16KB的SRAM进行读/写操作。

        映射在地址0x1000 0000的64KB块,只能供CPU通过数据总线访问。

如果选择从SRAM自举或选择物理重映射(第8.2.1节:SYSCFG存储器重映射寄存器SYSCFG_MEMRMP),则CPU可通过系统总线或I-Code/D-Code总线访问系统SRAM。要在SRAM执行期间获得最佳的性能,应选择物理重映射(通过自举管脚及软件配置来选择)。

Flash概述

Flash接口可管理CPU通过AHB I-Code和D-Code对Flash进行访问。该接口可针对Flash执行擦除和编程操作,并实施读写保护机制。Flash接口通过指令预取和缓存机制加速代码执行。

Flash结构如下:

        主存储器块分为多个扇区。

        系统存储器,器件在系统存储器自举模式下从该存储器启动。

        512 OTP(一次性可编程)字节,用于存储用户数据。

        选项字节,用于配置读写保护、BOR级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。

位段

Cortex-M4F存储器映射包括两个位段区域。这些区域将存储器别名区域中的每个字映射到存储器位段区域中的相应位。在别名区域写入字时,相当于对位段区域的目标位执行读-修改-写操作。

在STM32F4xx器件中,外设寄存器和SRAM均映射到一个位段区域,这样可实现单个位段的读写操作。这些操作仅适用于Cortex-M4F访问,对于其它总线主接口(如DMA)无效。

可通过一个映射公式说明别名区域中的每个字与位段区域中各个位之间的对应关系。映射公式为:

        bit_word_addr = bit_band_base + (byte_offset * 32) + (bit_number * 4)

bit_word_addr:别名区域中将映射到目标地址位的字的地址

bit_band_base:别名区域的其起始地址

byte_offset:目标位所在位段区域中的字节编号

bit_number:目标位的位位置(0-7)

例如-如何将SRAM地址0x2000 0300处字节的位2映射到别名区域:

        bit_word_addr = 0x2200 0000 + (0x300 * 32) + (2 * 4) = 0x2200 6008

        对地址0x2200 6008执行写操作相当于在SRAM地址0x2000 0300处字节的位2执行读-修改-写操作。

        对地址0x2200 6008执行读操作将返回SRAM地址0x2000 0300处字节的位2的值(0x01-位置位,0x00-位复位)。

自举配置

存储器采用固定的存储器映射,代码区域起始地址为0x0000 0000(通过ICode/DCode总线访问),而数据区域起始地址为0x2000 0000(通过系统总线访问)Cortex-M4F CPU始终通过ICode总线获取复位向量,这意味着只有代码区域(通常为Flash)可以提供自举空间。STM32F4xx微控制器实施一种特殊机制,可以从其它存储器(如内部SRAM)进行自举。

在STM32F4xx中,可以通过BOOT[1:0]引脚选择三种不同的自举模式。

BOOT1BOOT0自举模式
x0Flash
01系统存储器
10嵌入式SRAM

复位后,在SYSCLK的第四个上升沿锁存BOOT引脚的值。复位后,用户可以通过设置BOOT1和BOOT0引脚来选择需要的自举模式。

BOOT0为专用引脚,而BOOT1则与GPIO引脚共用。一旦完成对BOOT1的采样,相应GPIO引脚即进入空闲模式,可用于其它用途。

器件退出待机模式时,还会对BOOT引脚重新采样。因此,当器件处于待机模式时,这些引脚必须保持所需的自举模式配置。这样的启动延迟结束后,CPU将从地址0x0000 0000获取栈顶值,然后从始于0x0000 0004的自举存储器开始执行代码。

Tips:如果器件从SRAM自举,在应用程序初始化代码中,需要使用NVIC异常及中断向量表和偏移寄存器来重新分配SRAM中的向量表。

嵌入式自举程序

嵌入式自举程序模式用于通过以下串行接口重新编程Flash:

        USART1(PA9/PA10)

        USART3(PB10/PB11和PC10/11)

        CAN2(PB5/13)

        USB OTG FS(PA11/PA12)从设备模式(DFU:器件固件升级)

USART外设以内部16MHz振荡器(HSI)频率运行,而CAN和USB OTG FS则需要相当于1MHz数倍(4MHz~26MHz)的外部时钟频率。

嵌入式自举程序代码位于系统存储器,在芯片生产期间由ST编程。有关详细信息,请参考应用笔记AN2606。

物理重映射

选择自举引脚后,应用程序软件可以将某些存储器设定为从代码空间进行访问(这样,可通过ICode总线而非系统总线执行代码)。这样的修改通过在SYSCFG控制器中编程来实现。

因此可重映射一下存储器:

        主Flash

        系统存储器

        嵌入式SRAM1(112KB)

        FSMC块1(NOR/PSRAM1和2)

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

cximage在vs2013下使用方法

1.下载源码 Cximage源码官网 CxImage download | SourceForge.net 下载最新版本 702版本 Download cximage702_full.7z (CxImage) 2.编译 vs2013打开CxImageFull_vc10.sln 这个源码版本是vc10的版本,所以vs2013会自动更新项目 因为cximage需要在后面的项目中使…

零基础学python之高级编程(1)---面向对象编程及其类的创建

面向对象编程及其类的创建 文章目录 面向对象编程及其类的创建前言一、面向过程编程和面向对象编程的概念1.面向过程编程(Procedural Programming)2.面向对象编程(Object-Oriented Programming,OOP) 二、面向对象编程基础1.初识类(class)和对象调用方法 2.类中的两种…

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-时间管理

目录 一、时间管理1.1、时间接口 一、时间管理 时间管理以系统时钟为基础,给应用程序提供所有和时间有关的服务。系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为…

视觉开发板—K210自学笔记(三)

本期我们来遵循其他单片机的学习路线开始去做一位点灯大师—点亮一个LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的,需要查看上一节的文档,看看开发板原理图到底是哪个LED跟哪个IO连在一起。 一、硬件电路 根据之前官方提供的assembly draw…

Redis进阶(二):事务

redis事务特点 弱化的原子性 redis事务的原子性不像MySQL原子性一样,执行不成功的话,redis事务不会进行回滚操作 不具备一致性 redis没有约束,也没有回滚机制,因此事务执行的过程中如果某个修改操作出现失败,就可能引起…

【【C++类与对象(下)】】

1. 再谈构造函数 构造函数体赋值 在创建对象时,编译器会通过调用构造函数,给对象中的各个成员变量一个合适的初始值: class Date { public:// 构造函数Date(int year 0, int month 1, int day 1){_year year;_month month;_day day;}…

基于SpringBoot+Vue的服装销售商城系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

UUID算法:独一无二的标识符解决方案

引言 在分布式系统和大数据环境下,唯一标识符的生成和管理是一项关键任务。UUID(Universally Unique Identifier)算法应运而生,成为了解决重复数据和标识符冲突的有效工具。本文将探讨UUID算法的优势和劣势,分析其在分…

数据可视化之维恩图 Venn diagram

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 维恩图(Venn diagram),也叫文氏图或韦恩图,是一种关系型图表,用于显示元素集合之间的重叠区…

『运维备忘录』之 Find 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

算法学习——LeetCode力扣双指针篇

算法学习——LeetCode力扣双指针篇1 27. 移除元素 27. 移除元素 - 力扣(LeetCode) 描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间&#…

159基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类

基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类,聚类结果效果好,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好。它没有质心,聚类簇是通过将相邻的点连接…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering,提示工程”,里面提到一些prompt相关的技巧,原则&#xf…

点云——噪声(代码)

本人硕士期间研究的方向就是三维目标点云跟踪,对点云和跟踪有着较为深入的理解,但一直忙于实习未进行梳理,今天趁着在家休息对点云的噪声进行梳理,因为预处理对于点云项目是至关重要的,所有代码都是近期重新复现过。 这…

C++ vector用法

目录 1. vector: 1.1 vector 说明 1.2 vector初始化: 方式1. 方式2. ​编辑方式3. 方式4. 方式5. 1.3 vector对象的常用内置函数使用(举例说明) pop_back() 2. 顺序访问vector的几种方式&#x…

hook函数——useRef

useRef useRef 是一个 React Hook,它能帮助引用一个不需要渲染的值。也就是说useRef可以存储一个值,但是不被组件渲染,仅仅只是引用,主要包括两个方面,例如使用ref引用一个值,使用ref引用一个dom节点&…

前端工程化面试题 | 01.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

动态规划的一个初步学习

啥叫动态规划 在我们写很多的题目时,常常可以用暴力枚举来写,缺点就是速度太慢了。如果我们用一个数组或者哈希表(虽然我还没学过哈希表)将之前暴力枚举的数据储存起来,当再一次枚举到这个数字的时候就直接调用数组或…

【深蓝学院】移动机器人运动规划--第4章 动力学约束下的运动规划--笔记

0. Outline 1. Introduction 什么是kinodynamic? 运动学(Kinematics)和动力学(Dynamics)都是力学的分支,涉及物体的运动,但它们研究的焦点不同。 运动学专注于描述物体的运动,而…

【蓝桥杯冲冲冲】k 短路 / [SDOI2010] 魔法猪学院

蓝桥杯备赛 | 洛谷做题打卡day33 文章目录 蓝桥杯备赛 | 洛谷做题打卡day33题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模数据更新日志 题解代码我的一些话 【模板】k 短路 / [SDOI2010] 魔法猪学院 题目背景 注:对于 k k k 短路问…