STM32G4系列MCU的启动项配置

server/2024/10/25 11:02:08/

目录

概述

1 配置方法

1.1 配置类型

1.2 启动模式类别

1.3 注意点介绍

2 应用案例介绍

2.1 主内存启动模式

2.2 GPIO配置启动模式

2.3 注意点介绍

3 物理内存映射

3.1 映射内存类别

3.2 注意点介绍 


概述

本文主要介绍STM32G4系列MCU的启动项配置功能,包括启动模式类别,内存映射地址等内容。

1 配置方法

1.1 配置类型

配置启动项方法:

1)BOOT0引脚(PB8)

2)nBOOT0位,其存在于FLASH_OPTR 寄存器中

3)nBOOT1位,其存在于FLASH_OPTR 寄存器中

1.2 启动模式类别

1.3 注意点介绍

当BFB2位被置位时(对于双bank设备),系统内存保持在0x0000 0000位置。在用户应用程序中必须考虑将系统内存混叠到0x0000 0000 - VTOR地址必须从默认值重新映射0x0000 0000地址转换为实际用户应用程序的正确地址向量表。

在复位释放后,BOOT0引脚(来自引脚或选项位)和nBOOT1位上的值 锁存于内部启动时钟源的第4时钟。由用户设置nBOOT1和BOOT0来选择所需的启动模式。

BOOT0引脚或用户选项位(取决于 FLASH_OPTR寄存器中的nSWBOOT0位值)和nBOOT1位在从备用模式退出时也被重新采样。因此,它们必须在Standby 模式下保持所需的Boot模式配置。在这个启动延迟过去之后,CPU从 地址0x0000 0000获取栈顶值,然后从0x0000 0004处的引导内存开始执行代码。

2 应用案例介绍

2.1 主内存启动模式

根据所选择的启动模式,主闪存、系统内存或SRAM1可以 访问,如下所示:

1)从主闪存引导:主闪存在引导内存空间(0x0000 0000)中别名,但仍然可以从其原始内存空间访问

(0 x0800 0000)。换句话说,可以从地址0x0000 0000或0x0800 0000开始访问闪存内容 。

2)从系统内存启动:系统内存在启动内存空间中别名(0x0000 0000),但仍然可以从其原始内存空间(0x1FFF 0000)访问。

3)从嵌入式SRAM1引导:SRAM1在引导内存空间中别名(0x0000 0000),但是仍然可以从其原始内存空间(0x2000 0000)访问它。

2.2 GPIO配置启动模式

PB8/BOOT0 GPIO配置在:

1)如果选项位nSWBOOT0被设置为FLASH_OPTR寄存器,然后在复位释放后,该引脚自动切换到模拟模式(BOOT0引脚)。

2)如果在FLASH_OPTR寄存器中的位nSWBOOT0被清除(BOOT0值来自选项位),则从复位阶段到选项字节加载完成的输入模式。即使复位阶段不完成,它也会自动切换到模拟模式。

2.3 注意点介绍

1) 当设备从SRAM启动时,在应用程序初始化代码中,必须通过使用NVIC异常表和偏移寄存器重新定位SRAM中的向量表。

2)当从主闪存启动时,应用程序软件可以从 bank 1或bank 2启动(仅适用于3类设备)。

3)默认情况下,选择从bank1启动。选择从flash bank 2启动,在用户选项字节中设置BFB2位。当设置了 这个位,并且引导引脚处于从主闪存引导配置中时, 设备从系统内存引导,引导加载程序跳转到执行在闪存组2中编程的用户应用程序。

3 物理内存映射

3.1 映射内存类别

一旦选择了引导引脚模式,应用软件就可以修改代码区中可访问的内存 (这样代码就可以通过 代替系统总线的ICode总线来执行)。这个修改是通过在SYSCFG控制器中编程SYSCFG 内存重新映射寄存器(SYSCFG_MEMRMP)来执行的。

以下记忆可以被重新映射:
•主闪存
•系统内存
•嵌入式SRAM1
•FSMC银行1 (NOR/PSRAM 1和2)
•QUADSPI内存

3.2 注意点介绍 

1)灰色突出显示的保留内存区域。

2)  当FSMC在地址0x0000 0000处重新映射时,只有第1组内存控制器(第1组)的前两个区域
NOR/PSRAM 1和NOR/PSRAM 2)可以重新映射。当FSMC被重新映射到地址0x0000 0000时,只有128 MB被重新映射。在remap模式下,CPU可以通过ICode总线而不是系统总线访问外部存储器,从而提高了性能。

3) 即使在引导内存空间中别名,相关内存仍然可以在其原始内存空间中访问。


http://www.ppmy.cn/server/134698.html

相关文章

使用Redisson的布隆过滤器解决缓存穿透问题

使用Redisson实现缓存穿透的布隆过滤器示例 以下是一个使用Redisson库的RBloomFilter来解决缓存穿透问题的Java代码示例。在这个示例中,我们会通过布隆过滤器预先过滤无效的请求,以减少对数据库的压力。 代码示例 首先,确保在项目中引入Re…

vscode使用make编译c的问题

问题1:makefile:2: *** missing separator. Stop vscode的配置问题,看这哥们的文章即可:https://blog.csdn.net/m0_57464986/article/details/134220676 问题2:创建makefile文件 直接创建文件名为“makefile”的文件即可&#x…

Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)

文章目录 网络连接相关命令pingtelnetcurlwget 网络连接相关命令 ping ping 命令是用于测试网络连接和诊断网络问题的工具。它通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求,并等待回复,以确定目标主机是…

【1024特辑 | 机器学习-无监督学习】EM算法

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

【C#】.NET Framework 和 .NET的联系与区别

.NET Framework 和 .NET(通常指 .NET Core 或 .NET 5/6/7) 是微软推出的两种不同的开发平台,它们虽然都基于 .NET 技术,但有一些关键区别。让我们逐一分析它们的不同点,以帮助你在选择开发环境时做出合适的决定。 1. …

C#PropertyGrid下拉选择数据报错

1、问题点--PropertyGrid下拉框报错 PropertyGrid:属性窗口:滚轮选择或者手动输入不报错,下拉框选择报错 属性值无效:类型“System:String”的对象无法转化为类型“System:Int32” PropertyGrid:属性窗口:…

Prisma ORM 第三章 新增 更新 删除

1. 新增数据 在 Prisma 中,新增数据是一个常见的操作,可以通过 create 和 createMany 方法来实现。这两个方法分别用于创建单个记录和多个记录。下面详细介绍这两个方法及其配置项。 1. create 方法 create 方法用于在数据库中创建单个记录。你可以指…

基于Ubuntu24.04,下载并编译Android12系统源码 (一)

1. 前言 1.1 编译源码可以干什么 定制Android系统将最新版本的Android系统刷入到自己的Android设备中将整个系统源码导入到Android Studio中(可以不用编译源码来实现)。 只要有对应的Android源码版本的android.iml和android.ipr文件,就可以…