Skip to main content
h.musabyacel
Associate
April 4, 2019
Question

Hello everyone, I used a bootloader for Stm32f1xx, but if I use hal_delay after the jump function, the microcontroller stops working. I'm waiting for your help.

  • April 4, 2019
  • 2 replies
  • 640 views

if (HAL_GPIO_ReadPin(button_GPIO_Port,button_Pin)==1) //mypushbutton==1

 { 

  /* If Key is pressed */

  /* Execute the IAP driver in order to re-program the Flash */

  printf("\r\n\r\n");

  Main_Menu();

 }

// /* Keep the user application running */

 else

 {

if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

  {

   /* Jump to user application */

   JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

   Jump_To_Application = (pFunction) JumpAddress;

   /* Initialize user application's Stack Pointer */

   __set_MSP(*(__IO uint32_t*) ApplicationAddress);

HAL_UART_DeInit(&huart1);

HAL_UART_MspDeInit(&huart1);

HAL_RCC_DeInit();

HAL_MspDeInit();

HAL_DeInit();

HAL_PWR_DeInit();

__disable_irq();

__DSB();

Jump_To_Application();

  }

}

This topic has been closed for replies.

2 replies

Tesla DeLorean
Guru
April 4, 2019

Don't jump from interrupt/callback context.

And when you disable interrupts at the processor level expect to have to re-enable them if you ever want to see them again.

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
h.musabyacel
Associate
April 5, 2019

thanks for your answer,

when I did what you said program is running but if I use delay function program stops working. 

no problem when I use USART interrupt, but if I use a delay, processor stops working.

what do you think about this problem?