The Linux USB gadget API is built on a stack of two drivers : the “actual” USB driver for the physical USB interface of the Pi, and a sort of “middleware” driver (gadget driver) that implements the behavior of a USB device.
This first page contains background information that you may or may not need. Remember the Dunning-Kruger effect, though : maybe you think you know, but do you really ? Read-on, just to make sure. You do not want to Dunning-Kruger.
All variants of the Raspberry Pi Zero feature two Micro-B USB sockets, one that carries no data (“PWR IN”, for powering the Pi) and a second one labeled “USB”. Most Zero users I’ve met find that “USB” port annoying because it requires using a special cable in order to turn it into a regular USB host port.
Recently, the Raspberry Pi Foundation introduced a new tool, the Raspberry Pi Imager. This page documents how to use it to achieve the exact same setup as could be obtained before, using the procedure on my first Vanilla Headless Setup page. You don’t need to read it, the prose is pretty much the same except for the technical details. I kinda worn-out the copy and paste shortcut keys.
This page is a collection of interesting information about the USB CDC library and mythe VCP library I built on top of it. Check it out once in a while, it’s probably going to grow every time I work with a new STM32 family, find a bug or add a feature.
So you’ve installed STM32CubeIDE (a.k.a. “Cube” or “the IDE”) and you’ve got a board with an STM32 on it. Time to get coding ! This page about setting up a project : the project itself is unimportant, so we’ll go with blinking an LED. That’s the “Hello World” of the microcontroller world.
Of all the things you can program, microcontrollers are the least friendly. They have no interface that a human can use. That is regrettable, especially when trying to get some feedback from your code during development. A simple LED connected to an I/O pin can already be used to provide a lot of feedback with very little hardware (and code) but it’s a very limited option. Luckily, there are lots of inexpensive display modules out there than can do a lot more than turn on and off. They do require significantly more code to operate, however. Let me help you with that.
The STM32H750 is an interesting MCU : at 480 MHz it’s one of the fastest Cortex-M7 devices in existence but it’s also one of the least complicated because it only has one core. That also makes it cheap. And this makes it a very good chip to be proficient with.