首页 理论教育 STM32固件库编程:存储器映射及地址分配

STM32固件库编程:存储器映射及地址分配

时间:2023-10-21 理论教育 版权反馈
【摘要】:给存储器分配地址的过程,称为存储器映射。这些存储器与外设的功能部件共同排列在一个4GB的地址空间内。图0-9STM32F4的寄存器映射分布这里简要地把8个块映射的内容列成表0-3。表0-34GB地址空间映射内容及范围Block0。Block0主要用于设计片内的Flash存储程序代码,相当于单片机的ROM、计算机的硬盘。Block3/Block4/Block5用于AHB3,不属于片上外设,AHB3包含的3个Block用于扩展外部存储器,如SRAM、NOR Flash和NAND Flash等。

STM32固件库编程:存储器映射及地址分配

计算机对所有设备的管理都是通过地址进行操作的。每个设备都具有自己唯一的地址,但每一个设备只是一个元件,本身不具备地址信息,它们的地址由芯片厂商分配。给存储器分配地址的过程,称为存储器映射。

如图0-9所示,被控总线连接的是Flash、RAM和片上外设。这些存储器与外设的功能部件共同排列在一个4GB的地址空间内。如何分配这些设备与4GB的地址空间呢?在这4GB的地址空间中,ARM已经粗略地平均分成了8个块,每个块为512MB,每个块也都规定了用途,如图0-9所示。当然,并不是所有地址都会用完,那些未分配给片上存储器和外设的所有存储区域均被视为“预留区”。

图0-9 STM32F4的寄存器映射分布

这里简要地把8个块映射的内容列成表0-3。在这8个块里面有3个块是最重要的:Block0用来设计成映射内部Flash;Block1用来设计成映射内部SRAM;Block2用来设计成映射片上外设。这3个块正好是存储设备与片上外设的地址,是用户编写程序的核心部分。

表0-3 4GB地址空间映射内容及范围

(1)Block0。Block0主要用于设计片内的Flash存储程序代码,相当于单片机的ROM、计算机的硬盘。F4系列片内Flash最大的是1MB,STM32F407ZGT内置的Flash也是1MB。受成本限制,这个级别的处理器不会内置很大容量的Flash,而这个块有512MB容量的地址,因此很多地址都是预留的,其分布如表0-4所示。0x0800 0000~0x080F FFFF是STM32F407ZGT内置Flash所使用的地址范围,正好是1MB。这段地址是程序下载所存放的位置。

表0-4 Block0的地址分布

(2)Block1。Block1用于设计片内的SRAM,相当于计算机的内存。F407内部SRAM的大小为128KB,其中SRAM1为112KB,SRAM2为16KB。Block1的地址分布具体见表0-5。

表0-5 Block1的地址分布(www.xing528.com)

(3)Block2。Block2用于片上的外设。根据外设的总线速度不同,Block2被分成了APB和AHB两部分,其中APB又被分为APB1和APB2,AHB又被分为AHB1和AHB2,具体见表0-6。另外,AHB还包含一个AHB3。Block3/Block4/Block5用于AHB3,不属于片上外设,AHB3包含的3个Block用于扩展外部存储器,如SRAM、NOR Flash和NAND Flash等。

表0-6 Block2的地址分布

很多读者对AHB与APB的概念很模糊,因此这里对它们再作一些说明。

AHB(Advanced High Performance Bus,高级高性能总线)可以认为是一种“系统总线”,主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。

APB(Advanced Peripheral Bus)是一种外围总线,主要用于低带宽的周边外设之间的连接,如UART、SPI等外设接口。APB总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB桥。APB桥再往下,APB2负责A/D、I/O、高级TIM、串口1,APB1负责D/A、USB、SPI、I2C、CAN、串口2345、普通TIM。

有了寄存器映射,所有的设备都有唯一的地址与之对应。要操作这些设备,只需访问其地址即可。在访问地址时,有一个技巧是记住基地址,使用相对设备的偏移量进行访问,对总线亦是如此。表0-7是从APB1开始的基地址与其他总线偏移地址的对应关系。

表0-7 总线基地址

C语言指针很容易通过基地址+偏移量这样的计算进行组织运算,从而可以有效地进行访问。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈