STM32的存储器与寄存器
1、存储器
存储器单元实际上是时序逻辑电路的一种。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM),两者的功能有较大的区别,因此在描述上也有所不同。
存储器是许多存储单元的集合,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似,故在VHDL语言中,通常由数组描述存储器。
2、存储器映射
程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。这就是我们曾提到过的被控总线的连接部分,而编程时就是操作这一块地方。存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。
程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。
可访问的存储器空间被分成8个主要块,每个块为512MB。其他所有没有分配给片上存储器和外设的存储器空间都是保留的地址空间,请参考相应器件的数据手册中的存储器映像图。
外设的地址映射
起始地址 |
外设 |
总线 |
寄存器映像 |
0x5000 0000 – 0x5003 FFFF |
USB OTG 全速 |
AHB |
|
0x4003 0000 – 0x4FFF FFFF |
保留 |
|
|
0x4002 8000 – 0x4002 9FFF |
以太网 |
|
|
0x4002 3400 - 0x4002 3FFF |
保留 |
AHB |
|
0x4002 3000 - 0x4002 33FF |
CRC |
|
|
0x4002 2000 - 0x4002 23FF |
闪存存储器接口 |
|
|
0x4002 1400 - 0x4002 1FFF |
保留 |
|
|
0x4002 1000 - 0x4002 13FF |
复位和时钟控制(RCC) |
|
|
0x4002 0800 - 0x4002 0FFF |
保留 |
|
|
0x4002 0400 - 0x4002 07FF |
DMA2 |
|
|
0x4002 0000 - 0x4002 03FF |
DMA1 |
|
|
0x4001 8400 - 0x4001 7FFF |
保留 |
|
|
0x4001 8000 - 0x4001 83FF |
SDIO |
|
|
0x4001 4000 - 0x4001 7FFF |
保留 |
APB2 |
|
0x4001 3C00 - 0x4001 3FFF |
ADC3 |
|
|
0x4001 3800 - 0x4001 3BFF |
USART1 |
|
|
0x4001 3400 - 0x4001 37FF |
TIM8定时器 |
|
|
0x4001 3000 - 0x4001 33FF |
SPI1 |
|
|
0x4001 2C00 - 0x4001 2FFF |
TIM1定时器 |
|
|
0x4001 2800 - 0x4001 2BFF |
ADC2 |
|
|
0x4001 2400 - 0x4001 27FF |
ADC1 |
|
|
0x4001 2000 - 0x4001 23FF |
GPIO端口G |
|
|
0x4001 2000 - 0x4001 23FF |
GPIO端口F |
|
|
0x4001 1800 - 0x4001 1BFF |
GPIO端口E |
|
|
0x4001 1400 - 0x4001 17FF |
GPIO端口D |
|
|
0x4001 1000 - 0x4001 13FF |
GPIO端口C |
|
|
0X4001 0C00 - 0x4001 0FFF |
GPIO端口B |
|
|
0x4001 0800 - 0x4001 0BFF |
GPIO端口A |
|
|
0x4001 0400 - 0x4001 07FF |
EXTI |
|
|
0x4001 0000 - 0x4001 03FF |
AFIO |
|
|
0x4000 7800 - 0x4000FFFF |
保留 |
APB1 |
|
0x4000 7400 - 0x4000 77FF |
DAC |
|
|
0x4000 7000 - 0x4000 73FF |
电源控制(PWR) |
|
|
0x4000 6C00 - 0x4000 6FFF |
后备寄存器(BKP) |
|
|
0x4000 6800 - 0x4000 6BFF |
bxCAN2 |
|
|
0x4000 6400 - 0x4000 67FF |
bxCAN1 |
|
|
0x4000 6000(1) - 0x4000 63FF |
USB/CAN共享的512字节SRAM |
|
|
0x4000 5C00 - 0x4000 5FFF |
USB全速设备寄存器 |
|
|
0x4000 5800 - 0x4000 5BFF |
I2C2 |
|
|
0x4000 5400 - 0x4000 57FF |
I2C1 |
|
|
0x4000 5000 - 0x4000 53FF |
UART5 |
|
|
0x4000 4C00 - 0x4000 4FFF |
UART4 |
|
|
0x4000 4800 - 0x4000 4BFF |
USART3 |
|
|
0x4000 4400 - 0x4000 47FF |
USART2 |
|
|
0x4000 4000 - 0x4000 3FFF |
保留 |
|
|
0x4000 3C00 - 0x4000 3FFF |
SPI3/I2S3 |
|
|
0x4000 3800 - 0x4000 3BFF |
SPI2/I2S3 |
|
|
0x4000 3400 - 0x4000 37FF |
保留 |
|
|
0x4000 3000 - 0x4000 33FF |
独立看门狗(IWDG) |
|
|
0x4000 2C00 - 0x4000 2FFF |
窗口看门狗(WWDG) |
|
|
0x4000 2800 - 0x4000 2BFF |
RTC |
|
|
0x4000 1800 - 0x4000 27FF |
保留 |
|
|
0x4000 1400 - 0x4000 17FF |
TIM7定时器 |
|
|
0x4000 1000 - 0x4000 13FF |
TIM6定时器 |
|
|
0x4000 0C00 - 0x4000 0FFF |
TIM5定时器 |
|
|
0x4000 0800 - 0x4000 0BFF |
TIM4定时器 |
|
|
0x4000 0400 - 0x4000 07FF |
TIM3定时器 |
|
|
0x4000 0000 - 0x4000 03FF |
TIM2定时器 |
|
STM存储器分为8个Block,在这 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 等的外部存储器。
3、寄存器
通过给特定功能的内存单元起一个别名,此别名即所谓的寄存器。寄存器映射就是给(已分配好地址且有特定功能的)内存单元起别名的过程。
STM32的存储器与寄存器相关推荐
- STM32(二)----寄存器讲解
寄存器讲解 原理讲解 芯片讲解 STM32F103芯片 存储器映射 寄存器映射 STM32的外设地址映射 操作实例 C语言对寄存器的封装 封装总线和外设基地址 封装寄存器列表 点亮LED灯 思路 程序 ...
- 96KB存储器的怎么算地址范围_STM32入门系列-存储器与寄存器介绍
我这有30套嵌入式创客开发板 需要的朋友加13260562029 介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来 ...
- stm32的存储器结构
https://blog.csdn.net/qq_33114231/article/details/78658465 首页 博客 学院 下载 图文课 论坛 APP CSDNCSDN学院 问答 商城 V ...
- 0基础自学stm32(野火)——什么是寄存器?
重点: 存储器映射 寄存器映射 首先学会分辨器件的1号引脚,注意是逆时针旋转. ##先搞清楚芯片内部结构 "AHB,是Advanced High performance Bus的缩写,高级高 ...
- 计算机存储器与寄存器的区别,存储器和寄存器区别
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 存储器和寄存器的区别是: 1.存储器功能:存放指令和数据,并能由中央处理器(CPU)直接随机存取. 2.寄存器功能:可将寄存器内的 ...
- 存储器和寄存器数据传输(ARMv8)
存储器和寄存器交互操作(ARMv8) 1.为什么需要存储器和寄存器交互操作? 编程语言中可能有数组和结构体这样复杂的数据结构.处理器只能保存少量数据到寄存器,但是可以存储器中放数十亿数据,因此数据结构 ...
- stm32 usart的BRR寄存器的配置,程序是CMSIS中的,分析它是怎么实现的?(自己设置好波特率,库文件会根据波特率计算BRR的值,和以前STM8不一样,需要自己根据波特率计算BRR值再设置)
stm32 usart的BRR寄存器的配置 stm32 专栏收录该内容 23 篇文章0 订阅 订阅专栏 程序是CMSIS中的,分析它是怎么实现的? 波特率由整数和分数两部分组成. RCC_GetClo ...
- STM32 GPIO的配置寄存器(CRL、CRH)输入输出模式配置
STM32 GPIO的配置寄存器(CRL.CRH)输入输出模式配置 1.学会使用寄存器设定所需IO的方向,学会配置CRL.CRH 2.理解如下代码的含义 //IO方向设置 #define DS18B2 ...
- 使用keil调试STM32,定时器的CNT寄存器数值在断点读取数值不准确问题
使用keil调试STM32,定时器的CNT寄存器数值在断点读取数值不准确问题 比如定时器更新中断,在中断服务程序打下断点后,程序没有执行.但是定时器的计数器一直在计数,并不会停止,同时调试器读取数值需 ...
- STM32 BSRR BRR ODR 寄存器解析(F4系列已经去掉BRR寄存器了)
STM32 BSRR BRR ODR 寄存器解析(F4系列已经去掉BRR寄存器了) 一.用法 二.解释 三.BSRR.BRR. ODR 之间的关系 G0x0系列GPIO寄存器 F4系列GPIO寄存器( ...
最新文章
- Python中使用中文正则表达式匹配指定的中文字符串
- 不是吧!程序员今年在相亲市场上这么受欢迎?
- 浅述Oracle分布式事务概念
- 对接接口文档_接口自动化测试框架设计思路
- 第一周 01-复杂度2 Maximum Subsequence Sum
- php+nginx导入太大文件报http error错误的原因
- 各大厂面试高频的面试题新鲜出炉,你能答上几道?
- python如何下载库_python中如何下载库
- PHP 连接MySQL数据库
- 炖锅的蒸煮鸿蒙煮排骨煮多久能熟,蒸排骨要多长时间会熟?在家高压锅蒸排骨要多久才好...
- gRPC调试, 用 Apipost
- 地理空间数据云下载的dem数据(xxxdem.tif格式)中的栅格大小从度(0.000002)改成米(30)
- 设计原则-依赖倒置原则
- RocketMq之削峰
- 算法提高 盾神与砝码称重
- SQL Server SA权限总结
- 【Excel】巧用数组——多项目跨越多个调整期的利息计算器
- 【力扣每日一题】804. 唯一摩尔斯密码词
- 时间格式转换 Mon Aug 17 2020 16:29:29 GMT+0800 (中国标准时间)
- 追风筝的人 第十章
热门文章
- c++initgraph函数_二次函数图像绕其顶点旋转180°后所得图像的解析式
- 计算机提示资源管理器停止,电脑重复弹出“windows资源管理器已停止工作”怎么处理...
- 苹果奖学金获得者:我的自学 iOS 开发历程
- 如何进行网站流量分析?你需要知道这些指标
- html5分镜头脚本范例,(最新整理)分镜头脚本范本
- 北漂真的是你的归宿吗?
- 使用MOno Cecil 的相关开源项目
- 经典解析23 种设计模式
- matlab仿真平台式惯导
- p106矿渣做深度学习踩过的那些坑