How to import/use custom arduino board for STM32L4

Well it’s hard to convey multiple years of development experience in a single post; there’s a lot of background knowledge in play here, but let me try anyways by showing how I developed it…

I’m assuming you have completely read the linked documentation and know what a platform, framework, package, board definition etc. is and how e.g. a platform and package is described and configured by its JSON files.

The entities involved here are:

  • _
    • needs modification, since this code must call the correct underlying build script for the new STM32L4 core
    • fork repo → add new code path for core == stm32l4 (as I did here)
    • redirects execution for build into the platformio-build.py of the newly created Arduino core package
  • Understand build logic
    • first understand how the Arduino IDE uses the platform.txt and boards.txt to built the firmware. (Redirecting and more).
      • these two criticial files dictate what flags ( -D .. -m .. -f ..) the compiler gets, how all available boards / variants are defined (with their name, configuration options which feed into compiler options, variant-specific source code folder, …) and how the code is uploaded (here: either openocd or dfu)
    • can also run Arduino IDE in verbose mode to see all compiler invocations if unsure
  • Replicate board JSON definitions (mostly templated from existing board definition, plus boards.txt, plus what options you need in there accessible from the build script, here e.g. I put hwids, usb_product etc)
  • and build logic in PlatformIO / SCons build script
  • Setup example project that uses all this

As you can see one needs a quite good understanding of PlatformIO internals, terminology and python scripting to integrate it here. Usually the core team adds integration for new cores, platforms etc.

The way I develop is to clone all my forked repos but modify my local files in e.g. C:\Users\.platformio\packages and C:\Users\.platformio\platforms, then copy them back and commit. Only at the last stage I redirect the packages / platforms of the project to the forked sources, remove my previous packages and platforms and see if it correctly uses the redirected packages.

1 Like