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-11 11:18

STM32F1(Cortex M3内核)存储器映射
本文参考《CM3权威指南》第五章 存储器系统 《STM32_参考手册》2.4 启动配置 《STM32F103xCDE_数据手册》第四章 memory mapping Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不超过抽屉的大小),由每个芯片厂商自己决定。 图1 cortex m3存储器映射 我们来看看ST公司打造的STM32F1系列芯片是如何在这些抽屉放置东西的。 代码抽屉 在代码这个抽屉,STM32F1布置了Flash模块,用来存储代码,相当于电脑的硬盘,具体展开如下图
[单片机]
Cortex M3存储器映射
CM3 只有一个单一固定的存储器映射。这一点极大地方便了软件在各种 CM3 单片机间的移植。 存储空间的一些位置用于调试组件等私有外设,这个地址段被称为“私有外设区”。私有外设区的组件包括:闪存地址重载及断点单元(FPB),数据观察点单元(DWT),仪器化跟踪宏单元(ITM),嵌入式跟踪宏单元(ETM),跟踪端口接口单元(TPIU), ROM 表。 CM3的地址空间是 4GB, 程序可以在代码区,内部 SRAM 区以及外部 RAM 区中执行。但是因为指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用自己的总线,并行不悖。 1、代码区 存放指令和数据,取指通过指令
[单片机]
Cortex M3<font color='red'>存储器</font><font color='red'>映射</font>
关于stm32芯片解锁方法
在调试stm32芯片的时候经常会出现下载不进去,出现类似下面的错误,这个时候就要怀疑是不是芯片被异常锁死了; 我亲测有效的解决方法主要有以下两种: 1.JLINK烧录器解锁:这是最简单的方法 SEGGER 的JLink ARM V4.08l包中的,Processor Specific Utilities- J-Link STM32 Unlock 工具就可以解锁; 2.ISP升级解锁: 通过串口,设置BOOT0为1,BOOT1为0,进入ISP升级模式,发送解除读写保护即可解锁。 --------------------- 作者:xld_1992 来源:CSDN 原文:https://blog.csdn
[单片机]
关于<font color='red'>stm32</font><font color='red'>芯片</font>解锁方法
使用ST-Link Utility去除STM32芯片读写保护
问题:使用ISP/J-Link/ST-Link等无法下载代码,提示芯片写保护;读芯片信息时提示读保护。 原因:一般是修改了选项字节。 解决方法:这里使用ST-Link Utility来修改选项字节。 使用ST-Link连接到STM32芯片,点击Connect。 存在读保护。 修改选项字节。 将读保护等级修改为Level 0。 打钩的扇区会添加写保护,点击Unselect all不选择写保护。 写入选项字节后Flash会被擦除。 能正常写入程序。
[单片机]
使用ST-Link Utility去除<font color='red'>STM32</font><font color='red'>芯片</font>读写保护
STM32芯片存储器映射概述
STM32系统构架 当你拿到一款芯片后,怎样可以快速了解到它具有哪些功能?了解单片机的系统架构是使用款芯片的基础,这些信息在芯片手册上都会有详细的说明,并且它们会被安排在最前面的章节,目的就是让用户最开始就能够关注到该款芯片具有哪些功能,特点。 STM32F103系统结构 从上图我们可以了解到STM32F103系列的主要系统组成单元: CPU核:使用ARM Cortex-M3内核; 存储器: STM32F103系列微控制器采用经典的哈佛架构,程序存储和数据存储采用独立的存储器空间; ICode:指令代码,Flash存储器用于存储程序; DCode:数据代码,SRAM用于存储数据; 外设: GPIO;
[单片机]
<font color='red'>STM32</font><font color='red'>芯片</font><font color='red'>存储器</font><font color='red'>映射</font>概述
STM32芯片超低功耗设计思路
对于给定的制造工艺和晶片区域,微控制器的功耗主要取决于两个因素(动态可控):电压和频率。 ST公司L系列超低功耗芯片为130nm超低泄漏工艺,在超低功耗所做的设计思路如下: 1、围绕Cortex-M3内核构建,具有领先的处理性能和代码密度,其处理性能使得运行模式时间更少,因此可以使深度睡眠模式的时间更长。 2、提供3个动态可选电压范围,从1.8V到1.2V,可在能耗上提供超过25%的增益。 3、提供7种低功耗模式,逐步禁用与频率无关的电流源(时钟源、非易失性存储器、调压器),直至大部分外设掉电。 4、灵活的门控技术,超低功耗模式下只激活必要的逻辑门。a)闲置的引脚配置为模拟输入;b)连接外围电路的引脚,提供有效的Pull
[单片机]
STM32 系统架构
简介:这里所讲的 STM32 系统架构主要针对的 STM32F103 这些非互联型芯片。STM32 主系统主要由四个驱动单元和四个被动单元构成。 四个驱动单元是: 内核DCode总线;系统总线;通用DMA1;通用DMA2; 四被动单元是: AHB到APB的桥:连接所有的APB设备;内部FlASH闪存;内部SRAM;FSMC; 下面我们具体看一下图中几个总线的知识: ①ICode总线:该总线将M3内核指令总线和闪存指令接口相连,指令的预取在该总线上面完成。 ②DCode总线:该总线将M3内核的DCode总线与闪存存储器的数据接口相连接,常量加载和调试访问在该总线上面完成。 ③系统总线:该总线连
[单片机]
<font color='red'>STM32</font> <font color='red'>系统架构</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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