STM32之内存分布与总线

发布者:快乐旅人最新更新时间:2018-06-05 来源: eefocus关键字:STM32  内存分布  总线 手机看文章 扫描二维码
随时随地手机看文章

1、总线

系统结构

系统包括一个由多个互相连接的32位AHB总线组成的矩阵

  • 8个主总线

    – Cortex-M4 with FPU core I-bus, D-bus and S-bus
    – DMA1 memory bus
    – DMA2 memory bus
    – DMA2 peripheral bus
    – Ethernet DMA bus
    – USB OTG HS DMA bus123456
  • 7个从总线:

    – Internal Flash memory ICode bus
    – Internal Flash memory DCode bus
    – Main internal SRAM1 (112 KB)
    – Auxiliary internal SRAM2 (16 KB)
    – AHB1 peripherals including AHB to APB bridges and APB peripherals
    – AHB2 peripherals
    – FSMC1234567

总线矩阵也能够提供主到从的访问,从而使能并发访问,甚至在多个高速外设同时工作的时候也能够高效工作. 64Kbyte的CCM(core coupled memory)数据RAM不是总线矩阵的一部分,只能通过CPU来访问.

总线类型

  • I-bus

    该总线连接带有FPU的Cortex-M4内核的指令总线到BusMatrix. 该总线被内核用于取指令操作. 该总线的控制目标是一块包括代码的内存 (internal Flash memory/SRAM or external memories through the FSMC/FMC).

  • D-bus

    该总线连接带有FPU的Cortex-M4内核的数据总线到64Kbyte的CCM数据RAM再到BusMatrix. 该总线被内核用于下载代码与调试. 该总线的控制目标是一块包括代码或者数据的内存 (internal Flash memory or external memories through the FSMC/FMC).

  • S-bus

    该总线连接带有FPU的Cortex-M4内核的系统总线到BusMatrix. 该总线被用来访问加载到SRAM或者外设的数据. 指令也可能通过该总线取得 (没有ICode来的高效). 该总线的控制目标有:内部的SRAM1, SRAM2 and SRAM3, AHB1的外设(包括APB外设), AHB2的外设和通过FSMC/FMC的外部内存

  • BusMatrix

    BusMatrix 管理主总线之间的访问仲裁. 仲裁使用循环算法

总线结构图:

总线结构图

2、内存分布

  • 编程空间(代码空间), 数据空间, 寄存器和I/O端口被组织在同一个线性的4Gb空间中。所有的数据都按照小端存储

  • 可寻址内存空间被分为8个块, 每块包括512MB

  • 所有没有被分配到片上内存或者片上外设的空间都被成为”reserved”

嵌入式SRAM

  • STM32F407ZG配置了4 Kbytes的备份 SRAM,192 Kbytes的系统SRAM。

  • 嵌入式SRAM可以以字节,半字,字的方式访问,可以以CPU的速度进行无需等待的访问,嵌入式SRAM被分为以下3个块: 

    • SRAM1 和 SRAM2 映射到 0x2000 0000 地址并且可以被所有的 AHB 总线访问.

    • SRAM3 (只有 STM32F42xxx 与 STM32F43xxx 系列可用) 映射到 0x2002 0000 地址处并且可以被所有的 AHB 总线访问

    • CCM (core coupled memory) 映射到 0x1000 0000 地址处只能够通过D-bus被CPU访问

位带操作

在STM32中提供了两个位带操作域以及对应的位带别名域

位带操作域位带别名域
SRAM的低1M字节 : 0x2000 0000~0x200F FFFF0x2200 0000~0x23FF FFFC
外设的低1M字节 : 0x4000 0000~0x400F FFFF0x4200 0000~0x43FF FFFC

位带操作公式:

bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)1

例子:

0x22006008 = 0x22000000 + (0x300*32) + (2*4)/* 对0x22006008的读写就实现了对0x2000 0300处第2个bit的读写 *//* 同理,若要对0x40000000地址块进行位操作,需要把上面式子右边的0x22000000换成0x42000000 */123

以后我们想直接操作某个寄存器的某一位的时候,只需要找到这一位对应的别名地址,然后对别名地址进行读写即可实现对这一位的读写。如果想实现这中操作的话,只需要定义宏即可,例如下面的:

#define REGISTER_BIT_BAND(ofs, bit_num) (0x22000000 + (ofs << 5) + (bit_num << 2))
#define WRITE_R_BIT_BAND(ofs, bit_num, stat) (*((volatile unsigned int *)REGISTER_BIT_BAND(ofs, bit_num)) = stat)//上面两个宏可以实现对寄存器位带域的操作123

内核编程手册给出的M系列4GB内存分布 
内存组织

3、启动配置

启动方式

Boot mode selection pinsBoot modeAliasing
BOOT1BOOT0
x0Main Flash memoryMain Flash memory is selected as the boot space
01System memorySystem memory is selected as the boot space
11Embedded SRAMEmbedded SRAM is selected as the boot space

我的板子启动是在main flash memory,由前面的ARM编译工具一节可以知道代码从0x08000000开始运行,这个也是由分散加载文件指定的,也是板子上面main flash实际地址

物理地址重映射

  • 下面的内存空间可以被重映射:

- Main Flash memory- System memory- Embedded SRAM1 (112 KB)- FSMC bank 1 (NOR/PSRAM 1 and 2)1234

映射表为

内存映射表

映射到0x00000000地址处的内存块可以由SYSCFG控制器的(SYSCFG_MEMRMP)寄存器低二位决定,如下表所示

bit1bit0memory selected
00Main Flash memory mapped at 0x0000 0000
01System Flash memory mapped at 0x0000 0000
10FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x0000 0000
11Embedded SRAM (SRAM1) mapped at 0x0000 0000从表中

可以看出来从main flash启动的时候flash memory会被重新映射到0地址开始处,大小为1MB,但是我的板子依然是从0x08000000地址处运行代码的,现在由表中数据可以看出来从0地址开始运行也是可以的,可能是为了适应不同的启动方式,所以才从0x08000000地址处开始运行系统代码的。如果要从其他的地方运行flash memory中的代码,只需要在那种方式对应的被重映射到0地址空间代码段开头加上一个跳转语句,直接跳转到0x08000000地址处就可以运行代码了

4、嵌入式flash memory

接口特性:

  • Flash memory 读操作

  • Flash memory 编程/擦除操作

  • 读/写保护

  • 指令预取

  • I-Code上面有 64 个 128 位宽的快速存取线

  • I-Code上面有 8 个 128 位宽的快速存取线

内存接口图

flash memory特性:

  • 1M byte容量

  • 128位的读数据位宽

  • 支持 Byte, half-word, word and double word 写入

  • 支持扇区与块擦除

  • 支持内存组织 

    • – main memory 分为 4 个 16 Kbytes 大小扇区, 1 个 64 Kbytes 大小扇区,和 7 个 128 Kbytes 大小扇区

    • – 不同启动设备对应相应的system memory

    • – 512 OTP (一次性编程) bytes

    • – 可选配置读写保护

    • flash memory可以被组织成下面的样子: 

  • 低电量模式

内存分布图

内存分布图

额外补充时钟一节内容:

VOS 在 PWR_CR 寄存器的 bit15 位被设置

当 VOS = ‘0’, fHCLK 最大为 144 MHz. 
当 VOS = ‘1’, fHCLK 最大为 168 MHz.

等待周期

等待周期指的是CPU访问Flash的等待时间,CPU访问Flash的周期就是等待周期加上1,这个与Flash的硬件性能有关

CPU等待周期


关键字:STM32  内存分布  总线 引用地址:STM32之内存分布与总线

上一篇:STM32F4与STM32F1的区别
下一篇:STM32之Core Coupled Memory(CCM)内存

推荐阅读最新更新时间:2024-03-16 16:04

现场总线技术在电厂中的应用
    0 引言     按照国际电工委员会IEC/SC65C的定义,安装在制造或过程区域的现场设备与控制室内的自控装置之间的数字式、串行和多点通信的数据总线称为现场总线。以现场为基础形成的网络集成式全分布控制系统称为现场总线控制系统(FCS)。由于它适应了控制系统向分散化、网络化、智能化发展的方向,给自动化系统的最终用户带来了更大的实惠和方便。自其出现之日起就受到广泛关注,迅速成为世界范围内控制技术的热点,并促使目前生产的自动化仪表、PLC、DCS产品面临体系结构、功能等方面的重大改变,导致自动化产品又一次面临更新换代。自20世纪80年代中期提出现场总线概念以来,国外各大知名公司已相继开发了数十种现场总线产品,如FF、Pro
[嵌入式]
STM32外设寄存器地址定义
一直都是用STM32做项目中的主控芯片,在编程的时候,之前一直忽视了一个问题,那就是寄存器的位置是如何定义的,为什么用一个USART1- CR操作就能够给这个CR寄存器赋值?其实这是一个比较底层的问题,不懂这方面的知识也并不影响使用STM32,因为底层的定义工作,厂家一般都会做好,但是多了解一点原理性的东西,对自己还是很有帮助的。 这里我就以STM32F407的USART寄存器为例,介绍一下ST厂家是如何做寄存器定义的。 首先在stm32f4xx.h中 typedef struct { __IO uint16_t SR; /*! USART Status register, Address
[单片机]
现场总线控制系统在净水厂普通快滤池的应用
1  引言     70年代以前,控制系统中采用模拟量对传输及控制信号进行转换、传递,其精度差、受干扰信号影响大,因而整个控制系统的控制效果及系统稳定性都很差。70年代末,随着大规模集成电路的出现,微处理器技术得到很大发展。微处理器功能强、体积小、可靠性高、通过适当的接口电路用于控制系统,控制效果得到提高;但是尽管如此,还是属于集中式控制系统。随着过程控制技术、自动化仪表技术和计算机网络技术的成熟和发展,控制领域又发生了一次技术变革。这次变革使传统的控制系统(如集散控制系统)无论在结构上还是在性能上都发生了巨大的飞跃,这次变革的基础就是现场总线技术的产生。     现场总线是连接现场智能设备和自动化控制设备的双向串行、数字
[嵌入式]
stm32 总线矩阵介绍
主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连: ● 八条主控总线: — Cortex™-M4F 内核 I 总线、D 总线和 S 总线 — DMA1 存储器总线 — DMA2 存储器总线 — DMA2 外设总线 — 以太网 DMA 总线 — USB OTG HS DMA 总线 ● 七条被控总线: — 内部 Flash ICode 总线 — 内部 Flash DCode 总线 — 主要内部 SRAM1 (112 KB) — 辅助内部 SRAM2 (16 KB) — 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件) — AHB1 外设(包括 AHB-APB
[单片机]
ARINC429总线收发器芯片DEI1016的原理及应用
摘要:简要介绍了Device Engineering公司的DEI1016芯片的功能,详细说明了利用DEI1016芯片实现ARINC429协议数据通讯系统的设计方法,给出了比较具体的电路设计及软件解决方法。 关键词:ARINC429;差分输出;FIFO;可编程器件 1 概述 目前,ARINC429收发器主要以Device Engineering公司的DEI1016及BD429来配套使用。 其中DEI1016提供有标准航空串行数据和16bit宽数据总线接口。该接口电路包括一个单通道发送器、两个独立的接收通道和可选择操作方式的可编程控制器。 发送器电路包括一个发送缓存器和一个控制逻辑,发送缓存器是一个8%26;#215;32bit的FI
[半导体设计/制造]
stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断。 如果设计代码时不希望定时器配置完成后,立刻进入中断,可以在定时器配置完成后,立刻清除UIF标志位(TIMx- SR &= 0xFFFE) ,再使能定时器更新中断。比如用库函数这么写: TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能TIM4的更新中断 TIM_Cmd(TIM4, ENABLE); 但又发现个特别奇怪的问题,TIM_ClearITPen
[单片机]
STM32学习记录——开发环境的搭建
【1】所需工具 硬件: PC机(编程、编译程序、烧写程序) STM32开发板(STM32_MAX V2.0) USB线 (连接PC机与STN32开发板,供电和烧录程序用) 软件: STM32驱动程序(CP210x) 集成开发环境(MDK5) 烧录软件(FlyMcu) 【2】具体步骤 第一步:用USB线连接PC机与STM32开发板 第二步:安装驱动程序(驱动精灵自动安装亦可) 第三步:打开MDK,编写程序,编译生成 .hex文件 第四步:打开烧录软件,把.hex文件烧录至单片机即可。 烧录程序需要注意的地方 (由于STM32有三种启动模式:主闪存存储器、系统存储器、内置SRAM,所以烧录程序与正常运
[单片机]
STM32学习笔记之十六——题外话,自己做块工程板
一、我的学习计划将STM32单片机的硬件设计工作: 第一步 用STM32F103CBT6的48脚芯片,为光电平台的简单控制为目标,实现基本外围硬件、PWM、串口、I/O。将SPI、I2C留插针。 第二步 为集成传感器应用为目标,在第一步硬件基础上制作功能性的套版,两板连接实现AD、SPI、I2C、RTC等等功能。 二、硬件规划 选用STM32F103CBT6,面积7 7mm,128K flash,16K RAM,4个16bit PWM,12个12bit PWM或CAP,2个SPI,2个I2C,3个串口,1个CAN,1个USB,),12ADC。 管脚分配目标1如图,之后的功能包括:4个AD,3个串口(1个与I2C复用),1个S
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved