stm32带BootLoader情况下,需要重新映射中断向量表

应用程序起来第一件事,映射中断向量表。因为M0中断向量表在0x0,所以起来的时候把程序首地址0x8004000映射到ram0x200000000,然后配置一下__HAL_SYSCFG_REMAPMEMORY_SRAM();

https://blog.csdn.net/jxgxlm2008/article/details/53066544

https://blog.csdn.net/feifeiyunyun8/article/details/77705260

bootloader跳到IAP

https://blog.csdn.net/zhashuiguangzi/article/details/51700369

https://blog.csdn.net/tt1995cc/article/details/80481429

hex文件是明文,需要生成bin文件发送给bootloader写flash,

https://www.cnblogs.com/alanfeng/p/5659253.html

http://www.51hei.com/bbs/dpj-138101-1.html

APP程序,启动了系统时钟后,再映射中断向量表

  __HAL_RCC_SYSCFG_CLK_ENABLE();
  /* USER CODE BEGIN Init */
  memcpy((void*)0x20000000, (void*)IAP_ADDR, 0xB4); 
  __HAL_SYSCFG_REMAPMEMORY_SRAM();
  __HAL_RCC_PWR_CLK_ENABLE();

退出IAP bootloader前,先把boot开的中断关闭掉,等到APP端初始化完成后,再开启中断。不然APP那边可能还没初始化好,就一直跳中断了。或者中断程序还没初始化就跳中断,还可能导致崩溃。

其他参考上面的文档

你可能感兴趣的:(stm32带BootLoader情况下,需要重新映射中断向量表)