gemesa@home:~$

Introducing rustlink

rustlink

rustlink is a set of tools to program STM32 devices:

  • rst-info: device information tool
  • rst-flash: programmer and flash manipulation tool

The motivation behind these tools is that probe-rs-cli can not handle multiple connected probes (devices):

$ probe-rs-cli info
Error: 2 probes were found.

With rst-flash you can choose by serial number which device to use:

$ rst-info list
[0]: STLink V2 - serial: AAAAAAAAAAAAAAAAAAAAAAAAAAAA
[1]: STLink V2 - serial: BBBBBBBBBBBBBBBBBBBBBBBBBBBB
$ rst-flash download -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8 -f app.elf
    Finished in 0.179s
$ rst-flash reset -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8

Installation from source

Prerequisites

The following tools are necessary for building:

  • cargo (>=1.68.2)
  • rustc (>=1.68.2)

Both can be installed from the official Rust site.

How to build and install

Invoke the following commands:

$ cargo build --release
$ cargo install --path .

which will build rst-info and rst-flash executables and install them in <your-home>/.cargo/bin/.

Examples

$ rst-info list
[0]: STLink V2 - serial: AAAAAAAAAAAAAAAAAAAAAAAAAAAA
[1]: STLink V2 - serial: BBBBBBBBBBBBBBBBBBBBBBBBBBBB

Download to flash and run

$ rst-flash download -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8 -f app.elf
    Finished in 0.179s
$ rst-flash reset -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8

Dump and erase memory

$ rst-flash download -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8 -f app.elf 
    Finished in 0.191s
$ rst-flash dump -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8 0x0800_0000 1                   
Addr 0x08000000: 0x20005000
Read 1 words in 498.057µs
$ rst-flash erase -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8
$ rst-flash dump -s AAAAAAAAAAAAAAAAAAAAAAAAAAAA -t STM32F103C8 0x0800_0000 1
Addr 0x08000000: 0xffffffff
Read 1 words in 473.943µs

Get chip info

$ probe-rs-cli chip info STM32F103C8
STM32F103C8
Cores (1):
    - main (Armv7m)
RAM: 0x20000000..0x20005000 (20.00 KiB)
NVM: 0x08000000..0x08010000 (64.00 KiB)