Skip to main content
PFlor.2
Senior II
Dec 13, 2024 12:21 AM UTC
Solved

Files for STM32H563 External Loader

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;
}
This topic has been closed for replies.
Tesla DeLorean
Tesla DeLoreanBest answer
Guru
Dec 18, 2024 10:31 PM UTC

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 Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..

10 replies

Tesla DeLorean
Guru
Dec 13, 2024 1:57 AM UTC
Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
PFlor.2
PFlor.2Author
Senior II
Dec 13, 2024 3:33 AM UTC

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
Dec 18, 2024 10:31 PM UTC

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 Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Associate III
Apr 13, 2025 5:41 PM UTC

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,