Různé způsoby, jak STM32 programovat: (1) ST-Link (USB <-> SWDIO/SWDCK) • Klient: stm/stlink/st-flash • Asi nejspolehlivější metoda. Jen se občas stane, že se po naprogramování procesor nezresetuje pořádně, takže program nenaběhne. Explicitní zresetování st-flashem pomůže. (2) Sériový boot-loader v ROM • Aktivuje se nastavením BOOT0=1, BOOT1=0. • Na STM32F103 komunikuje po USART1. Může se hodit připojit DTR na RESET, aby se dalo resetovat na dálku. • Na některých BluePillech nefunguje spolehlivě: po resetu se neprobudí, je potřeba power cycle. Na klonech od RobotDynu vypadá funkčně. • Pozor na to, že příkaz "goto" sice skočí do flashnutého kódu, ale od adresy 0 je stále aliasován boot-loader, takže je potřeba před povolením přerušení přesunout interrupt vector zápisem do SCB_VTOR. • Klient: stm/stm32flash/stm32flash (3) Flashnutý boot-loader s USB DFU • Flashnout stm/STM32duino-bootloader/bootloader_only_binaries/ (pro BluePill je správná verze generic_boot20_pc13.bin) • Na GPIO B2 očekává tlačítko aktivní v 1 (to je tentýž pin, kde se při resetu čte BOOT1). • Klient: dfu-util (Debian má zabalíčkované) • Pozor, programy pak musí začínat od adresy 0x8002000 – to se upravuje v linker scriptu. Boot-loader při spouštění programu sám přesměruje interrupt vektor na tuto adresu.