Skip to main content
Ogulcan Ariyurek
Associate III
May 7, 2019
Question

Switching from STM32F407VGT6 to STM32F437VIT6 bootloader application problem

  • May 7, 2019
  • 1 reply
  • 848 views

Hi,

I've switched to STM32F437VIT6 from STM32F407VGT6, but I also switch my bootloader application.

In this application, there is a section that jumps to the real application that we've loaded using the bootloader:

 /* Test if Key push-button is not pressed */
 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0x00)
 { /* Key push-button not pressed: jump to user application */
 pFlashStartAddr = *(__IO uint32_t*)FLASH_USER_START_ADDR;
	pFlashRes = (*(__IO uint32_t*)FLASH_USER_START_ADDR) & 0x2FFE0000;
 /* Check if valid stack address (RAM address) then jump to user application */
 if (((*(__IO uint32_t*)FLASH_USER_START_ADDR) & 0x30000000 ) == 0x20000000)
 {
 /* Jump to user application */
 JumpAddress = *(__IO uint32_t*) (FLASH_USER_START_ADDR + 4);
 Jump_To_Application = (pFunction) JumpAddress;
 /* Initialize user application's Stack Pointer */
 __set_MSP(*(__IO uint32_t*) FLASH_USER_START_ADDR);
 Jump_To_Application();
 }
 }
 /* enter in IAP mode */
	else
	{
 //Initialize kernel
 osInitKernel();
 //Configure debug UART
 debugInit(115200);
...

Please note that:

#define FLASH_USER_START_ADDR ADDR_FLASH_SECTOR_5 /* Start address of user Flash area */
#define FLASH_USER_END_ADDR ADDR_FLASH_SECTOR_23 /* End address of user Flash area */
 
/* Base address of the Flash sectors */ 
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base address of Sector 0, 16 Kbytes */
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) /* Base address of Sector 1, 16 Kbytes */
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) /* Base address of Sector 2, 16 Kbytes */
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) /* Base address of Sector 3, 16 Kbytes */
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) /* Base address of Sector 4, 64 Kbytes */
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) /* Base address of Sector 5, 128 Kbytes */
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) /* Base address of Sector 6, 128 Kbytes */
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) /* Base address of Sector 7, 128 Kbytes */
#define ADDR_FLASH_SECTOR_8 ((uint32_t)0x08080000) /* Base address of Sector 8, 128 Kbytes */
#define ADDR_FLASH_SECTOR_9 ((uint32_t)0x080A0000) /* Base address of Sector 9, 128 Kbytes */
#define ADDR_FLASH_SECTOR_10 ((uint32_t)0x080C0000) /* Base address of Sector 10, 128 Kbytes */
#define ADDR_FLASH_SECTOR_11 ((uint32_t)0x080E0000) /* Base address of Sector 11, 128 Kbytes */
#define ADDR_FLASH_SECTOR_12 ((uint32_t)0x08100000) /* Base address of Sector 12, 16 Kbytes */
#define ADDR_FLASH_SECTOR_13 ((uint32_t)0x08104000) /* Base address of Sector 13, 16 Kbytes */
#define ADDR_FLASH_SECTOR_14 ((uint32_t)0x08108000) /* Base address of Sector 14, 16 Kbytes */
#define ADDR_FLASH_SECTOR_15 ((uint32_t)0x0810C000) /* Base address of Sector 15, 16 Kbytes */
#define ADDR_FLASH_SECTOR_16 ((uint32_t)0x08110000) /* Base address of Sector 16, 64 Kbytes */
#define ADDR_FLASH_SECTOR_17 ((uint32_t)0x08120000) /* Base address of Sector 17, 128 Kbytes */
#define ADDR_FLASH_SECTOR_18 ((uint32_t)0x08140000) /* Base address of Sector 18, 128 Kbytes */
#define ADDR_FLASH_SECTOR_19 ((uint32_t)0x08160000) /* Base address of Sector 19, 128 Kbytes */
#define ADDR_FLASH_SECTOR_20 ((uint32_t)0x08180000) /* Base address of Sector 20, 128 Kbytes */
#define ADDR_FLASH_SECTOR_21 ((uint32_t)0x081A0000) /* Base address of Sector 21, 128 Kbytes */
#define ADDR_FLASH_SECTOR_22 ((uint32_t)0x081C0000) /* Base address of Sector 22, 128 Kbytes */
#define ADDR_FLASH_SECTOR_23 ((uint32_t)0x081E0000) /* Base address of Sector 23, 128 Kbytes */

The loading part of my application works fine but the jumping part is not working, gives a hard fault.

Here is my scatter file:

LR_IROM1 0x08000000 0x200000
{
 ER_IROM1 0x08000000 0x200000
 {
 *.o (RESET, +First)
 *(InRoot$$Sections)
 .ANY (+RO)
 }
 
 RW_IRAM1 0x20000000 0x30000
 { 
 .ANY (+RW +ZI)
 }
 
 ARM_LIB_STACK 0x20020000 EMPTY -0x1000
 {
 }
 
 ARM_LIB_HEAP 0x20010000 EMPTY 0x0F000
 {
 }
}

How can I fix this issue?

Thanks in advance.

Regards,

Ogulcan

This topic has been closed for replies.

1 reply

Ogulcan Ariyurek
Associate III
May 7, 2019

If I check the "Use Memory Layout from Target Dialog", I get the attached error.