|
Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不超过抽屉的大小),由每个芯片厂商自己决定。 7 o! x M; h. X7 m! l5 W' K
图1 cortex m3存储器映射8 j) b( }# I7 V6 d4 a 我们来看看ST公司打造的STM32F1系列芯片是如何在这些抽屉放置东西的。6 p9 d: m3 @- ?7 r" H- v ; ~; G5 s" d- P4 D 代码抽屉 在代码这个抽屉,STM32F1布置了Flash模块,用来存储代码,相当于电脑的硬盘,具体展开如下图所示。主存储器(图中Flash区)起始起止为0x0800 0000,终止地址依Flash大小而定,图中0x0807 FFFF为512k的终止地址。然后经过一段保留区,从0x1FFFF000 – 0x1FFF F7FF为系统存储器,是不可擦除的ROM区,存储ISP程序,最后option bytes这个区域是16个字节,是控制flash区域的寄存器。有同学说我漏了一块,对,从0x0000 0000的这块是我要着重讲解的一块。( A! y* I# m: S8 K 3 ]& C# x+ w' }6 f1 |: `/ R
图2 STM32F1代码区抽屉 1 a5 e* ~0 ~ L9 b 在讲这块之前,首先要讲一下STM32F1的三种启动模式,如下图所示。 1).主闪存存储器启动:从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 2).系统存储器启动:从系统存储器启动(0x1FFFF000 – 0x1FFF F7FF),这种模式启动的程序功能是由厂家设置的。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件,可以通过这个ISP程序将用户程序下载到系统的Flash中。 3).片上SRAM启动:从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。 下面讲解Boot MemorySpace(Aliased to Flash or systen memory depending onBOOT pins)。其实这块空间是预留的,不存数据,或者它压根不存在。在不同的启动方式下,这块区域会被映射到其他区域: 7 s: Z$ q+ O+ g9 d& \ 1).从Main Flash 启动:Boot Space 是Main Flash 的别名。以0x08000000 对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x08000000 操作,且都是操作的同一块内存, }* [6 S3 x2 s, @+ R+ b+ A 3 e* c0 D! p! s! L$ ^% e+ q 2).从System Memory启动:Boot Space 是System Memory的别名。以0x1FFFFFF0对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x1FFFFFF0操作,且都是操作的同一块内存 3).从SRAM 启动:SRAM 只能通过0x20000000进行操作,与上述两者不同。从SRAM 启动时,需要在应用程序初始化代码中重新设置向量表的位置。
图3 STM32F1三种启动模式 5 Z+ f( n6 i t, N 片上SRAM抽屉 在SRAM这个抽屉,STM32F1布置了SRAM,相当于电脑的内存,具体展开如下图所示。& r" |# Z8 M# c" L3 s0 P
图4 STM32F1片上SRAM抽屉 ' ?" t7 C0 G' f) O N; e 在这个抽屉中,STM32F1只放了64K的SRAM存储空间,其余的空间保留(空着)。这里需要说明一下,虽然其余那些空间被保留,没有存储器与之对应,但是位带别名区的地址仍然可以操作来改变64K地址中的对应位。; R: h& @% n4 s6 h 片上外设抽屉" W4 k( x' V0 n1 h$ k; @ I 在这个抽屉中,放置了STM32F1的外设,包括GPIO、UART、ADC等所有外设的控制、状态、数据寄存器都在这个抽屉中。当然,抽屉很大肯定装不满,装不满的空间就预留着。 + z% `/ a' n; o4 @5 s
图5 STM32F1片上外设抽屉: j3 d8 V, _$ T l # V& _- Z9 z- S- e" [6 u O+ h1 u 0 f: |& b" l* F* C! F, [6 J 片外RAM抽屉 在这个抽屉中,我们可以自己扩展内存,但必须在STM32的FSMC控制器下进行,这个控制器的作用就是将内部AHB总线和外部扩展内存的总线进行转化,利用这个控制器,我们可以很方便的控制LCD,这里就不展开了。这1G的抽屉可以放下图的东西。这片空间STM32并没有放东西,STM2指定我们可以在其中扩展内存NOR/PSRAM1、NOR/PSRAM2……并接受FSMC控制器的控制。7 h* I& ~6 F! s0 b* @: B5 [
, F, N* A" q( L, \7 q( p 图6 STM32F1片外RAM抽屉& r9 q g8 ~2 R& u3 H 片外外设抽屉) s% }' Y. S! i& K$ m- J: [! q 在这个抽屉中,STM32F1放置了FSMC控制器的一些寄存器,就是在这些寄存器的配合下,FSMC控制器得以有效控制片外RAM进行读写操作。* F. J0 J+ K7 U" v0 [ ' o) E) B3 b. R+ i$ M
图7 STM32F1片外外设抽屉$ h1 o: J, ~3 X: O9 y. C$ @% z3 `& T' X4 x 5 i) \0 Z- }- F/ V9 v 其余的抽屉,STM32F1就没动过了。最后,stm32f1的存储器完整映射如下图所示,大家可以和图1对比了解这个过程。0 S: K9 }$ ^" T" n 5 x$ C. H4 F; d6 k3 ~4 R9 U
图8 STM32F1存储器映射 ————————————————' K7 S* w* _+ q n; H 版权声明:fantastikman 如有侵权请联系删除0 O! K' c: l7 ~ R( K0 s- {" y' N, A |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版