Python tool for flashing and debugging STM32 devices using ST-LINK/V2


Python tool for manipulating with STM32 MCUs using ST-Link in-system programmer and debugger.


Goal of this project is to bring more flexible support for different MCUs, very simple command line interface, easier integration into Makefile for direct flashing or uploading program into SRAM and many more, simplest way to add support for new MCUs. Also any suggestions are welcome.


  • running on Linux, Mac OS/X (also on OS/X 10.11.x) and Windows
  • simple command line interface
  • detect MCU
  • dump registers and memory
  • write registers
  • download memory to binary file
  • upload binary or SREC file into memory
  • FLASH binary or SREC file to all STM32F
  • basic runtime control: reset, halt, step, run
  • support ST-Link/V2 and ST-Link/V2-1

Planed features

  • FLASH support for other MCU types (STM32L)
  • FLASH information block (system memory, option bytes and OTP area)
  • connecting under RESET
  • stop Watchdog in debug mode to prevent device restart
  • allow to control breakpoints or watchpoints
  • support for more ST-Link devices connected at once
  • other file formats (SREC, HEX, ELF, …)
  • pip installer
  • proxy to GDB
  • and maybe GUI
  • support for ST-Link/V1 is NOT planed, use ST-Link/V2 or V2-1 instead



  • Python v3.x (tested with python-3.4 and 3.5)
  • pyusbs
  • libusb or any other libusb driver
    • for Windows copy libusb-1.0.dll into Windows/System32 directory


  • Download and unpack or git clone
  • Connect ST-LINK/V2, with latest firmware
  • Run ./ --help (or python3 ... - depend on python installation)


”` usage: pystlink [-h] [-q | -i | -v | -d] [-V] [-c CPU] [-r] [-u] [action [action …]]

pystlink v0.0.0 (ST-LinkV2) ©2015 by [email protected]

optional arguments: -h, –help show this help message and exit -V, –version show program’s version number and exit -c CPU, –cpu CPU set expected CPU type [eg: STM32F051, STM32L4] -r, –no-run do not run core when program end (if core was halted) -u, –no-unmount do not unmount DISCOVERY from ST-Link/V2-1 on OS/X platform

set verbosity level: -q, –quiet -i, –info default -v, –verbose -d, –debug

actions: action actions will be processed sequentially

list of available actions: dump:core print all core registers (halt core) dump:{reg} print core register (halt core) dump:{addr}:{size} print content of memory dump:sram[:{size}] print content of SRAM memory dump:flash[:{size}] print content of FLASH memory dump:{addr} print content of 32 bit memory register dump16:{addr} print content of 16 bit memory register dump8:{addr} print content of 8 bit memory register

set:{reg}:{data} set register (halt core) set:{addr}:{data} set 32 bit memory register

read:{addr}:{size}:{file} read memory with size into file read:sram[:{size}]:{file} read SRAM into file read:flash[:{size}]:{file} read FLASH into file

fill:{addr}:{size}:{pattern} fill memory with a pattern fill:sram[:{size}]:{pattern} fill SRAM memory with a pattern

write:{file.srec} write SREC file into memory write:{addr}:{file} write binary file into memory write:sram:{file} write binary file into SRAM memory

flash:erase complete erase FLASH memory aka mass erase flash[:erase][:verify]:{file.srec} erase + flash SREC file + verify flash[:erase][:verify][:{addr}]:{file} erase + flash binary file + verify

reset reset core reset:halt reset and halt core halt halt core step step core run run core

sleep:{seconds} sleep (float) - insert delay between commands

(numerical values can be in different formats, like: 42, 0x2a, 0o52, 0b101010)

examples: –help -v –cpu STM32F051R8 -q –cpu STM32F03 dump:flash dump:sram dump:0x08000000:256 set:0x48000018:0x00000100 dump:0x48000014 read:sram:256:aaa.bin read:flash:bbb.bin -r reset:halt set:pc:0x20000010 dump:pc core:step dump:all flash:erase:verify:app.bin flash:erase flash:verify:0x08010000:boot.bin “”

Supported programmers

From ST exists actually three different SWD programmers:

  • ST-Link/V1 - support is not planned
  • ST-Link/V2 - actually full support on all platforms
  • ST-Link/V2-1 - actually full support on all platforms

Minimum recommended firmware version of ST-Link is V2J21xx or newer. Otherwise is recommended upgrade using ST-LINK/V2 firmware upgrade tool.

Mac OS/X 10.11.x

Latest OS/X from Apple brings lot of problems around USB, especially with ST-Link devices. The problem appear if pystlink (or any other programmer for ST-Link like openocd, stlink, ..) is started second time then connection to st-link ends with timeouts. Pystlink has currently implemented some basic workarounds, to bring correct functionality on OS/X 10.11.x. If you get some problems, please report it.

Supported MCUs

Currently almost all ST32F and ST32L MCU. There is script which compare supported MCUs with all listed on

FLASHing support is currently for all STM32F.

Not all MCUs are tested. Please report any problems to Issues tracker.

In WiKi is some basic info about STM32 naming: STM32 coding matrix


Code is under MIT license.

In general, this program is allowed to copy, share, change, use in commercial and without any limitations, but if you make some changes or updates then will be nice to share it.

Support is only by Issues tracker

PYSTLINK is inspired by OpenOCD, STLINK and lot of info is from sniffed USB communication with original ST-LINK program.


ST-Link/V2, stlink, SWD, Python, ARM, CortexM, STM32, debug, FLASH, USB

Related Repositories



Python tool for flashing and debugging STM32 devices using ST-LINK/V2 ...