Skip to main content
PFlor.2
Senior II
December 13, 2024
Solved

Files for STM32H563 External Loader

  • December 13, 2024
  • 2 replies
  • 3192 views

Anybody have Linker.ld and Loader_src.c file for STM32H563?  I have done one for the STM32H743 on another project and made an attempt to modify these for the STM32H563 but it's not working.  Appreciate any guidance.

I changed the RAM location from 0x24000000 for the H7 to 0x20000000 for the H5 but not sure what else is different as it pertains to a loader.

Something with the Init could be wrong...

int Init(void) {
 *(uint32_t*)0xE000EDF0 = 0xA05F0000; //enable interrupts in debug

 // Added per suggestion from ST to clear out QSPI structure
 memset(&hospi1, 0, sizeof(hospi1));

 SystemInit();

 /* ADAPTATION TO THE DEVICE
 *
 * change VTOR setting for H5 device
 * SCB->VTOR = 0x20000000 | 0x200;
 *
 * change VTOR setting for other devices
 * SCB->VTOR = 0x20000000 | 0x200;
 *
 * */
 SCB->VTOR = 0x20000000 | 0x200;

 __set_PRIMASK(0); //enable interrupts

 HAL_Init();

 SystemClock_Config();

 MX_GPIO_Init();

 __HAL_RCC_OSPI1_FORCE_RESET(); //completely reset peripheral
 __HAL_RCC_OSPI1_RELEASE_RESET();

 if (CSP_QUADSPI_Init() != HAL_OK) {
 __set_PRIMASK(1); //disable interrupts
 return LOADER_FAIL;
 }

 if (CSP_QSPI_EnableMemoryMappedMode() != HAL_OK) {
 __set_PRIMASK(1); //disable interrupts
 return LOADER_FAIL;
 }

 /*Trigger read access before HAL_QSPI_Abort() otherwise abort functionality gets stuck*/
 uint32_t a = *(uint32_t*) 0x90000000;
 a++;

 __set_PRIMASK(1); //disable interrupts
 return LOADER_OK;
}
Best answer by Tesla DeLorean

The VTOR address would be 0x20003000 | 0x200 if using interrupts, like ST does. The address is aligned to 0x200 (ie 8 zeros) boundaries.

The H7 build at 0x24000004, most others at 0x20000004. It's basically the address of the primary RAM

The .map file should provide some confirmation of where g_pfnVectors resides in the build

2 replies

Tesla DeLorean
Guru
December 13, 2024
Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
PFlor.2
PFlor.2Author
Senior II
December 13, 2024

Thanks for the tip!  Does the Vector Table Offset Register (VTOR) need to be adjusted for this device like the H7?  Maybe 0x20003004 | 200?

PFlor2_0-1734108270615.png

Also I assume the H5 still uses 0x90000000 as the virtual address for external Flash over QSPI?

Tesla DeLorean
Tesla DeLoreanBest answer
Guru
December 18, 2024

The VTOR address would be 0x20003000 | 0x200 if using interrupts, like ST does. The address is aligned to 0x200 (ie 8 zeros) boundaries.

The H7 build at 0x24000004, most others at 0x20000004. It's basically the address of the primary RAM

The .map file should provide some confirmation of where g_pfnVectors resides in the build

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
Associate III
April 13, 2025

Finally HAL_Delay(); worked for me by ticking both the check boxes of "enabled" and "initialize", kindly refer to my reply at https://community.st.com/t5/stm32-mcus-touchgfx-and-gui/regarding-external-loader-with-at25q128a-nor-flash/td-p/790941 

thank you,