STM32 跳转系统BootLoader
STM32 进入系统 bootLoader 主要有两种方法:
(1)一种是设置 boot 引脚,进入系统 bootLoader。
(2) 一种是应用程序跳转到系统 bootLoader。
串口1配置如下:
使用LL库可以使生成的代码能小一点。
GPIO使用HAL库可以打开HAL库定义,如果使用Flash库函数时就要打开HAL库,因为flash没有LL库。
boot.c源码如下:
#include "main.h"
#include "boot.h"
#define ENABLE_INT() __set_PRIMASK(0)
#define DISABLE_INT() __set_PRIMASK(1)
#if 1
void (*SysMemBootJump)(void);
__IO uint32_t BootAddr = 0x1FFFF000;
void JumpToBootloader(void)
{
uint32_t i=0;
DISABLE_INT();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
LL_RCC_DeInit();
for (i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
ENABLE_INT();
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
__set_MSP(*(uint32_t *)BootAddr);
SysMemBootJump();
while (1)
{
}
}
#endif
MDK调试:
在跳转前面打个断点:
等待跳转,成功后会跳转到 0x1FFFF000 附近。一般是0x1FFFF020。
(づ ̄3 ̄)づ╭❤~biubiu
1 程序将在 0x08000000开始运行,再进入main函数。
2 进入系统BootLoader后在汇编窗口才能看到,运行后就可以用串口烧写了。
3 串口配置要和mcu相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)