Retronics

Restoring, remodeling and creating electronic devices


DIY: STM32 WhiteBoard64, Part 2: Assembly and testing

If you are soldering the components in a traditional way, using soldering iron, I recommend starting with the PSU + either USB connector or pin headers for VIN, 3.3V and GND, and verify that the buck converter delivers correct output voltage, before soldering MCU and other components.

The easy test: Connecting USB power from a computer or cell phone charger and measuring output voltage between pins 3V3 and GND, with a multimeter. My board delivers 3.32V, which is pretty much spot on.

I did some extra measurements with and without load, to check the performance of the buck regulator circuit. The power source is a linear lab PSU with 12V output voltage, connected to pins VIN and GND.

This is a good place to insert oscilloscope probe.
With no load, the ripple+noise is around 16mVp-p / 2.5mVRMS. These are very good numbers for a buck regulator.

Load test: A 5.6Ω resistor is connected between 3V3 and GND, to draw about 580mA (slightly less than the TPS560430s max rating of 600mA.

The output voltage only drops to 3.29V, which shows that the PSUs load regulation is good.

At max. load, the ripple+noise increases to around 45mVp-p / 4mVRMS, which are still decent figures for a switched regulator.

With the PSU confirmed to be working well, it’s time to solder the rest of the components. I desoldered the STM32 from the Nucleo board, and reused it on the new board.

When soldering the microcontroller’s LQFP64 package, a microscope may be handy. I’m using a modified version of Andonstar 407.


For basic testing of a STM32 board, I recommend installing STM32CubeProgrammer, which can be downloaded for free from the ST Website. After CubeProgrammer is installed, connect a USB cable between the WhiteBoard64 and your PC. On the microcontroller board, hold button BOOT0 and press RESET to start the MCU in DFU mode. In CubeProgrammer, change the blue drop-down button in right column to USB, and click the refresh button next to Port. The USB port shall now be visible (shown as USB1 on the screenshot above), and you are ready to connect.
After clicking Connect, the Target Information column (bottom right) shows information about your microcontroller. If the MCU has been used before, the Device Memory column may show old program data. You may want to delete this by clicking the eraser icon (second icon at the bottom left).

Though it’s possible to program the WhiteBoard64 via USB, my preferred programming and debugging interface is ST-LINK. Nucleo boards come with a semi-integrated ST-LINK adapter which can be separated from the main board. I made an interface board which makes connection to the WhiteBoard64 (and all my other STM32 based projects) quick and easy.

Nucleo-based ST-LINK adapter, connected to the WhiteBoard64 via 8-pin IDC cable.

Testing the ST-LINK interface in CubeProgrammer.


For hobbyists, Arduino IDE is probably the most commonly used development software, and you may program the WhiteBoard64 from this IDE, given that you’ve installed the board definitions for STM32 boards. Select Board Part Number: Nucleo F411RE if you are using the STM32F411RET6 microcontroller, and Upload method: STM32CubeProgrammer (SWD) if you are using an ST-LINK interface adapter.


If you are making more advanced projects, you have probably already moved on to a better development environment. Personally, I prefer using VSCode with PlatformIO. For Arduino IDE users, PlatformIO may be a little confusing at first, but once you get used to it, you don’t want go back to Arduino IDE, except maybe for small test sketches. You’ll find lots of tutorials on YouTube on how to get started with PlatformIO. Professional STM32 programmers will probably use STM32CubeIDE, but that IDE is only for ST microcontrollers, while PlatformIO supports most modern microcontrollers.

I’ve posted a few program examples for WhiteBoard64 on GitHub. These are also listed in the left column of the screenshot above.


One concern when using a switched voltage regulator as supply for a microcontroller, is that switching noise/ripple may affect ADC accuracy. I’ve done some tests:

Test setup. The WhiteBoard64 is powered with 12VDC from one lab PSU, and the onboard switching regulator supplies 3.3V to both the MCU power inputs and the analog reference input. A second lab PSU supplies 3.3V to a voltage divider (resistor + potentiometer + filter cap), which delivers an adjustable 0-3.3V to MCU analog input pin A0.

The program performs 1 measurement per second, and writes the result to console.

At 10 bit ADC resolution, the results varies with +/- 1 LSB, which is pretty good for an MCU driven by a switched regulator. If the regulator is simultaneously used to power other devices with variable current draw, this will affect the results.

If I use 2.048V reference instead of the filtered 3.3V, the variation is still +/- 1 LSB. This reference, however, stays at the same voltage, regardless of other devices drawing current from the switched regulator.

ADC reference voltage selector. A jumper must always be present, otherwise the MCU will not run.

With 12 bit ADC resolution, the variations get more prominent, as expected. By basing each measurement on several ADC samples and calculating average, the fluctuations may be reduced. According to datasheet, the STM32F411 ADC can perform up to 2.4 MSPS, which is pretty fast.

When the WhiteBoard64 is powered by 3.3V from a linear lab PSU, the results become more stable: +/- 1 LSB at 12 bit ADC resolution. These tiny variations may as well be caused by real noise in the fairly long, unshielded hookup wires, or actual fluctuations in the PSU voltage.



Some microcontroller pins have dual purposes. PA11 and PA12, for example, serve as D- and D+ on the USB interface. If your project involve USB connection, you must avoid other uses for these two pins. If no USB is involved, you are free to use these pins for GPIO.

Similarly, pins PA13 and PA14 are used for ST-LINK interface. If you are going to upload or debug firmware via ST-LINK, don’t use these pins for other purposes.

Dual-purpose pins to be aware of are emphasized with inverse (white on black) text on the board, and are labeled with double names on the schematic.


The optional FLASH memory uses SPI interface, but you can also use the same SPI pins for external devices, except Chip Select (PA4). I made two development boards, one with- and one without FLASH chip

FLASH memory code examples are provided on this project’s on GitHub repository.



Leave a comment