Initial Research

What have I learnt from my initial research?

Hardware Options

There are many development boards on the market some available for only a few pounds so getting the hardware is going to be the easy part.

Program Upload Options

ARM devices include in hardware a serial bootloader to upload the program. In the case of newer devices they might also include a usb bootloading capability too. The upload method is documented and people have written scripts to perform the upload via this method. Programs can also be uploaded over SWD interface.

Debugging/Testing Options

Debugging/Testing has two interface options to consider JTAG & SWD.

JTAG (Joint Test Action Group) – An industry & IEEE standard since 1990, uses more pins, but allows for boundary scan.

SWD (Serial Wire Debug) – Lower pin count than JTAG, better performance, no boundary scan.

Bounday scanning whilst useful is not something that I am likely to need that often. SWD being a more modern and faster protocol is more suited to general usage.
OpenOCD – Open On-Chip Debugger -

My understanding is that OpenOCD is used to connect to a dumb programmer. OpenOCD then performs the JTAG control by acting as a GDB server. Requires the use of programming hardware.

Black Magic Probe -

The blackmagic probe developed by Blacksphere Technologies acts as a GDB server. The official hardware is expensive however the firmware is available on GitHub and can be loaded onto inexpensive compatable hardware. So the hardware and GDB server are integrated resulting in a simpler debugging setup. The blackmagic probe supports JTAG & SWD on a range of Cortex-M series targets from a range of manufacturers.

Compiling Options

The information available indicates that a GNU/ARM tool-chain is available for Linux. This is where things become interesting. There are a number of IDE which support the hardware. In many cases these are a customised version of Eclipse. I have never been a fan of Eclipse as too much seems to be going on in its interface. I perfer a general text editor and the command line. An IDE would have to prove useful to what I needed to do to warrant its use.

The difficult step is deciding on libraries for the hardware. There are reports of the official libraries being badly written. Some official libraries have changed over time and there are distinct versions with their own pros & cons. There are users who say they always write their own libraries from scratch. Which path to go down will eventually depend on how familiar I become with the hardware. A pre-written library will give me a head start, but that is not to say that it cannot be improved upon in some situations.

Initial Research Summary

So after reading many forum posts and articles here is what I have decided upon.


I have ordered 3 STM32F103C8T6 ARM Minimum System Development boards from eBay for a total of £6.81 (Jan 2016). These will plug into a breadboard and be suitable for initial development. Other boards can be made or purchased later as required.

Program Upload

A Python script located on GitHub will allow a compiled program to be uploaded over a serial connection. I already possess a USB to serial converter so I would just need to connect this up to the board.


It should be possible to upload the Blackmagic firmware to one of the Minimum system development boards. This would give me my own blackmagic probe and allow me access to the JTAG and SWD interfaces. In addition it allows program upload via SWD.


The GNU/ARM toolchain will meet my needs. A few tutorials exisit that can point me in the right direction when it comes to setting it all up. I will document my procedure as I haven’t yet found an example that follows what I am doing.


It would seem that work is underway to add support to the Arduino environment for STM32 devices. This may be worth looking at as a intermediate option between command line and full IDE. I know I am trying to avoid the Arduino IDE but knowing it is available could be of use.

Back to Index