Mbed OS CE Support for Artemis

Hi all! I’m Jamie, one of the maintainers of Mbed OS Community Edition, or Mbed CE for short. We are continuing development, maintenance, and bugfixes on Mbed OS after its abandonment by ARM. I am happy to announce that Mbed CE now has proper support for the Artemis module and the boards based on it!

For a bit of background, an initial port of Mbed OS to Artemis’s Apollo3 MCU was completed some time ago, and is actually still used as a basis for the current Arduino core. However, ARM Mbed was not really usable on Artemis by itself, as this port lacked basic features like analog inputs and PWM. It also did not have a readily available way to flash code to the device, so you would have to get creative to actually make use of it.

Well, here at Mbed CE, we decided to fix this situation. We analyzed the existing Mbed port for Artemis with our test shield board, found a number of missing features and issues, and did our best to fix them. This includes:

  • Implementing new PWM and ADC support based on the Arduino core implementation (though with vastly improved PWM frequency range)
  • Updating the linker script so that Mbed programs coexist with the SVL bootloader
  • Adding missing GPIO features, including dual edge interrupts and bidirectional open-drain pins
  • Fixing a pernicious UART bug that caused the device to get stuck in an interrupt handler forever if there was any noise on the UART Rx line
  • Enabling HRFC calibration, making the CPU clock and the timers derived from it about an order of magnitude more accurate
  • Integrating the SVL upload script into Mbed so that it can be called automatically to upload code to your board

With these changes, Mbed CE now offers near feature parity with the Artemis Arduino core (I believe the only thing we don’t currently support is an equivalent for pulseIn()). And (in my opinion at least) it offers an environment well suited for serious development, including IDE support (VS Code and CLion), a CMake-based build system, OTA-capable bootloader support, and more.

If you’re looking to branch out from the Arduino environment, or just want to check it out, then please give Mbed CE a try and let me know how it’s working! Check out the Apollo3 port info page for more info, and use the getting started link on the left to see how to get Mbed CE set up!

2 Likes

Thank you for sharing your hard work!