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>&copy; 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 ---------------------------------------------------------*/