Hardware Build Manual
This is a build manual for my open source hardware projects. Since most of them follow the same philosophy, the instructions here should work for any project you want to build.
I strive to make my hardware projects PTH-only, but at this point some SMD parts are unavoidable, such as STM32 microcontrollers. This manual also includes instructions on how to handle those.
Caution
Assembling electronics involves dangerous tooling and materials. Do it at your own risk. I DO NOT take any responsibility for any damage you may incur. In case of doubts, please consult a professional or hire someone to build it for you.
Sourcing
Before actually building anything, the required materials must be sourced from distributors and manufacturers.
Printed circuit boards
Every hardware project I develop requires a printed circuit board, either a dedicated board or one of the development boards I also develop. In any case, there will be a Gerber zip file available for download.
Download the appropriate file for your project and upload it to your preferred PCB manufacturer. I don't recommend specific manufacturers or sell boards myself, but feel free to contact me through the social links on this site if you need help. If the board includes SMD parts and you plan to use a hot plate, also order a stencil; it makes applying solder paste much easier. Ordering full SMD assembly is also an option, but an expensive one 😄.
Some projects include 3D-printed cases, enclosures, or supports. If you don't own a 3D printer, plan to source those parts too. Many PCB manufacturers also produce 3D-printed items, so you can save money by ordering everything together.
Parts
Every hardware project also includes a link to an Interactive Bill of Materials. This document lists all the parts required to build the project and may include distributor part numbers (these are for reference only and are not an endorsement of any distributor). I usually source parts at the same time I source the printed circuit boards, so they arrive at about the same time 😄.
Tools
As with any hardware project, some minimal tooling is required for building:
- A soldering iron. I recommend using a soldering station with temperature control and a good assortment of tips. Active tips are usually better than passive tips.
- Some good solder wire.
- A fume extractor (for your health 😄).
If the project relies on some SMD parts, some additional tooling is required:
- A small bevel tip for your soldering iron, or a hot plate or a hot air soldering station.
- Some tacky flux (for soldering iron or hot air soldering station) or solder paste (for hot plate with stencil). I recommend buying solder paste that does not require refrigeration, such as the Chipquik TS391SNL (again, just mentioned for reference, not an endorsement).
- A microscope. A cheap Chinese model with a screen is usually enough.
Building
With all the materials available, it is time to start building! Before starting, please open the Interactive Bill of Materials and the schematics (also linked on the project page) to understand the placement of the parts; this manual does not detail individual parts.
SMD Parts
If the project includes some SMD parts, I recommend starting by soldering them.
Larger-pitch parts such as passives or the infamous USBLC6-2SC6 USB ESD protectors may be hand soldered easily with a precision solder tip, if they exist in the project you want to build.
For smaller-pitch parts such as LQFP ICs, there are some options. My preferred one is using a soldering iron with a bevel tip and some flux:
- Position the part correctly, observing the pin 1 mark, with the help of some kapton tape.
- Fill the pins you want to solder with tacky flux.
- Apply a very small amount of solder to the bevel tip.
- Drag the tip over the pins you want to solder.
- Fix any solder bridges using flux and the soldering iron.
Here is a video demonstrating this process:
Alternatively, you can solder all the SMD parts at once using a stencil and a hot plate. Position the stencil over the board, align the stencil holes with the pads, then apply a thin layer of solder paste using a credit card or other rigid flat tool. Place the board on the hot plate, turn it on, and set the temperature as documented in your solder paste instructions. Do not leave the board on the hot plate for too long to avoid burning the paste, and do not touch the board with your hands because it is very hot—use tweezers instead 😄.
PTH Parts
For PTH parts, it is easy to hand solder using the soldering iron and the solder wire. I recommend doing it in the following order:
- Resistors and any other axial passives.
- Ceramic capacitors.
- Electrolytic capacitors.
DIPsemiconductors.TO*semiconductors.- Any other semiconductors.
- Connectors, pin sockets, pin headers, etc.
Project-specific
Please consult the project documentation for any project-specific assembly instructions, like how to put together the cases, etc.
Bringing Up / Testing
Bringing up the board may be project-specific; please consult the project documentation for instructions. This manual includes generic instructions to flash the firmware to some AVR and STM32 microcontrollers:
AVR (UPDI)
I recommend using the pymcuprog tool from Microchip with a serial port UPDI adapter that can be easily built using a USB-to-serial adapter and a resistor, as described in the link.
Download the binaries from the project documentation page. Connect the adapter to the UPDI port on the PCB (the exact connection depends on the project; check its documentation or schematics) and configure it as described in the pymcuprog documentation. Then run (replace the example values: fuses hex myfirmware-fuse.hex, firmware hex myfirmware.hex, microcontroller AVR128DB28, serial adapter /dev/ttyUSB0, baud rate 230400):
$ pymcuprog --tool uart --device avr128db28 --uart /dev/ttyUSB0 \
--clk 230400 write --filename myfirmware-fuse.hex
$ pymcuprog --tool uart --device avr128db28 --uart /dev/ttyUSB0 \
--clk 230400 write --filename myfirmware.hex --erase
The first command will write fuses, and the second command will write the firmware to flash.
Troubleshooting
If the pymcuprog command fails on Linux with a permission issue, add your user to the group that owns the device /dev/ttyUSB0 (from the example commands). You can check which group it is by running:
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 3 Aug 29 00:06 /dev/ttyUSB0
In this example, the group is dialout. To add the current user to that group:
$ sudo gpasswd -a $USER dialout
STM32 (USB DFU)
For boards with a USB connector, I recommend using the DFU protocol to download the firmware to the microcontroller.
For most of my projects, a running firmware can trigger DFU mode using an externally available button combination, to avoid opening the device to connect a jumper to the "bootloader" header pins. Please check the project documentation for details.
Warning
Some STM32 families such as STM32C0 and STM32G0 are released from factory with the BOOT0 pin set as a normal GPIO, which means that as soon as there's a valid firmware downloaded to the flash memory, it won't boot to DFU mode by shorting this pin to ground. To fix that, please follow the procedure described in this link before following these steps!
Using STM32CubeProgrammer
This method uses the official STM32CubeProgrammer tool from ST Microelectronics to download firmware via DFU and is recommended for novices.
After downloading the binaries from the project documentation page, connect the USB cable to the board and your computer, start the software, and follow these steps on the initial screen:
- Select "USB" as the connection type.
- Reload the device list, if needed. If nothing appears, the microcontroller likely isn't in DFU mode. Install a jumper on the "bootloader" header pin, reconnect the USB cable, and retry.
- Select the USB port to be used. If there's only one DFU device connected, it will be already selected.
- Click the "Connect" button.
- Select the "Erasing & Programming" screen on the left menu.

On the "Erasing & Programming" screen, follow these steps:
- Click the "Browse" button and select the firmware file (
.elf) to download. - Select the "Verify programming" checkbox.
- Click the "Start Programming" button.

After downloading the firmware, the software will present a message reporting success or failure. On success, remove the jumper, if inserted, and after a power cycle the microcontroller will boot the new firmware.
Using dfu-util
This method uses the dfu-util tool to download firmware via DFU.
After downloading the binaries from the project documentation page, connect the USB cable to the board and your computer, then run:
$ dfu-util -l
This command should list DFU interfaces from the microcontroller. If nothing appears, the microcontroller likely isn't in DFU mode. Install a jumper on the "bootloader" header pin and reconnect the USB cable.
After confirming DFU mode is available, run (example: DFU firmware myfirmware.dfu):
$ dfu-util -D myfirmware.dfu
Remove the jumper, if inserted, and after a power cycle the microcontroller will boot the new firmware.