STM32存储器映射

文章目录

  • 前言
    • 本章详细介绍STM32存储器映射以及寄存器操作
  • 一、前言
  • 二、存储器映射
    • 1.分区介绍
  • 三、寄存器映射
    • 1.对寄存器进行操作
      • 1)方法一
      • 2)方法二
  • 四、STM32存储空间
  • 五、存储器的重映射
  • 总结
  • 六、参考资料

前言

本章详细介绍STM32存储器映射以及寄存器操作

一、前言

在数学里,映射指两个元素的集之间元素相互“对应”的关系,为名词。

STM32存储器映射
STM32F40X存储器映射图
STM32存储器映射
STM32存储器映射
例如:GPIOB的端口数据寄存器IDR的地址是0x40010C0C,并且IDR寄存器是32位的。那么我们可以用如下代码对寄存器进行操作:

2)方法二

在计算机中,一个字节(Byte)就有一个地址,一个字节有八个位(bit)。
也就是说0x4001 0C0C这个地址在存储器中,其实只是一个字节的地址。计算机能向四个字节写数据,是因为强制类型转换成了 unsigned int ,而 unsigned int 就是四个字节,0x4001 0C0C是只是这四个字节的首地址。
计算机知道首地址,然后知道要写几个字节,就能向4个字节里面写数据了,也就是写32位的数据。这其实就是数据类型的含义,即这种数据类型占用几个字节。
定义GPIO外设结构体,因为结构体成员在内存中是连续的,这种形式与寄存器组非常类似,所以用结构体能够很好的管理寄存器:

定义GPIOA结构体指针,因为单单定义GPIO外设结构体,并不能确定其内存地址,因此用指针将其绑定到GPIOA外设基地址:

四、STM32存储空间

芯片能访问的存储空间有多大,是由芯片内CPU的地址总线的数量决来定的,STM32芯片内部的地址总线为32根。
1根地址线:可以传输的地址为0和1的,那么理论上就可以访问2个字节。
2根地址线:可以传输地址为00、01、10、11,理论上可以访问4个字节。
3根地址线:可以传输的地址为000、001、010、011、100、101、110、111,理论上可以访问8个字节。
32根地址线:可以产生00000000 00000000 00000000 00000000 — 11111111 11111111 11111111 11111111的2^32个地址,范围刚好为4G
STM32的32根地址线,理论上可以访问4G字节的存储器空间。
STM32地址是从0x00000000到0xFFFFFFFF,这就是4GB的存储空间。
但是STM32真的有4GB的存储空间吗案当然不是,我们的PC电脑也才4GB的内存。一个小小的单片机怎么可能有4GB的存储空间!这个4GB的是STM32理论分配的地址空间。也就是说实际上并不是有这么大的存储单元。其中有很多预留的地址,这些地址并没有给他分配存储单元。
所有的存储器都是与地址线连着的,但是实际上如果你只接了一个10M的存储器,而且是从0地址开始映射的,那么32根地址线所产生的0~10M的地址信号其实才是有意义的,因为这些地址信号才有对应真实的存储器,而所产生的10M以上地址信号其实并无意义,因为并不对应真实的存储器。
举个例子,李云龙建立了三个营,只有三营是全员满编制的,一营和二营只有番号,人员待补充。所以一营二营是不能用的。
STM32中的32是32根地址线的意思吗br> 答:不是,STM32的32不是32根地址线的意思,而是表示MCU芯片内部CPU在处理数据时,每次可以处理的数据位宽为32个bit。正是由于这个原因,STM32内部的寄存器大小都是32位的,刚好等于位宽。
某个芯片是32位的,但是它的地址线完全可以只有16根、或者8根,对于STM32来说,刚好碰巧的是,CPU能够处理的数据位宽与地址线数量恰好都是32。

五、存储器的重映射

通常系统启动都是从0地址处开始,但是为了支持不同的存储介质,不同的存储介质被分配了一个非0地址区域。这就是为什么要进行重映射。
因此重映射主要发生在两种情况下,一是系统启动的过程中;二是如果中途遇到需要在不同的存储器之间进行切换的时候也需要进行重映射
我们一般的单片机自举(启动)单片机地址,都是从0开始运行的,STM32启动需要重映射地址,F4xx的0X0000 0000~0x001F FFFF地址映射了到什么存储器上,那么就从该存储器上读取指令,开始运行。
自举(bootstrap)计算机设备使用硬件加载的程序,用于初始化足够的软件来查找并加载功能完整的操作系统。也用来描述加载自举程序的过程。什么是单片机的自举,单片机的自举就是单片机的启动。
至于说0x00000000-0x001FFFFF到底映射在了什么存储器上,这个要看芯片BOOT1、BOOT0这两个引脚的电平值,说白了就是,通过BOOT1和BOOT0引脚的电平值,可以选择将0x00000000-0x001FFFFF映射到不同的存储器上。
STM32片内的FLASH分成两部分:主存储块、信息块。主存储块(主Flash)用于存储程序,我们写的程序一般存储在这里。信息块又分成两部分:系统存储器(系统FLASH)、选项字节。系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。选项字节存储芯片的配置信息及对主存储块的保护信息。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了STM 32的存储器映射,而STM 32还有更多的内容等待大家探索

六、参考资料

版权声明:本文参考了其他CSDN博主的文章,遵循CC 4.0 BY-SA版权协议,现附上原文出处链接及本声明。

  1. 一、 STM32 学习记录四:存储器寄存器映射
    原文链接:https://blog.csdn.net/wangyanan52121/article/details/126519524
  2. 二、 STM32的存储器映射中的指针操作
    原文链接:https://blog.csdn.net/C1664510416/article/details/127063065
  3. 三、 stm32单片机基础知识总结(四)——存储器映射
    原文链接:https://blog.csdn.net/weixin_42506096/article/details/123625114
  4. 四、 STM32学习笔记(2):存储器映射和存储器重映射(Memory Map and Memory Remap)
    原文链接:https://blog.csdn.net/Cacti_one/article/details/70157261
  5. 五、 STM32F103的存储器映射&寄存器映射
    原文链接:https://blog.csdn.net/sinat_37826100/article/details/115443141

来源:刘卜卜&嵌入式

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月4日
下一篇 2022年10月4日

相关推荐