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:
Open On-Chip Debugger 0.9.0 (2016-04-27-23:18)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v27 API v2 SWIM v15 VID 0x0483 PID 0x374B
Info : using stlink api v2
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:
(gdb) target remote :3333
Remote debugging using :3333
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:
(gdb) load
Loading section .vector_table, size 0x188 lma 0x8000000
Loading section .text, size 0x38a lma 0x8000188
Loading section .rodata, size 0x8 lma 0x8000514
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!