跳转函数如下,实际跳转不了,请问各位大侠问题出在哪儿,多谢 #define APP_A_RELOCATION_ADDRESS 0x08000000 #define APP_B_RELOCATION_ADDRESS 0x08080000 void jump_app_task(uint8_t ABZone) { uint32_t i=0; __IO uint32_t AppAddress = 0; void (*SysMemBootJump)(void); /* 声明一个函数指针 */ /* 关闭全局中断 */ __set_PRIMASK(1); /* 关闭滴答定时器,复位到默认值*/ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* 设置所有时钟到默认状态,使用HSI时钟 */ HAL_RCC_DeInit(); /* 关闭所有中断,清除所有中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER=0xFFFFFFFF; NVIC->ICPR=0xFFFFFFFF; } SCB_DisableDCache(); /* 使能全局中断 */ __set_PRIMASK(0); if(ABZone == 0xaa) { /* 跳转到appA,首地址是MSP,地址+4是复位中断服务程序地址*/ SysMemBootJump = (void (*)(void)) (*((uint32_t *) (APP_A_RELOCATION_ADDRESS + 4))); AppAddress = APP_A_RELOCATION_ADDRESS; } else { /* 跳转到appB,首地址是MSP,地址+4是复位中断服务程序地址*/ SysMemBootJump = (void (*)(void)) (*((uint32_t *) (APP_B_RELOCATION_ADDRESS + 4))); AppAddress = APP_B_RELOCATION_ADDRESS; } /* 设置主堆栈指针*/ __set_MSP(*(__IO uint32_t*)AppAddress); /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */ __set_CONTROL(0); /* 跳转到系统BootLoader*/ SysMemBootJump(); /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */ while (1) { } } |
Flasher ARM 的自主模式通过RS232去驱动编程
stm32u545 boot
明明已经包含了头文件,为什么编译会提示未定义符号错误?
myST账号无法注册导致stm32cubemx无法下载hal库的固件包
定义字符数据为什么会编译出错?
有没有官方,面向OV系列摄像头的驱动?
有没有STM32F030C8T6移植好RT-THREAD的模板
ST-LINK程序下载不进去
H743的PA6引脚外部中断映射,在参考手册和数据手册找不到具体说明?
有关电路原理图问题
默认不都是0x08000000执行,你这个那不是相当于可以应用和Boot来回跳转?重启机制是什么?