1 Různé způsoby, jak STM32 programovat:
3 (1) ST-Link (USB <-> SWDIO/SWDCK)
5 • Klient: stm/stlink/st-flash
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.
11 (2) Sériový boot-loader v ROM
13 • Aktivuje se nastavením BOOT0=1, BOOT1=0.
15 • Na STM32F103 komunikuje po USART1. Může se hodit připojit DTR
16 na RESET, aby se dalo resetovat na dálku.
18 • Na některých BluePillech nefunguje spolehlivě: po resetu
19 se neprobudí, je potřeba power cycle. Na klonech od RobotDynu
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
27 • Klient: stm/stm32flash/stm32flash
29 (3) Flashnutý boot-loader s USB DFU
31 • Flashnout stm/STM32duino-bootloader/bootloader_only_binaries/
32 (pro BluePill je správná verze generic_boot20_pc13.bin)
34 • Na GPIO B2 očekává tlačítko aktivní v 1
35 (to je tentýž pin, kde se při resetu čte BOOT1).
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
41 • Klient: dfu-util (Debian má zabalíčkované)
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.