如何让STM32F429NI中的bootloader跳转到外部Nor Flash

Posted

技术标签:

【中文标题】如何让STM32F429NI中的bootloader跳转到外部Nor Flash【英文标题】:How to make the bootloader in STM32F429NI to jump to external 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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

@ 0___________ ,我刚开始使用 STM32 并且已经搜索了很多东西,他们通常会提到要更改引导引脚和东西,并且无法获得线索,你能分享一下线索吗或示例开始。

以上是关于如何让STM32F429NI中的bootloader跳转到外部Nor Flash的主要内容,如果未能解决你的问题,请参考以下文章

如何在 STM32F429 中找到 APB1 时钟的值

STM32F429开发板用户手册第10章 STM32F429的FLASH,RAM和栈使用情况(map和htm文件)

STM32F429第3章 ThreadX USBX协议栈移植到STM32F429

STM32F429 定时器触发 USART DMA 传输问题

STM32F429的DSP教程第33章 STM32F429不限制点数FFT实现

STM32F429开发板用户手册第19章 STM32F429的GPIO应用之按键FIFO