20 Shields Supported on 10 ST Nucleo Platforms

When STMicroelectronics joined mbed, they were very interested in code quality, shield form factor components and cross target compatibility. This lined up quite well with the development of the mbed automated test suite and our component database initiative - one solid library and example program for all platforms being developed by groups of people all around the world with similar interests.

In fact, ST was the first to pioneer the use of the mbed automated test suite for platform support development on mbed and through it set a quality acceptance criteria for a target support in the mbed SDK.

Some months later, together with the ST team, we are happy to announce that 20 shields are now fully supported and tested across 10 ST Nucleo platforms on mbed. Here is a picture of the hardware used:


While working our way to support these, we noticed that some of the existing libraries have static pin definitions, supposedly from the original hardware they were developed on. Others contain leftover code from a non-mbed software kits/platforms that they were ported from. Also not all of them were well documented and some would have no documentation at all.

We tracked how many of the existing component libraries are regularly maintained and what's the average time for a pull requests to be accepted for component libraries hosted under user (non-team) accounts. We have noticed that in some cases it would take weeks for a pull request to be accepted if the component library author is not around and this makes it hard to contribute and collaborate.

On the hardware side, a small number of shields use a dedicated 6 pin SPI connector, which is not implemented on most of the platforms on mbed and these shields require bridging between the 6 pin SPI connector and D10-D13. Also other shields require similar bridging for PWM connectivity. Once identified these incompatibilities should be explained on the component pages, so everyone can implement the provided workaround (if any).

This lead us to believe we have to set some ground rules to make it work for everyone:

  • References - component libraries should contain no static peripheral code/references
  • Routines - libraries should use the mbed SDK library methods/routines whenever possible
  • Defines - hardware specific defines should be reduced to minimum and parameters should be used instead
  • Documentation - a well documented code is mandatory, not optional
  • Pin naming - example programs should refer to pins using the Arduino pin naming standard, e.g. A0-A5, D0-D15
  • Teams - the code should be published in teams, not in user accounts, so team of developers would manage and accept new contributions
  • Workarounds - any deviation from the shield connectivity standard should be documented on the component page and a workaround provided

To enable a team-managed collaboration workflow, we forked the component libraries and examples into two new teams that everyone can join in - components and shields teams. The components team is focused around any component libraries - either in shield or non-shield form factor, grove, etc. The shields team contains only example programs for shield components and does not contain/support any libraries.

Here's a list of all shields with cross-platform support on mbed:

Shield nameShield typeProduct pageSupport status
/thumb?filename=components/components/appshield_1.png&size=24x16mbed Application ShieldDisplay, SensorsClick to viewSupported
/thumb?filename=components/components/lcd-shield-front-001_large.pngv1308222352&size=24x16Freetronics 16x2 LCDDisplayClick to viewSupported
/thumb?filename=components/components/TFT_Shield.jpg&size=24x16Seeed 2.8" TFT Touch V2DisplayClick to viewSupported
/thumb?filename=components/components/SD_card_shieldV4.0.jpg&size=24x16Seeed SDCard V4bStorageClick to viewSupported
/thumb?filename=components/components/500px-IMG_0039.jpg&size=24x16W5200 EthernetConnectivityClick to viewSupported
/thumb?filename=components/components/IMG_7577.JPG&size=24x16Seeed WifiConnectivityClick to viewSupported
/thumb?filename=components/components/Bluetooth20Sld.jpg&size=24x16Seeed BluetoothConnectivityClick to viewSupported
/thumb?filename=components/components/NFC20SLD.jpg&size=24x16Seeed NFC V2ConnectivityClick to viewSupported
/thumb?filename=components/components/Xbeeshield_01.jpg&size=24x16Seeed XBee V2ConnectivityClick to viewSupported
/thumb?filename=components/components/GPRS_ShieldV2.0.jpg&size=24x16Seeed GPRS V2ConnectivityClick to viewSupported
/thumb?filename=components/components/2014-04-16_22.18.52.jpg&size=24x16Ciseco SRFConnectivityClick to viewSupported
/thumb?filename=components/components/photo_2.JPG&size=24x16Sparkfun GPSSensorsClick to viewSupported
/thumb?filename=components/components/Milti-axis.PNG&size=24x16Freescale Multi-SensorSensorsClick to viewSupported
/thumb?filename=components/components/Motorshield.jpg&size=24x16Seeed Motor V2DriversClick to viewSupported
/thumb?filename=components/components/Shield_bot_01.jpg&size=24x16Seeed BotDriversClick to viewSupported
/thumb?filename=components/components/2a218b143711342426c968360c3f95cc.image.530x397.jpg&size=24x16Seeed ELDriversClick to viewSupported
/thumb?filename=components/components/Relayshield_01.jpg&size=24x16Seeed Relay V2ActuatorsClick to viewSupported
/thumb?filename=components/components/Energy_Shield.jpg&size=24x16Seeed EnergyPower supplyClick to viewSupported
/thumb?filename=components/components/Seeed_Solar_Shield.jpg&size=24x16Seeed Charger V2Power supplyClick to viewSupported
/thumb?filename=components/components/ae6c622dee3885e07e94e5716c732a46.image.530x397.jpg&size=24x16Seeed Grove V2Hook-upClick to viewSupported

And last but not least, if you'd like to expand this list and add support for more components on mbed then join the teams components and shields!

You need to log in to post a discussion

Discussion topics

TopicRepliesLast post
Custom Nucleo Shields 2 06 Oct 2016 by Cristian Adam