STM32中FLASH/System Memory/SRAM的区别

本文详细解析STM32的三种启动模式:MainFlashmemory、Systemmemory和EmbeddedMemory,介绍各自的功能及应用场景,特别是如何利用Systemmemory进行串口下载程序,并提供开发调试中解决Flash锁死的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载博客园:https://www.cnblogs.com/429512065qhq/p/8305008.html

 

 

Main Flash memory

是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

System memory

从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,

出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

Embedded Memory
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

开发BOOT模式选择。

1、通常使用程序代码存储在主闪存存储器,配置方式:BOOT0=0,BOOT1=X;

2、Flash锁死解决办法:

开发调试过程中,由于某种原因导致内部Flash锁死,无法连接SWD以及Jtag调试,无法读到设备,可以通过修改BOOT模式重新刷写代码。

修改为BOOT0=1,BOOT1=0即可从系统存储器启动,ST出厂时自带Bootloader程序,SWD以及JTAG调试接口都是专用的。重新烧写程序后,可将BOOT模式重新更换到BOOT0=0,BOOT1=X即可正常使用。

<think>嗯,用户想了解STM32Flash模块的功能作用。首先,我得回忆一下STM32Flash模块相关知识。根据提供的引用,特别是引用[3],STM32F1系列的Flash分为程序存储器、系统存储器选项字节。程序存储器用来存储用户代码,系统存储器可能存放启动代码,选项字节用于配置保护、读写权限等。 然后,用户可能想知道Flash模块的具体作用。比如,存储程序代码是肯定的,还有系统配置参数,比如引用[3]提到的选项字节设置写保护、读保护等。另外,在OTA升级时,Flash用于存储更新后的固件,如引用[4]提到的远程服务器管理固件版本,设备通过Flash存储新固件。 接下来是功能部分。Flash模块的接口(外设)允许擦除编程,这涉及到擦除操作是按页或块进行的,编程则是按字或半字。引用[3]提到这些操作需要通过闪存存储器接口完成。此外,启动配置也很重要,系统存储器中的启动代码决定了从主Flash、系统存储器还是SRAM启动,这影响程序运行方式。 用户可能还关心应用场景,比如程序存储、数据存储、OTA升级加密功能。引用[4]详细说明了OTA升级时服务器如何管理固件,Flash在这里的作用是存储更新后的程序。另外,选项字节的读写保护功能有助于提高安全性,防止未经授权的访问。 需要注意用户可能的实际应用,比如在开发中如何配置Flash,进行固件更新时的步骤,或者如何设置读写保护。此外,区分不同STM32系列的Flash结构可能也是重要的,但当前引用主要针对F1系列,可能需要提醒用户注意型号差异。 最后,确保回答结构清晰,分点说明作用、功能应用场景,并引用相关文献。同时,生成的相关问题要覆盖用户可能进一步询问的方向,如操作步骤、OTA实现、保护配置以及不同型号差异等。</think>### STM32 Flash模块的作用及功能介绍 #### 一、Flash模块的作用 1. **程序存储** STM32Flash模块主要用于存储用户编写的程序代码,是微控制器执行指令的核心存储区域。例如,用户通过Keil或STM32CubeIDE编译生成的`.hex`或`.bin`文件会直接烧录到Flash中[^3]。 2. **系统配置参数存储** Flash模块包含**选项字节(Option Bytes)**,用于配置芯片的读写保护、硬件看门狗、复位模式等关键参数。例如,通过设置写保护选项,可以防止意外修改Flash内容[^3]。 3. **固件升级支持** 在OTA(空中升级)场景中,Flash模块用于存储新版本的固件文件。远程服务器将更新文件传输到设备后,STM32通过Flash编程接口将新固件写入未使用的Flash扇区,完成版本切换[^4]。 --- #### 二、Flash模块的功能 1. **分块管理** STM32F1系列的Flash分为多个物理区块: - **主存储器(Main Memory)**:存储用户代码,按页(Page)或扇区(Sector)组织,例如1 KB或2 KB的擦除单元。 - **系统存储器(System Memory)**:存储芯片出厂预置的Bootloader程序,用于通过串口或USB下载代码。 - **选项字节(Option Bytes)**:独立区域,控制硬件特性。 2. **编程与擦除操作** - **擦除**:支持按页或整片擦除,擦除后所有位变为`1`。 - **编程**:以半字(16位)或字(32位)为单位写入数据,需先解锁Flash控制寄存器(FLASH_CR)。 - 代码示例(伪代码): ```c FLASH_Unlock(); // 解锁Flash FLASH_ErasePage(0x08000000); // 擦除指定页 FLASH_ProgramHalfWord(0x08000000, 0x1234); // 写入数据 FLASH_Lock(); // 重新上锁 ``` 3. **启动配置** 通过BOOT引脚或选项字节设置启动源,决定从主Flash、系统存储器还是SRAM启动,直接影响设备上电后的执行流程[^3]。 --- #### 三、典型应用场景 1. **程序固化** 用户代码编译后通过调试器(如ST-Link)直接烧录到Flash主存储器,实现长期保存。 2. **非易失数据存储** 在无文件系统的嵌入式系统中,Flash可用于存储校准参数、设备序列号等数据,例如: $$ \text{存储地址} = \text{Base\_Address} + \text{Page\_Size} \times N $$ 3. **安全增强** - **读保护(RDP)**:防止通过调试接口读取Flash内容。 - **写保护(WRP)**:保护特定扇区不被修改,避免代码被恶意篡改。 4. **OTA升级实现** 结合无线模块(如Wi-Fi/4G),STM32可从服务器下载新固件并写入备用Flash区域,通过重启切换版本。此过程需注意**中断向量表重映射****扇区擦除顺序**。 --- #### 四、注意事项 - **擦写寿命**:Flash的擦写次数有限(通常约10万次),需避免频繁写入同一区域。 - **中断管理**:Flash操作期间需禁用全局中断,防止意外打断导致硬件错误。 - **电压稳定性**:编程/擦除时需确保供电电压稳定,否则可能损坏存储单元。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值