当前位置: 代码迷 >> 综合 >> STM32H7 bootloader 跳转到APP后死机问题
  详细解决方案

STM32H7 bootloader 跳转到APP后死机问题

热度:45   发布时间:2024-03-06 08:29:22.0

1. Bootloader代码中打开了一些中断,例如定时器、systick、串口、外部中断等中断,跳转到App后,会出现一些莫名的App死机问题,例如:

(1)改变bootloader的编译等级,不优化后,有时候App就不死机,原因:不优化bootloader代码跑得较快,systick中断跑在SCB->VTOR = APPLICATION_ADDRESS之前执行,这样也没问题。
(2)在SCB->VTOR = APPLICATION_ADDRESS;增加__ISB(); __DSB();有时App也不会死机。

2. 本实验中在bootloader中打开了systick定时器,所以此处关闭systick的运行,也就不会在再次使能前产生中断。

3. 实际代码

3.1 Bootloader部分
void Run_App(void)
{
    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */HAL_TIM_Base_MspDeInit(&htim3);		//关闭App中没使用外设/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
// if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000){
    /* Jump to user application */JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);Jump_To_Application = (pFunction) JumpAddress;/* Initialize user application's Stack Pointer */__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);/* Jump to application */Jump_To_Application();}
}

3.2 App部分

int main(void{
    SCB->VTOR = APPLICATION_ADDRESS;
//以下为其他代码
}