bringing up an adafruit stm32f405 feather express

Adafruit STM32F405

I purchased an Adafruit STM32F405 Feather ( ). I purchased it because it has an STM32, a SoC built around an ARM M4 with hardware floating point, clocked at 168MHz. You can check the full specs on the provided link. Because it’s an Express board, it will run Adafruit’s Circuit Python ( ), Adafruit’s fork of MicroPython ( ). In this post I’m going to install the latest version of Circuit Python (as of the date of this post) on the Feather and test it with a simple Python application that flashes the on-board NeoPixel different colors.

All of this is hosted on a 2020 M1 13″ MacBook Pro running macOS Monterey version 12.0.1.

We’ll start by installing a helper application that will program the STM32 with the Circuit Python binary. I’ll use Homebrew ( ) to install dfu-util (brew install dfu-util). I’ll then go to and download the latest version of Circuit Python, which as of right now is 7.0.0.  Save it somewhere you will remember for later. The file I downloaded was adafruit-circuitpython-feather_stm32f405_express-en_US-7.0.0.bin

Plug the Feather into one of the Mac’s USB-C ports. You’ll need a USB-C to USB-C cable for this; the STM32 Feather (finally!) is equipped with USB-C instead of micro USB.

Take a wire and connect the B0 pin to 3.3V (see image below). This is the bootloader wire. Press the reset key to put the Feather into bootloader mode.

On your host computer open a shell. I use iTerm which in turn uses zsh, the shell for macOS. Change directory to where you stored the downloaded binary (bin) file and use dfu-util to program the Feather with this file. Execute the following:

dfu-util -a 0 --dfuse-address 0x08000000 -D adafruit-circuitpython-feather_stm32f405_express-en_US-7.0.0.bin

When Feather programming finishes, unplug the Feather from USB-C, remove the bootloader wire, and reconnect the Feather. The Feather will now appear as a flash device on the Mac and it will execute Circuit Python programs stored on the flash device. What follows is the Feather’s flash filesystem:

When first booted after the initial Circuit Python programming, there is no file in the lib folder. You’ll need to add this yourself. Go to and download, from releases, Unzip this file and look for lib/neopixel.mpy. Drag neopixel.mpy into the Feather’s lib directory, so that it looks like the image above.

Test Code

Using the code editor of your choice, open the file on the Feather and delete everything you find. Then copy and paste the following:

import time
import board
import neopixel

neopixel = neopixel.NeoPixel(
    board.NEOPIXEL, 1, brightness=0.2, auto_write=False, pixel_order=neopixel.GRB

while True:
    neopixel.fill((64,0,0)) # red

    neopixel.fill((0,64,0)) # green

    neopixel.fill((0,0,64)) # blue

    neopixel.fill((64,16,0)) # orange

    neopixel.fill((0,32,32)) # cyan

    neopixel.fill((0,0,0)) # black

All you have to do is save the file, and the Feather will start to execute it immediately.


building liteide x37.1 on jetpack 4.4 developer preview

I managed to build LiteIDE X37.1 from the GitHub sources by following the projects clear, simple directions. They were:

$ git clone
$ cd liteide/build
$ ./
$ ./

## Run it. While within the build folder from above: ##
$ cd liteide/bin
$ ./liteide

They are part of the website’s installation directions. The website is here:

The directions were written for Ubuntu 16.04, but they work just as well for Ubuntu 18.04. It should be noted that Qt5 doesn’t need to be installed. Just start with the git clone of the source and go from there. I’m running it out of where it was built. I haven’t run the installation and for my uses I don’t intend to.

For the record I have the latest version of Go, 1.14.3 for linux-arm64 (ARMv8).

This isn’t the first time I’ve built this tool. I built an earlier version under Raspbian Buster on the Raspberry Pi 4. It built and worked fine there, too.

As for usefulness, it is quite useful, at least for my purposes. In the example above it found all my files under the default GOPATH (go env GOPATH) and I was able to quickly navigate to my work and open one of my files I developed on the Raspberry Pi. It’s my hope to build and attempt to run the software and Adafruit hardware I used on the Raspberry Pi.

Right now I’m in the process of fulfilling a promise I made to my wife to clean out a good portion of our house and begin to do some home improvements. I’ve accrued a lot of “homeowner dept” that I need to pay down quite a bit. I’m retired and back to living in the regular world. These little reports will be short and sweet, and perhaps infrequent. But I won’t mind. I do all of this because I enjoy it, when I feel like it. Not because I have to. And that’s alright.