Debugging Cortex-M with ARM-GDB and ST-Link

  • Download ST-Link source from Github.
  • Install the necessary requirements with sudo apt install libusb-1.0.0-dev on Debain systems. Use equivalent command on other distributions.
  • cd st-link && make
  • sudo cp build/Debug/st-* /usr/local/bin or sudo cp build/Release/st-* /usr/local/bin
  • sudo cp /etc/udev/rules,d/49-stlinkv* /etc/udev/rules.d/
  • sudo udevadm control --reload

Reading flash

  • st-flash --reset read content_flash.bin 0x8000000 0x20000

Debugging

  • Run the st-link utility by $ st-util if it is already present in the path. This step sets up the debugging server.
  • Once the server is set up, run $ arm-none-eabi-gdb file.elf and run the following command the GDB commandline > target extended-remote :4242 (if the port selected by the previous step is 4242). Alternatively, this could also be done, arm-none-eabi-gdb --eval-command="target remote localhost:4242" file.elf
  • In the gdb command line, enter > load file.elf and insert a breakpoint in main by break main.

Writing to flash

  • st-link write file.bin 0x8000000

Detecting the target

  • st-info --probe

Reference

Written on August 17, 2019