Bootloader (STM32L496RG) application stuck at first HAL_Delay
I create 2 simple applications on Nucleo-L476RG.
Both application have default settings from STM32CUBEIDE.
1 - bootloader - just jump to 0x08010000
2 - Application - led flashings with HAL_Delay function
Bootloader jumps into application, pplication starts - then stuck into HAL_Delay.
See the modification to both app:
'Bootloader':
/* USER CODE BEGIN 0 */
typedef void (*pFunction)(void); /*!< Function pointer definition */
#define APP_ADDRESS (uint32_t)0x08010000
void jump2APP(){
uint32_t JumpAddress = *(__IO uint32_t*)(APP_ADDRESS + 4);
pFunction Jump = (pFunction)JumpAddress;
HAL_RCC_DeInit();
HAL_DeInit();
__disable_irq();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
SCB->VTOR = APP_ADDRESS;
__set_MSP(*(__IO uint32_t*)APP_ADDRESS);
Jump();
}
/* USER CODE END 0 */
[....]
uint8_t i=20;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(i*30+1);
if(!i--)
jump2APP();
}
Application:
* USER CODE BEGIN WHILE */
volatile uint32_t cnt=0;
while(cnt++<500000);
cnt=0;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
while(cnt++<5000000);
cnt=0;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
while(cnt++<5000000);
cnt=0;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
while(cnt++<5000000);
cnt=0;
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
while(cnt++<5000000);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(100);
}
/* USER CODE END 3 */
And in the linker file:
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
RAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = 32K
FLASH (rx) : ORIGIN = 0x8010000, LENGTH = 1024K
}
