This is the main repo that people on this site are using. However its just one of a number of different "cores" that allow the Arduino IDE to compile for STM32.
- Works with Maple mini including being compatible with the Maple / USB bootloader
- Works with IDE 1.6.3 +
- Has a long history and most bugs have been sorted out.
- The original code was written in around 2011 and does not use STM's own standard headers and the Standard Peripheral Library. This means adding new hardware functions e.g. CAN Bus or I2S are harder as they need to be coded from scratch. (STM's own code was not available for F103 until the start of 2015)
- Harder to port to other processors like the STM32F4 because all code needs to be written, rather than being able to use code written by STM
Arduino STM32 is a derivative of libmaple, (https://github.com/leaflabs/libmaple) which was first developed by LeafLabs for their Maple and Maple mini boards. LibMaple was written in 2012 and only supports the Arduino 0022 API (pre Arduino 1.0).
LibMaple and hence Arduino STM32 only support the STM32F103 series of processors, however various other groups have build modified versions, including the AeroQuad team who did a port of the original LibMaple to the STM32F4 processor
This is the port of LibMaple which is in the Arduino STM32 repo
There have been many other ports / updates to libmaple, but as far as I'm aware Arduino STM32 is the only one which is active at this time and supports the Arduino 1.0 API
This appears to be a totally independent implementation of an STM32 core for the Arduino IDE.
I did try to contact the author in December 2014 but didn't get a response.
But there does appear to be recent work in this repo.
This code seems to use code from ARM holdings and not specifically code from STM.
The license on these files is unclear
One advantage that I can see is that perhaps the F4 core provides Arduino 1.0 API support
Unfortunately it looks like last download is targeted at Arduino 1.5.8, and the only STM32F103 boards that are listed are produced by MakerLabMe
I'm sure it would be possible to build variants and change the boards.txt to support other generic boards.
I will need to do a test build as they boards seem to have support for USB, but I'm not sure how that works.
Koduindo is written by Avik De. Its another independent core, but draws some ideas from libmaple.
- Uses headers and c code from STM themselves (CMSIS and STD Peripheral Libs)
- Should be easier to port to other STM32 processors and add new hardware e,g, CAN and I2S etc
- Currently only supports one custom STM32F103 board built by Avil
- API doesnt seem to be totally standard (see below about compile issues)
I have tried to build some standard example sketches using, Koduino, however I have found a number of problems, and a lot of things don't compile due to small differences in the API that Koduino uses and the Arduino API, this seems to mainly be arguement types, but at the moment things like
Updated June 2017
STM Core for Nucleo boards
STM have produced an Arduino Core, which now supports multiple boards in their Nucleo family of products.
The core is based on the STM HAL, and can be installed either using the files from github or via a Boards Manager package
- Uses the STM HAL, so it should possible to port to most STM32 MCU's
- Uses the STM HAL, so addition of libraries for advanced functions like SDIO should be easier than writing them from scratch
- Built by professional developers (Wi6Labs), against the latest Arduino spec
- Probably uses more RAM and Flash usage than non HAL cores (i.e much more than LibMaple)
- Not available for GD32 boards, because of the usage license on the STM HAL (though may work in practice)
STM32 GENERIC by @danieleff
This core also uses the STM HAL, but the structure and architecture of the core differs from STM's implementation.Generic implementation of Arduino for STM32 boards