temp = (data[3] << 24) | (data[2] << 16) | (data[1] <<8) | data[0]; *(__IO uint32_t*)start_address = temp; __DSB(); while (FLASH->SR & FLASH_SR_BSY) { }