STM32 Open Source Multimeter

A multimeter, based on the STM32F103, which can measure voltage, current and power, both bipolar and in DC and true RMS.

Similar projects worth following
In short, I needed more multimeters at my lab. You can get these cheap Chinese "multimeters" from Ebay, but I don't trust them at all and they lack some of the features I want (PC connectivity, RMS, power measurement, electronic range switch, capacity measurement, ...). So I wondered, what can I achieve with circa 10 dollars worth of parts?Well, turns out the STM32F1 is pretty powerful and I managed to cram all of the above functions into this little thing! And as a little bonus, it pretty accurate (for a day-to-day prototyping at least, it's not a 200 dollar Fluke).For the impatient - watch the video on YT (

Version 1.2B released

So, after a few revisions I decided to publish this project. Now I am not going to describe how everything works and all of the details, if you are interested in that, read the article on the project homepage. Here, I want more to summarize what it can do in short (more in-depth description on the project homepage) 

So, what does it do? It has six modes:

  1. Voltage mode - measures voltage with two ranges, ±6 V and ±60 V. Ranges are switched electronically, there's a hold function (to freeze the display) and you can select between DC (or average) mode and RMS (bandwidth about 3 - 10 kHz).
  2. Current mode - basically the same as voltage, ranges are ±60 mA and ±500 mA, again switched electronically, again with DC/RMS.
  3. Power mode - yep, it can do both voltage & current at the same time, so I wondered, why not make a power mode? This comes in really handy when working with power supplies (or, just today, I used it for testing a bunch of small solar panels). All 4 combinations of ranges are possible, and you can again do RMS or DC.
  4. Continuity screen - basically it tests resistance and if it's below 50 Ohm, it sounds the buzzer.
  5. Component test - this can measure resistors, capacitors and diodes (so far). Basically I use it mostly for sorting parts after prototyping or when I need to clean a pile of parts (then it comes really handy).
  6. About screen - well, it tells you the name of this project.

Furthermore, some other features:

  • fully isolated USB interface (capable of both receiving commands and transmitting data)
  • powered by li-ion (protection & charging included) or anything with a voltage of 3.2 to 5.5 volts
  • measures battery voltage and signalizes low battery
  • RTC & memory, so it remembers the mode you last used
  • voltage & current inputs protected against overrange

What it does not do:

  • it does not measure mains, nor is it meant to; I rarely use mains, so I don't need this function, and because of safety I did not even try to implement it

What it could do in the future:

  • frequency measurement (it's just a matter of writing the software for it)
  • additional voltage range (± 60 mV), coming in rev. 1.3, hopefully
  • and some other fancy stuff, it's described more in detail on the project's homepage

Frankly, I originally build this just for myself, but after seeing the results, I decided to publish it. Yeah and it also took a lot of time, so I thought it would be a pity to keep it to myself. Here's , for example, accuracy on the ±6 V range:

Note: some of the resistors during this measurement were 1 % ones, because I ordered wrong 0.1 % ones. 

But still, I'd say this is pretty good for something this cheap- for most of the range, we are well below 1 %, which is more than enough for prototyping and/or general lab work.

Do you find it interesting? It's open source, and everything is on GitHub. Some more info is (and more will be coming) on the project homepage at Currently I have PCBs of version 1.3 ordered, it will take some time for them to arrive, but I'll post an update once they do.

Also I'd love to hear your experience/opinions/questions, so feel free to comment.

  • Rev 1.3 voltage accuracy

    Martin06/25/2019 at 20:30 0 comments

    Today, after a long wait, the PCBs and components for the revision finally arrived. I managed to find some time to populate the boards and now I am bringing you the results of the voltage accuracy test.

    Now in the last project log I said this revision should have three voltage ranges - ±60 V, ±6 V and ±600 mV. To be honest, I kind of lied, because it has four voltage ranges, the three mentioned above and a ±60 mV one! I just wasn't sure how well will it perform, but according to my tests, it is totally usable. The only downside of this new AFE is that the lower ranges (especially the ±600 mV one) need to be calibrated with a simple offset. I'll try to remove the need for calibration in future revisions.

    But enough talking, let's see the results:

    The blue curve is the absolute error in volts, the orange curves are the maximal error margins for ±0,3 %, which is my target accuracy for this revision. Just for reference, ±0,3 % is the accuracy of the Brymen 805s, which is a 53 euro DMM! Now let's see a closeup of the sub one volt part:

    I'd say this isn't bad at all.

    And just to keep everybody informed - I hope that tomorrow I'll do tests with the new current stage and then I'll release the source. However, that will end the development of this revision and I will move onto 1.4, because this revision was intended mostly as a test for the new analog front end. Revision 1.4 will include this new AFE along with a much better processor - the SMT32F373, which offers a 16-bit delta-sigma ADC with differential inputs and external reference. This should vastly improve the accuracy, I am hoping for at least 0,1 %.

  • Rev 1.3 PCBs on the way!

    Martin06/06/2019 at 20:42 0 comments

    So, I have my batch of PCBs for rev 1.3 ordered and on the way. It will still take some time for them to arrive and for me to populate and test them, but just as a quick summary, here's what I am hoping to achieve with this revision:

    • ±600 mV range (so now there will be three voltage ranges)
    • much improved current sensing circuitry with lower sense resistances and ranges of ±2.5 A and ±300 mA
    • frequency compensated dividers for voltage sensing
    • the ON-OFF switch is now just a SPDT, because the DPDT version was hard to get
    • general layout improvements and little changes

    Also, the software still needs a lot of work, so I would like to polish it a little bit more, add autoranging, make the software remember the range you last used in given mode and also implement proper UART/USB control (so it can be fully controlled from a PC using the isolated USB interface).

View all 2 project logs

Enjoy this project?



dambusio wrote 06/20/2019 at 21:01 point

I have 1 question - project is in "C++" - but without cpp features like class etc, why? (or I miss something?)

  Are you sure? yes | no

K.C. Lee wrote 06/06/2019 at 11:06 point

You should consider having an opening to only show the displayable area for the LCD.  The LCD would look a lot more professional with about 1-2 mm left and right side covered as it blocks out the 4 distracting side-lite LEDs.  That and some counter sink or Allen stainless steel or black screws.

  Are you sure? yes | no

Martin wrote 06/06/2019 at 20:28 point

Well, you're right. This is the first revision for which I made a 3D printed case, so there are things which need to be smoothed - I agree with the screws, also I need some better way of putting stickers on it - these don't look good; regarding the LCD I am kind of thinking about switching to a larger screen, so that might change totally.

  Are you sure? yes | no

Dacon Jung wrote 06/06/2019 at 05:37 point

May I purchase the rev 1.3 with all hardware and case assembled and together the firmware flashed?

  Are you sure? yes | no

Martin wrote 06/06/2019 at 20:24 point

Hi, thanks for the interest, but as of now I am not selling these finished (or as a kit). The reason is simple - I want to spend the time available to me for developing new features and/or revisions. This might change in the future, if I feel the project is finished and there is no more work to be done.

  Are you sure? yes | no

hulkhawk wrote 06/05/2019 at 16:10 point

Really cool project, can't wait to see more!

  Are you sure? yes | no

Martin wrote 06/05/2019 at 18:04 point

Thanks, I already have rev 1.3 PCBs ordered, so there will surely be more functions and improvements...

  Are you sure? yes | no

Elliot Williams wrote 06/05/2019 at 12:13 point

This is rad! Have you considered submitting it to the Hackaday Prize?

  Are you sure? yes | no

Martin wrote 06/05/2019 at 18:03 point

Thanks! I originally thought that the Prize entries must be before June 1st, but now I read  the document again and I was wrong, that applies to the early stage. So I just submitted this to the Prize!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates