STM32芯片存储器映射概述

发布者:Lihua521最新更新时间:2024-09-27 来源: elecfans关键字:STM32芯片  存储器映射  系统架构 手机看文章 扫描二维码
随时随地手机看文章

STM32系统构架

当你拿到一款芯片后,怎样可以快速了解到它具有哪些功能?了解单片机的系统架构是使用款芯片的基础,这些信息在芯片手册上都会有详细的说明,并且它们会被安排在最前面的章节,目的就是让用户最开始就能够关注到该款芯片具有哪些功能,特点。

图片

STM32F103系统结构

从上图我们可以了解到STM32F103系列的主要系统组成单元:

  1. CPU核:使用ARM Cortex-M3内核;

  2. 存储器:

  • STM32F103系列微控制器采用经典的哈佛架构,程序存储和数据存储采用独立的存储器空间;

  • ICode:指令代码,Flash存储器用于存储程序;

  • DCode:数据代码,SRAM用于存储数据;

  1. 外设:

  • GPIO;

  • 定时器;

  • ADC;

  • 通信接口:SPI、I2C、USART;

  • 其他接口:USB、CAN、RTC、DMA、SDIO、FSMC等;

  1. 总线架构:

  • AHB总线:高速总线,连接核心与部分外设。

  • APB1/APB2总线:连接外设,时钟较AHB低。

芯片存储器映射

从上面的系统结构图中我们很容易就能看出内核与存储单元的关系,但更多的细节芯片手册上并没有给出。对于51系列单片机单片机,因为其内核和存储单元都比较简单管理起来也非常容易,但STM32芯片内部复杂程度都比51高几个数量级,所以需要对存储单元有特定的划分管理,把它称为存储器映射,这些知识在51单片机中是不会涉及的,这一部分内容在ARM公司的内核手册上才会有详细的讲解。我们都知道了STM32F103系列单片机采用的是的ARM Cortex-M3内核,所以要了解这部分知识需要查看Cortex-M3内核资料。

图片上图是Cortex-M3内核资料中对给内核芯片预定义的存储器映射说明,接下来我们通过STM32F103系列单片机来逐步学习。

STM32单片机存储器映射

STM32单片机存储空间包含了用于程序代码和数据存储的系统存储器区域,以及用于外设控制的外设寄存器区域。为了能够直观而有效地操作这些内存资源,STM32采用存储器映射的方式进行内存管理。什么是存储器映射?其基本思想是将不同的内存区域按逻辑功能映射到单片机的线性地址空间,从而实现通过访问地址来操作存储单元的目的。

要高效地使用STM32单片机,正确理解和使用其存储器映射方式是必要的。以下详细介绍STM32内存映射的组成结构、典型布局以及编程方法,帮助初学者建立对存储器映射的整体认知,为后续STM32编程开发奠定基础。

STM32存储器映射概述

STM32单片机的内存映射可以分为两大部分:系统存储器映射区域和外设寄存器映射区域。

系统存储器区域主要包括:

  1. SRAM:用于存放数据,包括全局变量、堆栈等

  2. Flash:用于存放程序代码

外设寄存器区域则映射了各外设控制需要的寄存器,通过访问这些寄存器可以配置外设工作模式或者获取其工作状态。

整个内存映射采用线性连续的地址从低向高排布,从0x00000000开始,每个内存区按照功能和大小顺序映射。STM32内存空间的总大小依型号不同有所区别,较大的可以达到GB级别。

典型存储器映射布局

下面我们以STM32F103系列为例,介绍其典型的存储器映射布局。

  1. Flash memory: 0x08000000 ~ 0x0807FFFF (512KB)

该区域存储了程序代码。起始地址固定为0x08000000,大小根据芯片容量不同而不同。

  1. SRAM: 0x20000000 ~ 0x2000FFFF (64KB)

该区域用于存储运行时的数据,如全局变量、堆栈等。起始地址固定为0x20000000。

  1. 外设寄存器: 0x40000000 ~ 0x4000FFFF

用于映射控制外设的各种控制寄存器,可以通过访问这些地址来配置外设。

  1. AHB外设: 0x40020000 ~ 0x4002FFFF

包含了连接在AHB总线上的外设,如GPIO、DMA等的控制寄存器。

  1. APB1外设: 0x40000000 ~ 0x4000FFFF

包含连接在APB1总线上的外设,如TIMER2、UART2等。

  1. APB2外设: 0x40010000 ~ 0x400FFFFF

包含连接在APB2总线上的外设,如TIMER1、SPI1等。

通过上述内存布局可知,STM32内存映射有明确的逻辑划分,不同区域存放不同的数据或寄存器,各外设也按照所在总线分组排布。用户可以通过编程手册找到每个外设寄存器的确切地址。


基于存储器映射的外设寄存器编程

知道了各外设寄存器的地址映射后,我们就可以通过直接读写地址来操作外设,例如:


GPIOA_CRH = 0x40010800; //GPIOA控制寄存器地址


*(volatile uint32_t *)GPIOA_CRH |= 0x01; //配置PA8为输出模式

但是直接地址操作不够优雅和灵活,更好的方法是利用硬件抽象层(HAL)提供的函数来访问寄存器,例如:


GPIO_InitTypeDef GPIO_InitStruct; 


GPIO_InitStruct.Pin = GPIO_PIN_8;


GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;


HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

HAL库会根据传入的GPIO端口和引脚参数,自动计算出对应的寄存器地址,从而实现配置GPIO的功能。


这种基于内存映射的编程方式,为用户屏蔽了底层寄存器操作的细节,提供了简单易用的外设驱动接口。


存储器映射工作原理

那么STM32是如何实现内存映射,将不同区域的存储单元映射到连续的线性地址空间中的呢?


主要是通过地址译码器根据地址某些Bit位的组合,对地址进行解码,选通出需要访问的目标存储区域的信号,从而将访问请求导向到正确的目的地。


例如,地址的31-24bit用于区分代码区域和外设区域,0-15bit含有偏移量;地址译码器根据地址Bit位组合,将访问请求定向到与之对应的存储单元上。


内存保护机制

为了数据安全,STM32还增加了存储区域写入保护机制。


主要手段是利用内存保护单元(MPU)进行存储区域访问控制。MPU可以进行区域划分,配置每个区域的访问权限,从而实现对区域读写操作的保护,防止程序异常修改关键存储内容。


结语

本文介绍了STM32存储器映射的基本结构、典型布局及相关原理,并讲解了基于存储器映射访问外设寄存器的编程方法。存储器映射方式抽象并简化了STM32的庞大内存空间,有助于用户直观而高效地使用这块“位带区”。希望本文能帮助读者建立STM32存储器映射的概念框架,并为后续编程项目提供基础理论支持。关于“位带”操作,我将会在以后的文章中做单独进行介绍。使用“位带”操作可以让我们的代码更高效,这也是每一位STM32单片机开发者不可或缺的技能。


关键字:STM32芯片  存储器映射  系统架构 引用地址:STM32芯片存储器映射概述

上一篇:STM32定时器溢出的工作原理是什么?
下一篇:STM32操作系统系列使用C语言的教程

推荐阅读最新更新时间:2024-11-17 06:12

达芬奇数字媒体片上系统架构和Linux启动
  达芬奇( DaVinci)数字媒体技术平台TMS320DM6446/3采用了ARM+DSP双核的架构,本文从芯片的硬件结构入手介绍达芬奇DMSoC硬件部分及Linux OS的启动过程。   达芬奇DMSoC硬件概述   如图1所示,达芬奇数字媒体片上系统(DMSoC)提供:两个内核(ARM+DSP);视频处理子系统(VPSS);多种 Boot模式(NOR Flash/NAND Flash/UART0 Boot Mode);两个电源域;多个时钟树;多个引脚独立或复用的外设。 图1 DM6446功能结构框图   ● ARM-DSP集成   对于双核的达芬奇架构,大家最关心的就是两个核之间的资源分配、通信方式及如何高效
[嵌入式]
2018中国异构系统架构标准高层研讨会在南京召开
2018年6月20日,中国异构系统架构标准暨人工智能产业高层研讨会在南京集成电路产业服务中心盛大召开。本次论坛由中国电子技术标准化研究院、全球异构系统架构联盟中国区域委员会(HSA CRC)主办,由中国异构系统架构标准工作组(CSH)、南京集成电路产业服务中心、华夏芯(北京)通用处理器技术有限公司、南京工业大学、南京芯元通信技术有限公司等单位共同承办。来自HSA联盟组织的多家会员单位、中国异构系统架构标准工作组成员单位、相关高校、科研院所及产业链上的多家企事业单位的100余名专家学者出席了本次会议。 参会人员合影 在人工智能技术规模应用的拐点元年,作为人工智能技术核心的芯片备受关注。随着人们对高性能计算和低能耗的日益高
[半导体设计/制造]
2018中国异构<font color='red'>系统架构</font>标准高层研讨会在南京召开
基于STM32,低速CAN通信的收发器芯片选择问题
本电路系统第一版测试电路使用的CAN收发器芯片为philips公司生产的TJA1050,电路参考了战舰STM32开发版的电路,如下图。 电路测试没有问题,但是性能不能满足工程要求。经测试在STM32F103C8T6芯片上,工作于24MHZ,在代码中设置SJW,BS2,BS1,BRP分别为1,8,7,125时可以实现12kbps的速率,可正常发送与接收数据。在外部条件最优的前提下,12kbps约对应于5KM的理论通信距离,这显然距离CAN的5kbps对应的10KM距离还有一定差距。现如今,最低通信速率为1,8,7,128配置下的波特率,如果再低则无法正常通信。为达到更远通信距离的目的,我们必须想办法将通信速率降下来。 开
[单片机]
基于<font color='red'>STM32</font>,低速CAN通信的收发器<font color='red'>芯片</font>选择问题
基于STM32芯片的γ能谱仪设计
随着对天然辐射场中低能量γ谱学及其应用的深入研究,γ能谱仪不仅在固体矿产勘探、油气普查、水文和工程地质调查等工业生产及科学研究方面,甚至在民用的环境辐射场调查、建材与建筑装饰材料放射性检测方面,都得到广泛的应用,应用场合的复杂多样化对核辐射测量仪器提出新的需求。 传统的核辐射测量仪器常采用探头与主控仪器分离的方式,而且主控仪器通常采用 32 位 ARM7 处理器甚至 8 位单片机系统来进行控制,数据采集常采用速度较低的 ADC 芯片。硬件电路复杂、体积大、集成度低、功能单一。近年 ARM 公司 Cortex—M 系列 ARM 核的推出将微控制器的性能提高到一个崭新的高度,同时功耗与成本大大降低。本文介绍一种主要基于最新 Corte
[单片机]
基于STM32的常用数码管芯片TM1637驱动
IIC协议这里就不多说了; 使用模拟IIC口 定义B14 B15 #define AnalonSDA_Pin GPIO_PIN_12 #define AnalonSDA_GPIO_Port GPIOB #define AnalonSCL_Pin GPIO_PIN_13 #define AnalonSCL_GPIO_Port GPIOB IO配置为输出 /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin, GPIO_PIN_RESET);
[单片机]
智能手机的系统架构及其低功耗设计
     随着通信产业的不断发展,移动终端已经由原来单一的通话功能向话音、数据、图像、音乐和多媒体方向综合演变。而对于移动终端,基本上可以分成两种:一种是传统手机(feature phone);另一种是智能手机(smart phone)。智能手机具有传统手机的基本功能,并有以下特点:开放的操作系统、硬件和软件的可扩充性和支持第三方的二次开发。相对于传统手机,智能手机以其强大的功能和便捷的操作等特点,越来越得到人们的青睐,将逐渐成为市场的一种潮流。        然而,作为一种便携式和移动性的终端,完全依靠电池来供电,随着智能手机的功能越来越强大,其功率损耗也越来越大。因此,必须提高智能手机的使用时间和待机时间。对于这个问题,有两种解
[电源管理]
智能手机的<font color='red'>系统架构</font>及其低功耗设计
STM32 USB 使用芯片内部flash模拟U盘
这次是实现一个使用STM32内部的flash模拟一个U盘。我使用的STM32芯片是STM32F103ZE,该芯片有512K的内部flash,本次工程,我准备用最后的400K空间来模拟一个U盘。本次的工程在之前用NAND或SD卡模拟U盘的工程基础上进行修改。 首次要做的是在外设库组中添加stm32f10x_flash.c文件,因为涉及到内部flash,所以必须添加此文件。接下去,需要修改的文件只有mass_mal.c和memory.c两个了。 先来讲讲memory.c,这个文件修改量很小。在函数的前面,我们可以看到有个:uint32_t Data_Buffer ;数组的定义,该数组的数组元素个数,跟大家所使用的存储器的块大小有
[单片机]
<font color='red'>STM32</font> USB 使用<font color='red'>芯片</font>内部flash模拟U盘
飞思卡尔推出业软件感知系统架构的下一代智能网络QorIQ平台
2012年6月19日, 圣安东尼奥(飞思卡尔技术论坛)讯- 继前两代QorIQ嵌入式多核处理器大获成功和市场认可后,飞思卡尔半导体公司(NYSE: FSL)日前发布了第三代QorIQ产品组合的中心件 -- 新系统架构Layerscape。这个与内核无关的、软件感知的架构可满足网络基础设施OEM厂商所需的灵活性和可扩展性,帮助他们应对大量互连的设备、海量的数据集、更严格的安全要求、实时的服务供应和日益变幻莫测的网络通信模式。 Layerscape架构是一个全新的网络系统架构方法 --- 一个以软件和编程能力为主的方法。它将高层路由决策中的数据包加速和转发操作模块化;简化了层与层之间的交互作用;采用同步的运行至完成(run-to-
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved