请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32入门系列-存储器与寄存器介绍

[复制链接]
STMCU小助手 发布时间:2022-7-2 14:00
    介绍两部分内容:
  • 什么是存储器映射
  • 什么是寄存器及寄存器映射

    , B, I5 n: b5 t
    为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础。等明白了如何使用 C 语言封装底层寄存器,也就为后面学习库函数的开发做好了铺垫。
4 F/ e, A. b8 Y/ }
什么是存储器映射
    程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。这就是我们曾提到过的被控总线的连接部分,而编程时就是操作这一块地方。存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。                  STM32F103ZET6 数据手册中存储器映射图如下所示。
* y" F, `+ T2 X4 T1 J1 h2 G" D  z
}1CK8SN3L2@AOFDS9@S6T~F.png
9 W& C" g/ o9 u
    从上图中可以看到 ARM 把这 4GB 的存储器空间平均分成了 8 块区域,每块区域的大小是 512MB,这个容量是非常大的,因此芯片厂商就在每块容量范围内设计各自特色的外设。但是每块区域容量占用越大,芯片成本就越高,所以说我们使用的 STM32 芯片都是只用了其中一部分。ARM 在对这 4GB 容
量分块的时候是按照其功能划分,每块都有它特殊的用途。
    在这 8 个 Block 里面,要特别注意Block0、Block1 和 Block2 这 3 个块。因为其中包含了 STM32 芯片的内部 Flash、RAM 和片上外设。下面还是根据存储器映射图内信息来简单的介绍下这3个 Block 里面的具体区域功能划分。
' a9 ~, I# ?4 @& L( ^4 ~
  • Block0 内部区域功能划分

    9 S7 T5 K% u% g/ N: x" d
    Block0 主要用于设计片内的 FLASH, STM32F103 系列芯片内部 FLASH 最大是 512KB,我们使用的 STM32F103ZET6 的 FLASH 是 512KB。要在芯片内部集成更大的 FLASH 或者 SRAM 都意味着芯片成本的增加,所以往往片内集成的FLASH 都不会太大。512KB 的 FLASH 已经足够我们一般的应用开发。从图中可以看到 Block0 内部又划分了好多个功能块,我们按地址从低到高顺序依次介绍。
    0x0000 0000-0x0007 FFFF:取决于 BOOT 引脚,为 FLASH、系统存储器、SRAM 的别名。
    0x0008 0000-0x07FF FFFF:预留。
    0x0800 0000-0x0807 FFFF:片内 FLASH,我们编写的程序就放在这一区域
    0x0808 0000-0x1FFF EFFF:预留。
    0x1FFF F000-0x1FFF F7FF:系统存储器,里面存放的是 ST 出厂时烧写好的isp 自举程序,用户无法改动。使用串口下载的时候需要用到这部分程序。
    0x1FFF F800-0x1FFF F80F:选 项 字 节 ,用 于 配 置 读 写 保 护 、BOR 级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。当芯片不小心被锁住之后,我们可以从 RAM 里面启动来修改这部分相应的寄存器位。
    0x1FFF F810-0x1FFF FFFF:预留。
$ \" q- g. G/ G5 {
  • Block1 内部区域功能划分

    " k( d- J% M" J! P
    Block1用于设计片内的SRAM, 例如STM32F103ZET6 的 SRAM是64KB。从存储器映射图中可以看到 Block1 内部又划分了几个功能块,我们按地址从低到高顺序依次介绍。
    0x2000 0000-0x2000 FFFF:SRAM,容量为 64KB。
    0x2001 0000-0x3FFF FFFF:预留。

3 S9 h  \% q( d- V( `* \8 E
  • Block2 内部区域功能划分  o2 E! C( E' A" c* a4 M
    " j$ D' E3 U: {" ?8 W
    Block2 用于设计片内外设, 根据外设总线速度的不同, Block2 被划分为 AHB和 APB 两部分, APB 又被分成 APB1 和 APB2 总线。 这些都可以在上面存储器映射图中可看到。下面我们按地址从低到高顺序依次介绍。
    0x4000 0000-0x4000 77FF:APB1 总线外设。
    0x4000 7800-0x4000 FFFF:预留。
    0x4001 0000-0x4001 3FFF:APB2 总线外设。
    0x4001 4000-0x4001 7FFF:预留。
    0x4001 8000-0x4002 33FF:AHB 总线外设。
    0x4002 4400-0x5FFF FFFF:预留。
    在Block3、Block4、Block5中包含了FSMC扩展区域,可用于扩展如 SRAM,NORFLASH 和 NANDFLASH 等的外部存储器。
6 C. r. d1 C+ l* H% v4 g
什么是寄存器及寄存器映射! e( |7 G+ Z, [7 r" t# l
    简单来说,通过给特定功能的内存单元起一个别名,此别名即所谓的寄存器。寄存器映射就是给(已分配好地址且有特定功能的)内存单元起别名的过程。
/ E- C+ m6 v1 ~8 T1 A
收藏 评论0 发布时间:2022-7-2 14:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版