各位大神好,遇到一个奇怪的问题,我从APP跳转到bootloader不成功,但是bootloader升级没有问题,重新上电也可以运行,但是就是无法跳转成功,源代码如下,希望有人能解答下! void JumpToBootloader(void) { uint32_t i=0; void (*SysMemBootJump)(void); // 申明一个函数指针 __IO uint32_t BootAddr = 0x08000000; //boot地址 __set_PRIMASK(1); //关全局中断 //关定时器 SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; //关闭所有中断,清除所有中断挂起标志 HAL_RCC_DeInit(); // for (i = 0; i < 8; i++) { NVIC->ICER=0xFFFFFFFF; NVIC->ICPR=0xFFFFFFFF; } __set_PRIMASK(0); //开全局中断 // 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4))); //设置主堆栈指针 __set_MSP(*(uint32_t *)BootAddr); //在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 __set_CONTROL(0); //跳转到系统BootLoader SysMemBootJump(); //跳转成功的话,不会执行到这里,用户可以在这里添加代码 while (1) { } } |
关于STM32H563的STlink-V3无法识别的问题咨询
stm32 双ADC模式,同步规则加同步注入模式,ADC2初始化进入error handler
采用USB 全速CDC的时候(12M 波特率),motor pilot的串口速度可以设置为多少,能设置成7372800吗
超频实验766Mhz-一款基于STM32H723的多功能 最强的stm32多功能控制板
请问在哪里可以找到STM32H5xx,USB官方库
STM32H750 uart/RS485 速率问题
STM32H743 FreeRtos LWIP ping进入configASSERT
STM32H723ZGT6的FMC没有信号输出
【STM32H503评测】利用UART_Printf打印
【STM32H503评测】点灯
楼主您好。请问一下BOOT的程序编译时的起始地址是多少?和以下计算后的地址一样吗?建议这个地址和编译时配置的地址一样就行了。
* SysMemBootJump = (void ()(void)) (((uint32_t ) (BootAddr + 4)));
[md]您好,bootloader地址和设置的跳转地址是一样的,断点之后重启可以正常重启,但是就是跳转不了。
我看了一下,我写的APP跳转也是这样写的。我一般是直接软件复位进行进入boot的操作。楼主需要从应用程序跳转到boot程序时,需要先关闭所有的中断后,再跳转。另外,是否可以加一些打印看一下是否跳转到boot了,但是由于某些中断开启后,导致找不到中断入口,进入硬件错误中断了。