1、 STM32F103系列bootloader进行程序的启动的原理白话。
bootloader就是系统上电后运行的第一个程序,APP程序是我们的应用程序,APP程序也可以是上电运行的第一个程序,当整个系统就一个程序时,bootloader就=APP程序。只用当bootloader程序中实现了程序的跳转时,才称其为真正的BootLoader程序。
2、 编写BootLoader程序
编写BootLoader程序与编写正常的APP程序一样,只是需要加入跳转指令。以STM32F103RB为例,跳转指令如下(在main函数中调用):
1. #define APP_FLASH_ADDRESS (0x8010000)
2. typedef void (*pFunction)(void);
3. pFunction Jump_To_Application;
4. uint32_t JumpAddress;
5.
6. void JumpToApp(void)
7. {
8. /* Check if valid stack address (RAM address) then jump to user application */
9. if (((*(__IO uint32_t*)APP_FLASH_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
10. {
11. __disable_irq();
12. /* Jump to user application */
13. JumpAddress = *(__IO uint32_t*) (APP_FLASH_ADDRESS + 4);
14. Jump_To_Application = (pFunction) JumpAddress;
15. /* Initialize user application's Stack Pointer */
16. __set_MSP(*(__IO uint32_t*) APP_FLASH_ADDRESS);