AnsweredAssumed Answered

How do execute a program from a location other than the beginning of flash memory?

Question asked by Gordon Madden on Jun 24, 2017
Latest reply on May 11, 2018 by alireza nazem

Using STM32F417, programs uploaded to internal flash start executing at address 0x0800_0000.


I want to start the program at 0x0800_0010 instead. The reason for the extra bytes at the beginning of flash is to save status bytes that indicate the state of the startup or bootloader in case of a failure during firmware updates.


By going into flash options in KEIL uVison, I can change the ROM settings to program to flash starting at that address.

If I then go to the LINK Utility, I can see that the program does indeed start at the new address, but it will not execute.

The program is still probably still starting at the beginning of flash.


Searching through the files in the project, I find various #defines that may or may not affect where the program starts running. I have stepped through the startup sequence and did not see anything with that address that could be changed.

I tried changing the base address for the Ram fro 0x0800_0000 to the new address, thusly:

#define RamAddress        (IO_BASE+0x08000010)


How do I get the program to start executing at 0x0800_0010 instead of 0x0800_0000?


Thank you for your help!