Custom bootloader STM32F405VG
Hello,
I'm working in a custom bootloader. I have follow many discussions here and then i end up with this code.commenting the function PerformFirmwareUpdate() the code works ok!pFunction appEntry;
uint32_t appStack;
HAL_Init();
/* Get the application stack pointer (First entry in the application vector table) */
appStack = (uint32_t) *((__IO uint32_t*)EXEC_ZONE_ADDR);
/* Get the application entry point (Second entry in the application vector table) */
appEntry = (pFunction) *(__IO uint32_t*) (EXEC_ZONE_ADDR);// + 4);
if (CheckFirmwareUpdate)
//PerformFirmwareUpdate();
HAL_DeInit();
/* Reconfigure vector table offset register to match the application location */
SCB->VTOR = EXEC_ZONE_ADDR;
/* Set the application stack pointer */
__disable_irq();
__set_MSP(appStack);
__DSB();
/* Start the application */
appEntry();
when i uncomment the function which copies the program in the execution sector (5), then i get the problem:
theappEntry gets the value of sector 6 instead of sector 5 which is the real value assigned.
void PerformFirmwareUpdate(void)
{ if (FlashErase(FLASH_SECTOR_5))//(FLASH_SECTOR_5); { uint32_t *data_ptr = (uint32_t *)PROG_ZONE_ADDR; HAL_FLASH_Unlock(); for(uint32_t i = 0; i < (SECTOR_SIZE); i += sizeof(uint32_t), data_ptr++ ) { if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, EXEC_ZONE_ADDR + i, *data_ptr) != HAL_OK) { //WORD = 32bits break; } FLASH_WaitForLastOperation (4000); //in ms, max time to erase whole sector; see datasheet } HAL_FLASH_Lock(); } return;}Thanks to all, I hope someone could help me with this!
#stm2 #bootloader #stm32f4 #!stm32-!bootloader #c