Skip to main content

Debugging with OpenOCD and gdb

Please use openocd 4.0 or newer.

This example assumes you have a Segger J-Link compatible JTAG adapter between your computer and the device (or dev board) you are debugging. It is possible to use an SWD (ST-Link) adapter instead, for this use openocd 0.7 or newer.

Start the openocd server with configuration files matching your hardware:

openocd -f interface/jlink.cfg -f target/stm32.cfg

Or, if you are using SWD:

openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg

In a second window, start an interactive session with openocd:

telnet localhost 4444

This seems to be necessary to avoid "target is not halted" errors and other trouble later:

reset_config trst_and_srst

Stop the target (the arm processor):

reset halt

If you have not already flashed the binary, using for instance dfu-util, you can do it over JTAG like this:

reset init
flash write_image erase dso-lib.hex 0 ihex
reset halt

In a third window, start gdb or gdbtui:

arm-none-eabi-gdb
(gdb) file dso-lib.elf
(gdb) target remote localhost:3333"
(gdb) load dso-lib.elf

You should now be able to run and debug:

(gdb) set $pc = Reset_Handler
(gdb) display/i $pc
(gdb) stepi

Tech Support & Product Discussion

if you have any technical issue. submit the issue into our forum. Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.

Loading Comments...