STM32入门系列-存储器与寄存器介绍
介绍两部分内容:
什么是存储器映射
什么是寄存器及寄存器映射
为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础。等明白了如何使用 C 语言封装底层寄存器,也就为后面学习库函数的开发做好了铺垫。
什么是存储器映射
程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。这就是我们曾提到过的被控总线的连接部分,而编程时就是操作这一块地方。存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。STM32F103ZET6 数据手册中存储器映射图如下所示。

从上图中可以看到 ARM 把这 4GB 的存储器空间平均分成了 8 块区域,每块区域的大小是 512MB,这个容量是非常大的,因此芯片厂商就在每块容量范围内设计各自特色的外设。但是每块区域容量占用越大,芯片成本就越高,所以说我们使用的 STM32 芯片都是只用了其中一部分。ARM 在对这 4GB 容
量分块的时候是按照其功能划分,每块都有它特殊的用途。
在这 8 个 Block 里面,要特别注意Block0、Block1 和 Block2 这 3 个块。因为其中包含了 STM32 芯片的内部 Flash、RAM 和片上外设。下面还是根据存储器映射图内信息来简单的介绍下这3个 Block 里面的具体区域功能划分。
Block0 内部区域功能划分
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:预留。
Block1 内部区域功能划分
Block1用于设计片内的SRAM, 例如STM32F103ZET6 的 SRAM是64KB。从存储器映射图中可以看到 Block1 内部又划分了几个功能块,我们按地址从低到高顺序依次介绍。
0x2000 0000-0x2000 FFFF:SRAM,容量为 64KB。
0x2001 0000-0x3FFF FFFF:预留。
Block2 内部区域功能划分
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 等的外部存储器。
什么是寄存器及寄存器映射
简单来说,通过给特定功能的内存单元起一个别名,此别名即所谓的寄存器。寄存器映射就是给(已分配好地址且有特定功能的)内存单元起别名的过程。

STM32入门系列-存储器与寄存器介绍的更多相关文章
- STM32入门系列-使用C语言封装寄存器
前面文章介绍了存储器映射.寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫.这里我们通过一个实例来对 C 语言封装寄存器进行介绍. 具体实例:控制 GPIOC 端口的第 0 管脚输出一 ...
- STM32入门系列-STM32时钟系统,时钟使能配置函数
之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...
- STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...
- STM32入门系列-库目录及文件介绍
已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...
- STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...
- STM32入门系列-介绍STM32型号与功用
作为STM32初学者,一般会选择购置一块开发板,因为在开发板上有很多已经集成好的模块,如红外模块.按键模块.LED模块.DAC模块.ADC模块.can模块.485模块.以太网模块.WiFi模块.蜂鸣器 ...
- STM32入门系列-GPIO概念介绍
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...
- STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...
- STM32入门系列-STM32外设地址映射
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...
随机推荐
- 转载:pycharm IDE 导入自定义模块
http://www.mamicode.com/info-detail-2241193.html
- 简单聊聊 Ironic
上一篇文章里我简单介绍了一下「裸金属」的概念,提到了 OpenStack 中的核心项目 Ironic,今天简单来聊聊它. Ironic 项目的吉祥物 Bare Metal 所以用 Bear 来做吉祥物 ...
- 万字长文 | 23 个问题 TCP 疑难杂症全解析
每个时代,都不会亏待会学习的人. 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题. TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 ...
- Go 分支流程
if/else 基本使用 if/else应该是每个编程语言中都具备的基本分支结构. 需要注意的是if||else与{要放在同一行上,否则会抛出异常. 另外,当多个else if出现时,不同分支只会执行 ...
- OpenCV图像处理学习笔记-Day4(完结)
OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...
- mysql-1-select
#进阶1:基础查询 /* 语法: SELECT 查询列表 FROM 表名; 特点: 1.查询列表可以是:表中字段.常量值.表达式.函数 2.查询的结果是一个虚拟的表格 */ USE myemploye ...
- python 报错 wxPyDeprecationWarning: Using deprecated class PySimpleApp.
如题:python 报错 提示为 : wxPyDeprecationWarning: Using deprecated class PySimpleApp. 解决:将 wx.PySimpleApp() ...
- shell脚本中,关于if,以及条件判断
#!/bin/sh SYSTEM=`uname -s` #获取操作系统类型 if [ $SYSTEM = "Linux" ] ; then #如果是linux的话打印linux字符 ...
- 多测师讲解自动化测试 _pybot.bat批处理脚本_高级讲师肖sir
- 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!
第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...