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 ---------------------------------------------------------*/ |