特定闪存扇区的内存别名

问题描述 投票:0回答:1

我有一个 STM32 Mcu,其中我在闪存的开头 (0x0800_0000) 闪存了一个 BootLoader,并在 0x0801_0000 地址(扇区 4)处闪存了一个应用程序。

如果我正在调试应用程序代码并重置芯片,代码将切换到引导加载程序。据我了解,0x0800_0000地址是CPU的0x0000_0000的别名,并且MCU在重置后将始终首先执行Bootloader中的代码。

我的问题是,我是否可以将 0x0000_0000 地址别名为应用程序起始地址(或者一般来说是闪存中除 0x0800_0000 之外的特定地址),以便在复位后直接从那里开始?

c embedded stm32 microcontroller boot
1个回答
0
投票

这取决于STM32型号。在某些 STM32F7 型号中,您有特殊的选项字节来指定启动地址

大多数STM32 MCU没有它,处理器从FLASH(或RAM /系统ROM - 但现在我们不感兴趣)的开头开始。引导加载程序应检查固件是否存在及其完整性,然后通过

将控制权传递给固件
  • 设置堆栈指针
  • 设置向量表
  • 禁用中断
  • 将引导加载程序使用的所有外设置于复位状态

并最终调用固件重置处理程序。

© www.soinside.com 2019 - 2024. All rights reserved.