新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2016-10-11
- 在线时间
- 3 小时
|
5金钱
准备使用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);
}
|
|