STM32------存储器映像

一.存储器映像图

二.运行内存SRAM

STM32 的运行内存 SRAM (Static Random - Access Memory,静态随机存取存储器)是 STM32 微控制器中重要的组成部分,用于程序运行过程中临时存储数据,对系统的性能和实时性有着关键影响。以下是关于它的详细介绍:

1. 基本特性

  • 易失性存储:SRAM 中的数据在断电后会立即丢失,这是它与 Flash 等非易失性存储器的重要区别。在系统上电运行时,它为程序提供了数据读写的临时空间。
  • 快速读写:相比外部存储器(如 SD 卡等),SRAM 具有极快的读写速度,能够满足 CPU 对数据快速访问的需求,保证程序高效运行。例如,STM32F4 系列的 SRAM 可以在一个 CPU 时钟周期内完成一次数据读写操作。
  • 静态存储:不需要像动态随机存取存储器(DRAM)那样周期性刷新,简化了电路设计和控制逻辑,提高了稳定性。

2. 地址范围

不同型号的 STM32,其 SRAM 的起始地址和容量有所不同。一般来说,常见的起始地址是0x2000 0000 。比如,STM32F103 系列,根据不同的产品型号,SRAM 容量有 20KB、48KB、64KB 等多种规格;而 STM32F4 系列,其大容量型号的 SRAM 容量可高达 192KB 甚至更多。

3. 用途

  • 变量存储 :用于存储程序运行过程中的局部变量、全局变量、静态变量等。例如,在 C 语言程序中定义的普通变量,如int num; ,当程序运行时,num 就会被存储在 SRAM 中。
  • 堆栈空间:为函数调用提供堆栈空间。当函数被调用时,局部变量、函数参数以及返回地址等会被压入堆栈;函数执行完毕后,相关数据从堆栈中弹出。合理设置堆栈大小对于程序的正常运行至关重要,过小的堆栈可能导致程序崩溃(如栈溢出)。
  • 数据缓存:在一些应用场景中,SRAM 可作为数据缓存区。比如,在进行 ADC(模拟数字转换器)数据采集时,可以先将采集到的数据暂存到 SRAM 中,再进行后续处理;或者在通信过程中,作为接收和发送数据的缓冲区。

4. 与其他存储器的配合

  • 与 Flash 配合:Flash 用于存储程序代码,当系统上电后,CPU 从 Flash 中读取程序指令并执行。在执行过程中,需要临时存储的数据则存放在 SRAM 中。例如,程序中的变量和堆栈数据都在 SRAM 中,而程序的逻辑代码在 Flash 中。
  • 与外部存储器配合:当 STM32 的内部 SRAM 容量无法满足需求时,可以外接外部存储器(如 SDRAM)。但外部存储器的读写速度相对较慢,在一些对速度要求极高的场景下,仍以内部 SRAM 作为主要的运行内存,外部存储器则用于存储一些对读写速度要求不高的大量数据(如图片、音频等数据)。

5. 编程注意事项

  • 内存管理 :在编写程序时,需要合理分配 SRAM 的使用,避免出现内存泄漏或内存溢出的情况。特别是在使用动态内存分配函数(如**mallocfree** )时,要确保正确释放不再使用的内存。
  • 优化内存占用 :为了节省 SRAM 空间,可以尽量使用合适的数据类型(如能用char 类型就不用int 类型存储数据),避免定义过多不必要的全局变量等。
  • 内存访问速度:在设计程序时,要充分利用 SRAM 的快速读写特性,将频繁访问的数据存放在 SRAM 中,以提高程序的运行效率。

三.程序存储区flash

STM32 的程序存储区 Flash 是用于存储程序代码常量数据的非易失性存储器,即使系统断电,其中的数据也不会丢失。以下是关于它的详细介绍:

1.基本特性

  • 非易失性:Flash 存储器在断电后能保持存储的数据,这使得 STM32 在上电时可以直接从 Flash 中读取并执行预先烧录好的程序代码,是系统运行的基础。
  • 可擦除和编程:虽然 Flash 的数据在断电后不会丢失,但它支持数据的擦除和重新编程操作。不过,Flash 的擦除和编程次数是有限的,一般能承受 1 万到 10 万次不等的擦写操作,这在实际应用中通常能满足需求。
  • 按页 / 块操作 :Flash 的擦除和编程操作并非像 SRAM 那样按字节随意进行,而是以页(Page)或块(Block) 为单位。比如在 STM32F103 系列中,Flash 页大小通常为 1K 字节,擦除操作一般针对整页进行,编程则可以按**半字(16 位)字(32 位)**写入。

2.地址范围与容量

  • 地址范围 :不同型号的 STM32,其 Flash 的起始地址一般是0x0800 0000 ,但也有一些特殊情况,例如在大容量产品中,可能会存在扩展的 Flash 地址空间。
  • 容量差异:STM32 不同系列、不同型号的 Flash 容量差别较大。以 STM32F103 系列为例,小容量产品 Flash 容量为 16KB 或 32KB,中容量产品为 64KB 或 128KB,大容量产品可达 512KB 甚至更多。而像 STM32H7 系列等高端产品,Flash 容量可以达到数兆字节。

3.用途

  • 存储程序代码 :编译器将 C、C++ 等高级语言编写的程序代码编译、链接后生成的可执行代码,会被烧录到 Flash 中。系统上电启动后,CPU 从 Flash 的指定地址开始读取指令并执行,驱动整个系统运行。比如一个基于 STM32 的智能温度控制系统,其温度采集、处理、控制等程序代码都存储在 Flash 中。
  • 存储常量数据 :程序中定义的常量,如const int num = 10; 中的10 ,以及字符串常量(如"Hello, World!" )等,也会被存储在 Flash 中。这些常量数据在程序运行过程中不会被修改,且可以被程序代码随时读取使用。
  • 数据存储(非易失性数据保存):除了程序代码,在一些应用场景下,Flash 也可用于存储一些需要长期保存的非易失性数据,如系统的配置参数(如用户设置的工作模式、阈值等)。不过,由于 Flash 的擦写特性,在进行数据存储时需要注意合理设计擦写算法,以避免频繁擦写导致 Flash 寿命缩短。

4.与其他存储区域的关系

  • 与 SRAM 的关系:Flash 用于长期存储程序和常量,而 SRAM 是程序运行时的临时数据存储区域。系统上电后,CPU 从 Flash 中读取程序指令,在执行过程中产生的临时变量、函数调用堆栈等数据则存放在 SRAM 中。两者相互配合,实现程序的正常运行。
  • 与系统存储器的关系:系统存储器是 STM32 中用于存储 BootLoader(引导加载程序)的区域。BootLoader 可以通过特定的接口(如串口、USB 等)将程序代码从外部设备(如电脑)下载到 Flash 中。在系统启动时,根据启动配置(由启动引脚电平决定),可以选择从 Flash 启动(正常运行模式)或从系统存储器启动(用于程序下载和升级等)。

5.编程与操作注意事项

  • 烧录方式:可以使用 ST - Link、J - Link 等调试下载工具,通过 SWD(Serial Wire Debug)或 JTAG(Joint Test Action Group)接口将程序代码烧录到 Flash 中;也可以利用 BootLoader 通过串口、USB 等通信接口进行程序下载。
  • 擦写操作:在对 Flash 进行编程之前,必须确保目标区域已被擦除。如果没有正确擦除就进行编程,可能会导致数据写入错误。同时,要尽量减少不必要的擦写操作,以延长 Flash 的使用寿命。
  • 数据一致性:在进行 Flash 数据更新(如更新配置参数)时,要注意数据的一致性。可以采用备份、校验等机制,避免在擦写过程中因意外情况(如掉电)导致数据丢失或损坏。

四.外设寄存器

STM32 的外设寄存器是用于配置和控制片上外设(如 GPIO、UART、SPI、ADC 等)工作状态和数据传输的特殊功能寄存器。通过对这些寄存器进行读写操作,开发者可以实现对外设的初始化、参数配置、数据收发以及状态监控等功能。以下是关于 STM32 外设寄存器的详细介绍:

1. 寄存器的地址映射

STM32 芯片将不同外设的寄存器统一编址,映射到特定的内存地址区域, 通常在0x4000 0000及之后的地址空间(不同系列可能有差异)。比如,不同外设模块有各自独立的基地址,每个外设模块内的寄存器地址是基于该模块基地址的偏移量 。以 STM32F103 为例,GPIOA 外设的基地址是0x4001 0800 ,而 GPIOA 的端口配置低寄存器(CRL)的地址就是0x4001 0800 (因为它是偏移量为 0 的寄存器),端口配置高寄存器(CRH)地址是0x4001 0804 (偏移量为 4 个字节,因为 STM32 寄存器通常是 32 位,占 4 个字节)。

2. 常见的寄存器类型

  • 控制寄存器(CR,Control Register):用于配置外设的工作模式和功能。例如,GPIO 的控制寄存器可以设置引脚是作为输入、输出,以及输出模式是推挽输出还是开漏输出等;UART 的控制寄存器可以配置波特率、数据位、停止位、校验位等参数。
  • 数据寄存器(DR,Data Register):用于读写外设的数据。比如,当 GPIO 作为输出时,向其数据寄存器写入相应的值(0 或 1),就可以控制引脚的电平状态;当 UART 接收数据时,接收到的数据会被存储在数据寄存器中,供 CPU 读取。
  • 状态寄存器(SR,Status Register):用来反映外设当前的工作状态,如是否有数据接收完成、发送完成,是否产生了错误(如溢出错误、奇偶校验错误)等。通过读取状态寄存器,CPU 可以判断外设的工作情况,以便做出相应的处理。
  • 配置寄存器(CFGR,Configuration Register):除了控制寄存器,有些外设还会有专门的配置寄存器,用于更详细地设置外设的参数。例如,ADC(模拟数字转换器)的配置寄存器可以设置转换模式(单次转换还是连续转换)、触发方式等。

五.内核外设寄存器

STM32 的内核外设寄存器是用于配置和管理 Cortex - M 内核相关外设功能的特殊功能寄存器,这些寄存器对于系统的中断管理、时钟控制、调试等重要功能起着关键作用。

1. 寄存器地址映射

STM32 内核外设寄存器通常映射在特定的内存地址区域,常见的起始地址为0xE000 0000 。不同的内核外设模块在这个基地址上有各自的偏移地址,通过对这些地址对应的寄存器进行读写操作,就能实现对相应内核外设的配置与控制。

2. 主要内核外设寄存器及功能

  • 嵌套向量中断控制器(NVIC,Nested Vectored Interrupt Controller)寄存器
    • 中断使能寄存器(ISER):用于使能各个中断线,每个位对应一个中断源,通过置位相应位可使能对应的中断。例如,要使能外部中断线 0,就需要对 ISER [0] 的第 0 位进行置 1 操作。
    • 中断失能寄存器(ICER):与 ISER 相反,用于禁用中断,对相应位写 1 可禁止对应的中断。
    • 中断挂起寄存器(ISPR):当某个中断发生且未被及时响应时,该中断会被挂起。通过对 ISPR 寄存器的相应位写 1,可以手动挂起一个中断;读该寄存器可查询哪些中断处于挂起状态。
    • 中断解挂寄存器(ICPR):用于清除挂起的中断,对相应位写 1 可清除对应的中断挂起标志。
    • 中断优先级寄存器(IP):用于配置中断的优先级,STM32 的 NVIC 支持多个中断优先级分组,可通过配置寄存器来设置每个中断的抢占优先级和子优先级,从而确定中断响应的先后顺序。
  • 系统控制块(SCB,System Control Block)寄存器
    • 中断控制状态寄存器(ICSR):包含了各种中断相关的状态信息,如活动中断标志、Pending 中断清除等。通过读取该寄存器,可以了解系统当前的中断状态,进行相应的处理。
    • 向量表偏移寄存器(VTOR):用于设置中断向量表的起始地址。在不同的应用场景下,可能需要将中断向量表重映射到不同的内存区域,通过配置 VTOR 寄存器即可实现这一功能。
    • 应用程序中断及复位控制寄存器(AIRCR):可用于设置中断优先级分组,以及触发系统复位等操作。比如,通过对 AIRCR 寄存器进行特定的写操作,可以实现软件复位系统。
  • 系统滴答定时器(SysTick)寄存器
    • 控制及状态寄存器(CTRL):用于配置 SysTick 定时器的工作模式(如是否使能定时器、选择时钟源等),并包含定时器的状态标志(如计数溢出标志)。例如,将 CTRL 寄存器的使能位(ENABLE)置 1,即可启动 SysTick 定时器。
    • 重装载值寄存器(LOAD):设置 SysTick 定时器的计数初值。当定时器计数到 0 时,会自动从 LOAD 寄存器中重新加载计数值,开始新一轮计数。
    • 当前值寄存器(VAL):用于读取 SysTick 定时器当前的计数值,通过读取该值可以获取定时器的运行状态。

六.系统存储器

STM32 的系统存储器(System Memory)是芯片内部一块特殊的只读存储器(ROM),主要用于存储BootLoader(引导加载程序),是 STM32 程序下载和启动机制的重要组成部分。以下是关于它的详细介绍:

1.基本特性

  1. 非易失性:系统存储器中的数据由芯片厂商在出厂时预烧录,断电后不会丢失,且用户无法修改或擦除(除非通过特殊手段,但通常不建议)。
  2. 固定功能 :其核心作用是存储BootLoader 程序,该程序负责在特定启动模式下接收外部数据(如通过串口、USB 等),并将程序代码烧录到 STM32 的 Flash 中(即 "ISP 下载" 功能)。
  3. 独立地址空间 :系统存储器有固定的地址映射,不同 STM32 系列的地址略有差异,例如:
    • STM32F1 系列:起始地址为0x1FFF F000,大小通常为 2KB~8KB(因型号而异);
    • STM32F4 系列:起始地址为0x1FFF 0000,容量更大,支持更多下载接口(如 USB DFU)。

2.核心功能:BootLoader

系统存储器中的 BootLoader 是 STM32 的 "出厂预装程序",主要功能包括:

  1. 程序下载 :在 "系统存储器启动模式" 下,BootLoader 会运行,通过预设的硬件接口(如 UART、SPI、I2C、USB 等,具体支持的接口因芯片型号而异)接收外部设备(如电脑)发送的程序数据,并将其写入 Flash。
    • 例如,STM32F103 的 BootLoader 支持通过 USART1 下载程序,而 STM32F407 支持 USART、SPI、USB DFU 等多种方式。
  2. 启动引导:BootLoader 会检查启动配置(由芯片的启动引脚电平决定),若配置为从系统存储器启动,则执行自身逻辑;否则,跳转至 Flash 或 SRAM(特殊模式)执行用户程序。

3.启动模式与系统存储器的关系

STM32 的启动模式由芯片的BOOT0BOOT1引脚(部分型号可能简化)的电平状态决定,常见模式包括:

  1. Flash 启动(默认模式) :BOOT0=0,BOOT1 任意。此时 CPU 从 Flash(0x0800 0000)读取并执行用户程序,是正常运行模式。
  2. 系统存储器启动:BOOT0=1,BOOT1=0(具体电平需参考芯片手册)。此时 CPU 从系统存储器启动,运行 BootLoader,用于程序下载或升级。
  3. SRAM 启动:BOOT0=1,BOOT1=1。此时 CPU 从 SRAM 启动,通常用于调试(程序需预先加载到 SRAM)。

注意:系统存储器启动模式仅用于执行 BootLoader,完成程序下载后,需将 BOOT0 引脚拉低,重新上电以切换回 Flash 启动模式,运行用户程序。

4.实际应用场景

  1. 程序首次烧录:对于未焊接调试接口(如 SWD/JTAG)的电路板,可通过系统存储器的 BootLoader,利用串口等通用接口下载程序。
  2. 现场程序升级(IAP):在嵌入式产品中,若需远程升级程序,可先通过用户程序触发系统复位并切换到系统存储器启动模式,再由 BootLoader 接收新程序并写入 Flash(需硬件支持启动引脚电平切换,或通过软件配置特殊寄存器实现)。
  3. 调试辅助:当 Flash 中的程序出错导致系统无法启动时,可切换到系统存储器模式,重新下载程序修复。

5.注意事项

  1. 接口限制:不同 STM32 型号的 BootLoader 支持的下载接口不同,需参考芯片数据手册(Datasheet)中的 "System Memory Boot mode" 章节确认(如 UART 的具体引脚、波特率等)。
  2. 启动引脚配置:切换启动模式时,需确保 BOOT0/BOOT1 引脚电平稳定,避免上电过程中电平抖动导致启动异常。
  3. 安全性:系统存储器的 BootLoader 是芯片厂商固化的程序,安全性较高,但部分型号支持通过选项字节(Option Bytes)禁用特定下载接口,以防止未授权访问。

七.选项字节

STM32 的选项字节(Option Bytes)是芯片内部一块特殊的非易失性存储区域,用于存储芯片的配置参数(如启动模式、读写保护、看门狗配置等),这些参数会影响芯片的基础功能和安全特性,且在芯片复位或上电后仍能保持生效。以下是关于选项字节的详细介绍:

1.基本特性

  1. 非易失性:选项字节的数据在断电后不会丢失,与 Flash 类似,但功能和操作方式不同。
  2. 配置核心功能:存储的参数直接影响芯片的底层行为,如启动配置、存储器保护、硬件特性开关等,是芯片运行的 "基础配置项"。
  3. 独立于用户程序:选项字节的配置不占用用户程序的 Flash 空间,且需通过专门的操作指令进行修改(不能像普通 Flash 那样直接读写)。
  4. 地址映射 :不同 STM32 系列的选项字节地址略有差异,例如:
    • STM32F1 系列:起始地址为0x1FFF F800,大小通常为 16 字节(部分型号扩展至 32 字节);
    • 其他系列(如 F4、H7)地址可能不同,但均在系统存储器附近的特殊地址空间。

2.主要功能与配置项

选项字节包含多个配置字段,不同型号支持的功能略有差异,常见配置项如下:

  1. 读保护(RDP,Read Protection)

    • 用于保护 Flash 中的程序不被非法读取。通过设置 RDP 级别(如 Level 0、Level 1、Level 2),限制外部调试工具(如 ST-Link)对 Flash 的读取权限:
      • Level 0:无保护(默认),可自由读取 Flash;
      • Level 1:禁止读取 Flash,但若擦除整个 Flash,保护会被解除;
      • Level 2:最高级保护,一旦设置,无法解除(通常用于高安全性场景,可能导致芯片部分功能锁定)。
  2. 写保护(WRP,Write Protection)

    • 对 Flash 的特定页(或块)设置写保护,防止被意外擦除或改写。例如,可将存储关键配置数据的 Flash 页设置为写保护,避免程序运行中误操作导致数据丢失。
  3. 启动配置(部分型号)

    • 部分 STM32 型号通过选项字节补充配置启动模式,例如禁用某些启动引脚功能,或固定启动介质(如强制从 Flash 启动)。
  4. 硬件特性配置

    • 看门狗配置 :设置独立看门狗(IWDG)是否在复位后自动使能(如选项字节中的IWDG_SW位,控制看门狗是软件使能还是硬件强制使能)。
    • 电源管理配置:如设置低功耗模式下的唤醒方式、电压监测阈值等。
    • 时钟配置:部分型号可通过选项字节配置内部时钟(HSI)的校准值。
  5. 用户选项字节(User Option Bytes)

    • 预留的自定义配置位,用户可根据需求设置(如存储硬件版本、出厂信息等),复位后仍能保持状态。
相关推荐
平凡灵感码头5 小时前
基于STM32的智能门锁系统 经典开局,先来个点灯
stm32·单片机·嵌入式硬件
清风6666665 小时前
基于单片机的自动换挡式高精度数字电压表设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
HXQ_晴天5 小时前
STM32中MX_TIM2_Init函数和HAL_TIM_Base_MspInit函数区别
stm32·单片机·嵌入式硬件
HXQ_晴天6 小时前
STM32实现呼吸灯效果原理
stm32·单片机·嵌入式硬件
清风6666666 小时前
基于单片机的机房环境监测系统设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
江苏学蠡信息科技有限公司6 小时前
STM32 USART框图简介
stm32·单片机·嵌入式硬件
青牛科技-Allen7 小时前
7个常见的DFM问题及其对PCB制造的影响
开发语言·单片机·制造·usb麦克风·立体声录音笔
点灯小铭8 小时前
基于单片机的PID温控风扇设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
feifeigo1238 小时前
基于STM32F103ZET6实现6路舵机控制
stm32·单片机·嵌入式硬件