介绍两部分内容:

  • 什么是存储器映射

  • 什么是寄存器及寄存器映射

为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 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入门系列-存储器与寄存器介绍的更多相关文章

  1. STM32入门系列-使用C语言封装寄存器

    前面文章介绍了存储器映射.寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫.这里我们通过一个实例来对 C 语言封装寄存器进行介绍. 具体实例:控制 GPIOC 端口的第 0 管脚输出一 ...

  2. STM32入门系列-STM32时钟系统,时钟使能配置函数

    之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...

  3. STM32入门系列-启动文件介绍

    在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...

  4. STM32入门系列-库目录及文件介绍

    已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...

  5. STM32入门系列-创建寄存器模板

    介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...

  6. STM32入门系列-介绍STM32型号与功用

    作为STM32初学者,一般会选择购置一块开发板,因为在开发板上有很多已经集成好的模块,如红外模块.按键模块.LED模块.DAC模块.ADC模块.can模块.485模块.以太网模块.WiFi模块.蜂鸣器 ...

  7. STM32入门系列-GPIO概念介绍

    GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...

  8. STM32入门系列-学习STM32要掌握的内容

    STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...

  9. STM32入门系列-STM32外设地址映射

    片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...

随机推荐

  1. 吴恩达Machine Learning学习笔记(四)--BP神经网络

    解决复杂非线性问题 BP神经网络 模型表示 theta->weights sigmoid->activation function input_layer->hidden_layer ...

  2. 全世界最强的算法平台codeforces究竟有什么魅力?

    大家好,之前说过由于和LeetCode结了梁子,所以周末的LeetCode专题取消了,给大家写点其他专题的算法问题.目前选择的是国外著名的编程竞赛平台--codeforces.它在竞赛圈名气比较大,对 ...

  3. 优雅的在React组件中注册事件

    前言 在React的开发中,我们经常需要在 window 上注册一些事件, 比如按下 Esc 关闭弹窗, 按上下键选中列表内容等等.比较常见的操作是在组件 mount 的时候去 window 上监听一 ...

  4. 第一次面试linux后台岗位

    今天给大家分享前段时间面试linux后台的面试题目,我从里面挑了几道大家比较陌生的题目,而且要那种手写代码的题目,这方面肯定很多人在实际面试时最怕的题目! 1.请说出如何用tcp服务实现文件的断点续传 ...

  5. SpringCache整合Redis

    之前一篇文章 SpringBoot整合Redis 已经介绍了在SpringBoot中使用redisTemplate手动 操作redis数据库的方法了.其实这个时候我们就已经可以拿redis来做项目了, ...

  6. 手把手教你使用 Prometheus 监控 JVM

    概述 当你的 Java 业务容器化上 K8S 后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控 ...

  7. 多测师讲解selenium _滚动条定位_高级讲师肖sir

    from selenium import webdriverfrom time import sleepdrvier=webdriver.Chrome()drvier.get('http://www. ...

  8. 多测师讲解html _有序列表005_高级讲师肖sir

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>有 ...

  9. IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统

    先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...

  10. pytest文档47-allure报告添加用例失败截图

    前言 使用 selenium 做 web 自动化的时候,很多小伙伴希望用例失败的时候能截图,把异常截图展示到allure报告里面. pytest 有个很好的钩子函数 pytest_runtest_ma ...