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 Sept 2016
STM Core for Nucleo boards
STM have produced an Arduino Core, which currently supports 2 of their Nucleo range boards.
The NUCLEO-F103RB and the NUCLEO-L476RG
The core is based on the STM HAL, and is expected to be deployed as a Boards Manager package.
Currently this is a work in progress, with support for more Nucleo boards to be released in the latter parts of 2016.
STM contacted me when they were going to release this Core and I suggested that it be deployed by the stm32duino github account, of which I'm admin.
I have created separate repos for each MCU core, and for the Tools, so it is now also possible deploy by copying the Core files and the tools into the Arduino/Hardware/STM_Core folder, in the same way that LIbmaple can be deployed.
I have also added support for all the upload tools used by LibMaple.
My understanding is that once all major Nucleo boards have been created by STM, that they will not be adding any new boards, but there may be some support for bug fixes for a limited time.
So it will be up to the community to continue development of this core.
- Uses the STM HAL, so hopefully 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
- Much greater RAM and Flash usage than non HAL cores (i.e much more than LibMaple0
- Not available for GD32 boards, because of the usage license on the STM HAL (though may work in practice)
- Currently only 2 Nucleo boards are supported - but hopefully the community will be able to add support for the popular chinese boards like the BluePill and the Maple Mini clones
Currently the Arduino_STM32 (libmaple) repo gives the best functionality for the majority of users, especially those using Maple Mini boards
However its possible that the STM Core will supersede the libmaple core at some time in the future.
But the STM Core is always likely to take more RAM and more Flash than libmaple, so don't expect people to migrate to the STM core unless they want to make use of the HAL or unless the STM Core supports peripherals like CAN or SDIO which LibMaple doesn't.
As Koduino is already based on the Standard Peripheral Library, (the predecessor of the HAL), I suspect it will mostly be superseded by the STM Core.
Likewise and to a greater extent, the MakerLabMe core, as it has not been supported for some considerable time