STM32F2?STM32F4? 的System memory 地址从0x1FFF0000开始的,
我看了最新的HAL库,里面也没有System memory 的地址定义,看来ST官方是不想让我们用系统BOOT中的功能了,
但是鉴于ST系统bootloader的稳定性与可靠性,还有ISP上位机的丰富性、通用性,用起来还是很不错了,
怎么从应用跳转到bootloader呢,可以使用下面的函数,Jump_To_APP(0x1FFF0000),就直接进入到系统bootloader中了,
void Jump_To_APP(uint32_t app_address) { ?? ?void (*pUserApp)(void); ?? ?uint32_t JumpAddress; ??? ? ?? ?__asm("CPSID ?I"); ?? ?//关中断
?? ?JumpAddress = *(volatile uint32_t*) (app_address+4); ?? ?pUserApp = (void (*)(void)) JumpAddress; ?? ?/* Initialize user application's Stack Pointer */ ?? ?__set_MSP(*(volatile uint32_t*) app_address); ?? ?pUserApp(); }
在跳转到Bootloader 之前,有几个事情必须要做好: 1) 关闭所有外设的时钟 2) 关闭使用的PLL 3) 禁用所有中断 4) 清除所有挂起的中断标志位
说真的,自从cortex-M推出以来,我自定义个bootloader太容易了,“一跳”就完成了,如果用cube来做,三分钟搞定,
记得我在LPC2294上做bootloader,真是太难了,耗费了我好长时间才稳定下来。
1,要做用户态与内核态的切换,
2 要搬移中断向量表。
|