Flash it

    In this case, our program will be the only program in the microcontroller memory.By this I mean that there’s nothing else running on the microcontroller: no OS, no “daemon”,nothing. led-roulette has full control over the device.

    Onto the actual flashing. First thing we need is to do is launch OpenOCD. We did that in theprevious section but this time we’ll run the command inside a temporary directory (/tmp on *nix;%TEMP% on Windows).

    Make sure the F3 is connected to your laptop and run the following commands on a new terminal.

    The program will block; leave that terminal open.

    Now it’s a good time to explain what this command is actually doing.

    As for OpenOCD, it’s software that provides some services like a GDB server on top of USBdevices that expose a debugging protocol like SWD or JTAG.

    Onto the actual command: those .cfg files we are using instruct OpenOCD to look for a ST-LINK USBdevice (interface/stlink-v2-1.cfg) and to expect a STM32F3XX microcontroller(target/stm32f3x.cfg) to be connected to the ST-LINK.

    The OpenOCD output looks like this:

    1. Open On-Chip Debugger 0.9.0 (2016-04-27-23:18)
    2. Licensed under GNU GPL v2
    3. For bug reports, read
    4. http://openocd.org/doc/doxygen/bugs.html
    5. adapter speed: 1000 kHz
    6. adapter_nsrst_delay: 100
    7. none separate
    8. Info : Unable to match requested speed 1000 kHz, using 950 kHz
    9. Info : Unable to match requested speed 1000 kHz, using 950 kHz
    10. Info : clock speed 950 kHz
    11. Info : STLINK v2 JTAG v27 API v2 SWIM v15 VID 0x0483 PID 0x374B
    12. Info : using stlink api v2
    13. Info : Target voltage: 2.919073

    The “6 breakpoints, 4 watchpoints” part indicates the debugging features the processor hasavailable.

    I mentioned that OpenOCD provides a GDB server so let’s connect to that right now:

    This only opens a GDB shell. To actually connect to the OpenOCD GDB server, use the followingcommand within the GDB shell:

    1. (gdb) target remote :3333
    2. Remote debugging using :3333
    3. 0x00000000 in ?? ()

    By default OpenOCD’s GDB server listens on TCP port 3333 (localhost). This command is connecting tothat port.

    After entering this command, you’ll see new output in the OpenOCD terminal:

    Almost there. To flash the device, we’ll use the load command inside the GDB shell:

    1. (gdb) load
    2. Loading section .vector_table, size 0x188 lma 0x8000000
    3. Loading section .text, size 0x38a lma 0x8000188
    4. Loading section .rodata, size 0x8 lma 0x8000514
    5. Transfer rate: 6 KB/sec, 435 bytes/write.

    And that’s it. You’ll also see new output in the OpenOCD terminal.

    Our program is loaded, let’s debug it!