如何让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开发板用户手册第10章 STM32F429的FLASH,RAM和栈使用情况(map和htm文件)
STM32F429第3章 ThreadX USBX协议栈移植到STM32F429
STM32F429 定时器触发 USART DMA 传输问题