- 如果在IAP中使用到了外设,那么在APP使用这些外设前,需要Deinit这些外设。deinit可以在app开始的时候,也可以在IAP跳转到APP之前操作。我为了把IAP功能集中,把Deinit的工作翻到了IAP中去做。
- 如果在iap中没有使用中断,那么跳转前只需要对照IAP外设的初始部分,逐个Deinit、关闭时钟即可。
- 如果在iap中使用到了中断,那么需要做以下部分:
- 在NVIC中关闭外设对应的中断使能(NVIC_DisableIRQ)
- 尤其注意systick的中断使能
LL_SYSTICK_DisableIT
- 尤其注意systick的中断使能
- Deinit外设(初始化寄存器+关闭外设时钟)
- 尤其注意把RCC Deinit
- 关闭总线的时钟
- 代码如下:
LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_ALL); LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_ALL);
- 代码如下:
- 在NVIC中关闭外设对应的中断使能(NVIC_DisableIRQ)
- 如果在IAP跳转前关闭了全局中断,需要在APP中打开全局中断。否则就无法进入中断。当然,也可以无需关闭全局中断,而是在IAP中处理完所有中断后,把外设一个个关闭,NVIC的中断使能一个个disable掉。