从应用程序跳转到system memory DFU 失败

2019-07-20 00:26发布

准备使用stm32F429 dfu功能,现在将boot0 = 1;boot1 = 0;可以正常进入DFU模式。但是产品需求只留一个usb接口,所以用pc端发命令的方式,收到某个命令后,跳转到system memory。
现在能收到pc端的命令,收到命令后也执行到了SysMemBootJump();,但是无法进入DFU模式,不能正常枚举。
请问是我哪部分代码有问题?

while(1){
  if(bt_flag ==1)
  {
   delay_ms(500);
   JumpToBootloader();
}
}

void JumpToBootloader(void) {
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFF0000;//system memory

HAL_RCC_DeInit();//Disable RCC
SysTick->CTRL = 0;//Step: Disable systick timer and reset it to default values
SysTick->LOAD = 0;
SysTick->VAL = 0;
__set_PRIMASK(1);//Disable all interrupts
SYSCFG->MEMRMP = 0x01;//Remap system memory to address 0x0000 0000
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));//Set jump memory location for system memory
__set_MSP(*(uint32_t *)addr);//Set main stack pointer.
SysMemBootJump();

while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。