Mercurial > public > ostc4
comparison Discovery/Src/firmwareJumpToApplication.c @ 38:5f11787b4f42
include in ostc4 repository
| author | heinrichsweikamp |
|---|---|
| date | Sat, 28 Apr 2018 11:52:34 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 37:ccc45c0e1ea2 | 38:5f11787b4f42 |
|---|---|
| 1 /** | |
| 2 ****************************************************************************** | |
| 3 * @file firmwareJumpToApplication.c | |
| 4 * @author heinrichs weikamp gmbh | |
| 5 * @version V0.0.1 | |
| 6 * @date 05-May-2015 | |
| 7 * @version V0.0.1 | |
| 8 * @since 05-May-2015 | |
| 9 * @brief jump to application in higher flash region | |
| 10 * | |
| 11 @verbatim | |
| 12 ============================================================================== | |
| 13 ##### How to use ##### | |
| 14 ============================================================================== | |
| 15 | |
| 16 ============================================================================== | |
| 17 ##### From AN2557 ##### | |
| 18 STM32F10xxx In-Application programming CD00161640.pdf 2010 | |
| 19 ============================================================================== | |
| 20 User program conditions | |
| 21 The user application to be loaded into the Flash memory using IAP should be built with | |
| 22 these configuration settings: | |
| 23 1. Set the program load address at 0x08003000, using your toolchain linker file | |
| 24 2. Relocate the vector table at address 0x08003000, using the | |
| 25 "NVIC_SetVectorTable"function or the VECT_TAB_OFFSET definition inside the | |
| 26 "system_stm32f10x.c" | |
| 27 | |
| 28 can be found here system_stm32f4xx.c | |
| 29 | |
| 30 | |
| 31 @endverbatim | |
| 32 ****************************************************************************** | |
| 33 * @attention | |
| 34 * | |
| 35 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> | |
| 36 * | |
| 37 ****************************************************************************** | |
| 38 */ | |
| 39 | |
| 40 /* Includes ------------------------------------------------------------------*/ | |
| 41 #include "stm32f4xx_hal.h" | |
| 42 #include "stdio.h" | |
| 43 #include "firmwareJumpToApplication.h" | |
| 44 | |
| 45 /* Exported variables --------------------------------------------------------*/ | |
| 46 | |
| 47 /* Private types -------------------------------------------------------------*/ | |
| 48 typedef void (*pFunction)(void); | |
| 49 #define ApplicationAddress 0x08040000 | |
| 50 | |
| 51 /* Private variables ---------------------------------------------------------*/ | |
| 52 pFunction Jump_To_Application; | |
| 53 uint32_t JumpAddress; | |
| 54 | |
| 55 /* Private function prototypes -----------------------------------------------*/ | |
| 56 | |
| 57 /* Exported functions --------------------------------------------------------*/ | |
| 58 uint8_t firmware_MainCodeIsProgammed(void) | |
| 59 { | |
| 60 uint32_t content_start; | |
| 61 content_start = *(__IO uint32_t*)ApplicationAddress; | |
| 62 | |
| 63 if ((content_start & 0x2FFE0000 ) == 0x20000000) | |
| 64 return 1; | |
| 65 else | |
| 66 return 0; | |
| 67 } | |
| 68 | |
| 69 void firmware_JumpTo_Application(void) | |
| 70 { | |
| 71 /* Test if user code is programmed starting from address "ApplicationAddress" */ | |
| 72 if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) | |
| 73 { | |
| 74 /* Jump to user application */ | |
| 75 JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); | |
| 76 Jump_To_Application = (pFunction) JumpAddress; | |
| 77 /* Initialize user application's Stack Pointer */ | |
| 78 __set_MSP(*(__IO uint32_t*) ApplicationAddress); | |
| 79 Jump_To_Application(); | |
| 80 } | |
| 81 while (1) | |
| 82 {} | |
| 83 } | |
| 84 | |
| 85 /* Private functions ---------------------------------------------------------*/ |
