I have the cool STM32F429 discovery board and am using MDK-ARM Lite for evaluation.
I am wanting to use the FW_Upgrade project as a test system for my own product release but I am having a problem getting started. The FW_upgrade project comes with the software download from ST for the STM32F429 discovery board.
I compile/link the MDK-ARM FW_Upgrade project and get a .hex output which I use to program the board. I then load on a USB key one of the two binaries (.bin) which come with the project in the binary folder, either SysTick or LTDC_ColorKeying, and rename to image.bin. And as documented, the image.bin gets downloaded from the USB key and runs.
So far so good.
My next step is to see if I can generate Systick and LTDC_ColorKeying .bin by recompile and link the projects for MDK-ARM.
On the software download from ST are a number of peripheral projects, one of which is SysTick. I go in there, compile/link this project with MDK-ARM and get a .hex output. For a test, I program the board with the .hex directly and it works. So I know I can compile/link the .hex file correctly. I then convert the .hex to .bin (and try to give it a starting address of 0x802000), rename it image.bin and put on USB key. After I program the board with the FW_Upgrade.hex, and insert the USB key, I get a green light, but then nothing. I am guessing that it gets downloaded, but then jumps to neverland, which makes me think that I am not converting the .hex to .bin correctly. Another time, I also try changing the "Options for Target" -> "Target" tab -> "Read/Only Memory Areas" -> "IROM" to 0x8020000. And then compile link, and use hex2bin with no starting address. But this doesnt seem to work either.
So, what specifically do I need to do to create SysTick .bin that can be put on a USB thumbdrive and then load using the FW_Upgrade program?
IROM base of 0x08020000 in the Target Pane
Make sure you set the vector table address in SystemInit() system_stm32f4xx.c
Fix this:
#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. This value must be a multiple of 0x200. */
so this works
void SystemInit(void) { .. /* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif }