]> mj.ucw.cz Git - home-hw.git/blob - BOOT
Iris: Init
[home-hw.git] / BOOT
1 Různé způsoby, jak STM32 programovat:
2
3 (1) ST-Link (USB <-> SWDIO/SWDCK)
4
5   •  Klient: stm/stlink/st-flash
6
7   •  Asi nejspolehlivější metoda. Jen se občas stane, že se po
8      naprogramování procesor nezresetuje pořádně, takže program
9      nenaběhne. Explicitní zresetování st-flashem pomůže.
10
11 (2) Sériový boot-loader v ROM
12
13   •  Aktivuje se nastavením BOOT0=1, BOOT1=0.
14
15   •  Na STM32F103 komunikuje po USART1. Může se hodit připojit DTR
16      na RESET, aby se dalo resetovat na dálku.
17
18   •  Na některých BluePillech nefunguje spolehlivě: po resetu
19      se neprobudí, je potřeba power cycle. Na klonech od RobotDynu
20      vypadá funkčně.
21
22   •  Pozor na to, že příkaz "goto" sice skočí do flashnutého kódu,
23      ale od adresy 0 je stále aliasován boot-loader, takže je potřeba
24      před povolením přerušení přesunout interrupt vector zápisem
25      do SCB_VTOR.
26
27   •  Klient: stm/stm32flash/stm32flash
28
29 (3) Flashnutý boot-loader s USB DFU
30
31   •  Flashnout stm/STM32duino-bootloader/bootloader_only_binaries/
32      (pro BluePill je správná verze generic_boot20_pc13.bin)
33
34   •  Na GPIO B2 očekává tlačítko aktivní v 1
35      (to je tentýž pin, kde se při resetu čte BOOT1).
36
37   •  Už máme vlastní verzi, viz lib/dfu-bootloader.c. Oproti tomu
38      původnímu má rozumné checksumy a správně programuje PLL, takže
39      se nezasekává.
40
41   •  Klient: dfu-util (Debian má zabalíčkované)
42
43   •  Pozor, programy pak musí začínat od adresy 0x8002000 –
44      to se upravuje v linker scriptu. Boot-loader při spouštění
45      programu sám přesměruje interrupt vektor na tuto adresu.