当前位置: 首页 > news >正文

STM32G4系列MCU的启动项配置

目录

概述

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.mrgr.cn/news/55735.html

相关文章:

  • 进程的学习
  • vulnhub靶场之JOY
  • 【Ubuntu18.04命令行code打不开】可能的解决方法
  • 基于Multisim的汽车尾灯控制电路设计与仿真
  • 大模型的多样性:从语言处理到多模态智能
  • 如何使用 LLM 进行数据分析: 用 5 个步骤为您的数据增压
  • 【luogu P2148】 ED(SG函数)
  • Python数值计算(27)—— 数值微分
  • 基于Springboot在线视频网站的设计与实现
  • 心觉:突破自己
  • 51单片机快速入门之 IIC I2C通信
  • UML之用例图详解
  • 【ShuQiHere】深入了解逻辑门与晶体管数量:CMOS技术详解
  • 毕业设计选题:基于Hadoop的热点新闻分析系统的设计与实现
  • js构造函数和原型对象,ES6中的class,四种继承方式
  • Python Flask 数据库开发
  • 提示词高级阶段学习day3.1
  • 目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件
  • 【C++】拆分详解 - stack和queue
  • 03_深入理解Linux:系统组成、内核版本及文件系统详解
  • 【MySQL】索引和事务
  • JAVA继承
  • 时间数据可视化基础实验——Python实现
  • 【付费】Ambari集成Dolphin实战-002-bigtop下编译dolphin——下
  • 简述 C# 二维数据集合 List 的创建、遍历、修改、输出
  • 3. IoC 与DI