zoukankan      html  css  js  c++  java
  • STM32存储:转自网络

    http://blog.sina.com.cn/s/blog_6a31d1060100ua9v.html

    1 STM32系统结构

    要想深刻理解STM32的存储器,需要首先知道STM32的系统结构。

    如Figure 1,是STM32系统结构框图。

     

     

    根据STM32 Reference manual (RM0008)中的描述,如图:

     

    可以得知STM32系统结构的组成,每一个模块更为详细的内容,请参考相关文档。

    RM0008文档中可以看出,STM32采用的是Cortex-M3内核,因此,有必要了解Cortex-M3的存储器结构。

    图中还可以看出,Cortex-M3是通过各个总线和Flash、SROM相连接的。

    2 STM32内核(Cortex-M3)的结构

    以下是Cortex-M3模块框图:

     

    该Cortex-M3内核通过I-Code、D-Code、System总线与STM32内部的Flash、SROM相连接的,该种连接情况直接关系到STM32存储器的结构组织;也就是说,Cortex-M3的存储器结构决定了STM32的存储器结构。

    这里可能说的比较笼统,可以这样理解:Cortex-M3是一个内核,自身定义了一个存储器结构,ST公司按照Cortex-M3的这个存储器定义,设计出了自己的存储器结构;但是ST公司的STM32的存储器结构必须按照Cortex-M3这个定义的存储器结构来进行设计。

    举个例子:

    我买了一个做饭的调料盒子,有三块区域(假设存储器分为3块),上面分别标有盐(Flash)、糖(SROM)、味精(Peripheral);此时,该调料盒子并没有任何意义(对应Cortex-M3内核);我按照标签放入特定品牌、特定分量的盐(Flash)、糖(SROM)、味精(Peripheral),产生一个有实际意义的调料盒(各类Cortex-M3内核的芯片,如STM32)。

    期间,调料位置不能放错,但可以不放。由上面的例子可以看出,空的调料盒子决定了有意义的调料盒子存放调料的结构。因此,只要了解空盒子的存储结构,就可以很清楚的明白当有调料时的用法了。

    3 STM32内核(Cortex-M3)的存储器映射

    存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。

    如图,是Cortex-M3存储器映射结构图。

     

    Cortex-M3是32位的内核,因此其PC指针可以指向2^32=4G的地址空间,也就是0x0000_0000——0xFFFF_FFFF这一大块空间。

    好,根据图中描述,Cortex-M3内核将0x0000_0000——0xFFFF_FFFF这块4G大小的空间分成8大块:代码、SRAM、外设、外部RAM、外部设备、专用外设总线-内部、专用外设总线-外部、特定厂商等。导致了,使用该内核的芯片厂家必须按照这个进行各自芯片的存储器结构设计。

    这就可以去了解STM32的存储器结构,以及为什么这样设计STM32存储器的结构了。

    4 STM32存储器结构

    首先,我们对比一下Cortex-M3存储器结构和STM32存储器结构:

     

    图中可以很清晰的看到,STM32的存储器结构和Cortex-M3的很相似,不同的是,STM32加入了很多实际的东西,如:Flash、SRAM等。只有加入了这些东西,才能成为一个拥有实际意义的、可以工作的处理芯片——STM32。

    STM32的存储器地址空间被划分为大小相等的8块区域,每块区域大小为512MB。

    对STM32存储器知识的掌握,实际上就是对Flash和SRAM这两个区域知识的掌握。因此,下面将重点描述Flash和SRAM的知识。

    5 STM32的SRAM

    以下是STM32参考手册RM0008中的一段原话:

    不同类型的STM32单片机的SRAM大小是不一样的,但是他们的起始地址都是0x2000 0000,终止地址都是0x2000 0000+其固定的容量大小。

    SRAM的理解比较简单,其作用是用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,SRAM中存储的数据就会丢失。

    6 STM32的Flash

    STM32的Flash,严格说,应该是Flash模块。

    该Flash模块包括:Flash主存储区(Main memory)、Flash信息区(Information block),以及Flash存储接口寄存器区(Flash memory interface)。

    三个组成部分分别在0x0000 0000——0xFFFF FFFF不同的区域,如图(小密度的STM32)所示:

    图中完全可以看出Flash模块中的三个组成部分在整个存储器中的位置。

    具体的内部区域的意义及功能请参见编程手册PM0042,里面很详细。

    7 STM32存储器结构总结

    图中淡蓝色就是你需要知道的。

    Peripherals:外设的存储器映射,对该区域操作,就是对相应的外设进行操作;

    SRAM:运行时临时存放代码的地方;

    Flash:存放代码的地方;

    System Memory:STM32出厂时自带的你只能使用,不能写或擦除;

    Option Bytes:可以按照用户的需要进行配置(如配置看门狗为硬件实现还是软件实现);

    今后,你的编写代码、程序运行、寄存器设置、ICP、IAP都依靠这些东西。

    以上描述的是STM32存储器的结构相关,其具体存储器的应用在我的下一篇笔记《STM32存储器知识的相关应用(IAP和Bit Banding)》中详细描述。

    至此,关于《STM32存储器》知识已经结束.

  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/wwjdwy/p/3086110.html
Copyright © 2011-2022 走看看