Hallo zusammen,
laut AN2606 soll sich der Bootloader für ein STM32F1105/107 sich im
Speicher bei 0x1FFFB000 befinden.
Wenn ich mir diesen aber, während eines Debugvorgangs anschaue, dann
sehe ich, das ab dieser Adresse die ersten 5 WORD's mit nullen gefüllt
sind.
Verwundert bin ich, weil ich dachte, das das erste WORD der "main stack
pointer" und das vierte WORD der Systemmemory reset vector wäre.
Habe ich eine AN evtl. übersehen? Im RM konnte ich nichts gegenteiliges
finden.
Hier ein Ausschnitt:
1 | 0x1FFFB000 : 0x1FFFB000 <Hex>
|
2 | Address 0 - 3 4 - 7 8 - B C - F
|
3 | 1FFFB000 00000000 00000000 00000000 00000000
|
4 | 1FFFB010 00000000 CDE9FF1F CDE9FF1F 00000000
|
5 | 1FFFB020 00000000 00000000 00000000 CDE9FF1F
|
6 | 1FFFB030 CDE9FF1F 00000000 CDE9FF1F CDE9FF1F
|
7 | 1FFFB040 CDE9FF1F CDE9FF1F CDE9FF1F CDE9FF1F
|
8 | 1FFFB050 CDE9FF1F CDE9FF1F CDE9FF1F CDE9FF1F
|
9 | 1FFFB060 CDE9FF1F CDE9FF1F CDE9FF1F CDE9FF1F
|
10 | 1FFFB070 CDE9FF1F CDE9FF1F CDE9FF1F CDE9FF1F
|
Brauchen tue ich das, weil ich aus meiner Applikation heraus den
Bootloader aufrufen möchte:
1 | void StartBootLoader()
|
2 | {
|
3 |
|
4 | SysMemBootJump=(void (*)) (*((u32 *) 0x1FFFB000)); // Adresse stimmt wohl nicht
|
5 |
|
6 | RCC_DeInit();
|
7 | SysTick->CTRL = 0;
|
8 | SysTick->LOAD = 0;
|
9 | SysTick->VAL = 0;
|
10 | __set_PRIMASK(1);
|
11 | __set_MSP(0x00000000); // // Adresse stimmt wohl nicht
|
12 | SysMemBootJump();
|
13 |
|
14 | }
|