【问题标题】:How to make the bootloader in STM32F429NI to jump to external Nor Flash如何让STM32F429NI中的bootloader跳转到外部Nor Flash
【发布时间】:2021-11-21 07:36:07
【问题描述】:

我正在研究 STM32F429NI 评估板,我有一个让 LED 闪烁的代码。我希望闪烁 LED 代码出现在外部或闪存中,并且驻留在内部闪存的引导加载程序必须将控制权转移到 STM32F429NI 的外部或闪存。

STM32F429NI评估板参考手册:https://www.st.com/en/microcontrollers-microprocessors/stm32f429ni.html#documentation

我遵循的步骤是:

void jump_to_external_flash(uint32_t address)
{
  uint32_t msp_value = *(__IO uint32_t*)address;
  void (*reset_handler)(void);

  SysTick->CTRL = 0;
  SysTick->LOAD = 0;
  SysTick->VAL = 0;

  HAL_DeInit();

  __set_MSP(msp_value);
  uint32_t rst_handler_addr = *(__IO uint32_t*)(address + 0x4);
  reset_handler = (void*) rst_handler_addr;

  reset_handler();
}

在led闪烁链接脚本的代码中

MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 192K
CCMRAM (xrw)      : ORIGIN = 0x10000000, LENGTH = 64K
FLASH (rx)      : ORIGIN = 0x60000000, LENGTH = 64MB
}

【问题讨论】:

    标签: arm stm32 bootloader stm32f4 flash-memory


    【解决方案1】:

    这很简单。您需要初始化灵活内存控制器 (FMC) 以将外部闪存映射到 uC 地址空间。然后直接跳转到那里的代码。

    FLASH 仍将位于正常地址。为外部 FLASH 添加一个新的内存段。

    要对其进行编程,您可能需要编写自己的例程。此处示例:https://github.com/magicmicros/AT25Q641_ExternalLoader

    PS 不要在引导加载程序中使用 HAL 函数。

    【讨论】:

    • @ 0___________ ,我刚开始使用 STM32 并且已经搜索了很多东西,他们通常会提到要更改引导引脚和东西,并且无法获得线索,你能分享一下线索吗或示例开始。
    猜你喜欢
    • 2023-02-11
    • 2021-06-06
    • 2018-05-04
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多