Published on Oct 28, 2018 in equipment, stm32, stm32 plus

7 section LEDs are an exceptionally inexpensive means to include a big, intense as well as extremely legible numerical screen to your job.

Straight driving a 7-segment LED screen with the STM32

Presents comparable to the one envisioned over can be had for just 50 cents each on in the usual elevations of 0.56 ″, 0.36 ″ as well as 0.28 ″. You can pick anywhere in between one as well as 4 numbers in the very same bundle. They’re described as 7 section however actually they’re 8 due to the fact that each number includes a little decimal factor down near the bottom right.


The numerous number plans make use of a circuitry setup made to reduce the variety of pins called for to drive it without needing to install any type of reasoning in any way within the bundle.

If you count the variety of sectors on, as an example, a 3 number present you ‘d rapidly understand that an easy setup that subjected each BAITED its very own committed pin would certainly need (8 * 3) + 1 = 25 pins on the bundle, of which you would certainly require to affix 24 to your MCU to drive it. That’s much a lot of as well as is the reason they can be found in usual cathode or usual anode arrangements.

Usual cathode setup

Allowed’s check out usual cathode initially.

Straight driving a 7-segment LED screen with the STM32

Straight driving a 7-segment LED screen with the STM32

In this setup there are committed power pins for every of the 7 sectors however the very same section on each number are all linked with each other. Beyond of the LED you can see that all 8 cathodes for a number are looped as well as provided at a solitary pin.

If you take a minute to absorb this you can see just how we can illuminate a sector of our selecting on any type of number. For instance, to illuminate section A on number 2 we would use an existing to pin 11 while basing pin 9. Pins 8 as well as 12 should be separated or otherwise stopped from permitting existing circulation.

Straight driving a 7-segment LED screen with the STM32

To light section A on number 1 we would certainly detach pin 9 as well as ground pin 12, as well as ultimately for number 3 we would certainly detach pin 12 as well as ground pin 8.


Currently you need to be obtaining a concept of just how these display screens are meant to be driven. Allow’s check out a completely functioned instance of just how we would certainly present the number “123”.

To start with we would certainly light sectors E, F on number 1 by allowing existing circulation with pins 1, 10 as well as12 After that we would certainly light sectors A, B, D, E, G on number 2 by allowing pins 11, 7, 2, 1, 5 as well as 9. Lastly we would certainly light sectors A, B, C, D, G by allowing just pins 11, 7, 4, 2, 5 as well as 8.

If we duplicate the above activities quick sufficient after that the human eye will certainly view all 3 numbers to be regularly lit although we are changing them on as well as off extremely rapidly.

Usual anode setup

This write-up is mosting likely to concentrate on the usual cathode kind of screen but also for efficiency I’ll reveal you the various other setup, so you recognize that 2 inappropriate kinds are readily available.

Straight driving a 7-segment LED screen with the STM32

In the usual anode setup we once more have different pins for every section as well as once more all equivalent sectors on all numbers are wired with each other however this moment the cathode finishes of the section LEDs are independently subjected as well as it’s the anodes that are all linked with each other on each number.

The multiplexed driving strategy is specifically the very same for usual anode display screens however that does not imply you can utilize usual anode where a layout requires usual cathode due to the fact that you can not, you would certainly need to transform the layout.

Driving with an MCU

There are a couple of alternatives readily available if you have an MCU as well as you wish to drive among these display screens. If you have an MCU with a restricted variety of IO pins, such as an Arduino Uno after that your finest alternative is to utilize a committed motorist IC that will certainly do the help you.

Straight driving a 7-segment LED screen with the STM32

The Saying MAX7221 will certainly drive usual cathode display screens of approximately a monstrous 8 numbers while calling for simply a 3 cord SPI user interface to the host MCU. Making use of simply among these ICs you can have 2 of the most significant 4 number display screens in your job at a price of simply 3 MCU pins. I have actually utilized this IC often times prior to in tasks that you can check out on this website. The major disadvantage of this IC is that it calls for a 5V supply as well as 5V degrees at the SPI pins. This is no worry for the Arduino Uno however it suggests it can not be utilized with an STM32 without a degree shifter.

If you’re making use of an MCU with a a great deal of GPIOs, such as a lot of the STM32 plans, after that you have the alternative of driving these display screens straight for the expense of simply 8 resistors as well as 3 n-channel MOSFETs, which’s the technique that we’re mosting likely to discover right here today.

Straight drive circuit

Right here’s the circuit layout that I utilize to drive a 3 number screen that has blue LEDs. It’s a photo from a much bigger circuit that I’m dealing with.

Straight driving a 7-segment LED screen with the STM32

The option of resistor is necessary due to the fact that it restricts the quantity of existing circulation as well as establishes the general illumination of the screen. I’ll be making use of the STM32 F0 exploration board that holds an STM32 F051 MCU to execute this circuit.

The very first point that I require to do is discover the MCU datasheet as well as figure out the optimum existing that the tool can resource as well as sink.

Straight driving a 7-segment LED screen with the STM32

Those restrictions refer to one more table previously in the datasheet that informs us the complete existing resource as well as sink for all pins.

Straight driving a 7-segment LED screen with the STM32

So we have a per-pin outright restriction of 20 mA as well as a general tool restriction of 120 mA. To prevent warm build-up as well as enable the tool to really do various other job also we will certainly remain far from those restrictions.

Exist any type of various other restrictions? Indeed there are. It pays to check out the whole datasheet due to the fact that concealed away in an afterthought there is an extremely crucial restriction concerning GPIOs COMPUTER13 to COMPUTER15

Straight driving a 7-segment LED screen with the STM32

We will certainly not utilize these pins.

Resistor computation

To determine the resistor worths we require to recognize the forward voltage of the LEDs in the screen. This is conveniently evaluated by utilizing your multimeter in its diode screening setting.

Straight driving a 7-segment LED screen with the STM32

The meter reveals an onward voltage of concerning 2.6 V which is typical for a blue LED. Currently I’ll take a wild hunch that due to the fact that contemporary LEDs are extremely intense at reduced currents after that 2mA will certainly suffice existing to obtain a wonderful, legible illumination. To match the STM32 F0 Exploration board I’ll examine this with a 3.0 V supply. That suggests a resistor of (3.0– 2.6)/ 0.002 = 200 Ω is called for.

Straight driving a 7-segment LED screen with the STM32

LEDs do not photo well so please take my word for it that this behaves as well as intense. Can the STM32 manage it? 2mA drops well listed below the per-pin restriction as well as the most awful instance circumstance is mosting likely to be all 8 sectors lit at the very same time offering a complete existing resource of 8 * 2 = 16 mA. No worry in any way. The bundle should not also obtain cozy.

The issue with making use of the 200 Ω resistor that we determined is that each number is just lit for 33% of the moment which will certainly make it show up 3 times as dim as we are anticipating. Consequently we require to reduce the resistor by an aspect of 3 as well as utilize a worth of 68 Ω rather.

This will certainly increase the height existing seen by the CAUSED 6mA however the typical existing will certainly still be 2mA. In the worst-case circumstance where your MCU hangs or collapses while driving all 8 sectors of a number after that it will certainly be sourcing 8 * 6mA = 48 mA. This is still within secure degrees as well as will certainly not shed up the bundle.

This number of 48 mA is the factor for every number pin being turned on or off making use of a MOSFET. If we were to straight link these pins to the MCU after that we would certainly remain in threat of sinking 48 mA right into a solitary pin which would possibly completely harm it.

Straight driving a 7-segment LED screen with the STM32

The resistors, MOSFETs as well as jumper cables are done in area as well as we prepare to establish the firmware. My job circuit defines the Vishay SI2374 DS MOSFET which is a surface area install tool. For this examination I am making use of the through-hole BS170 rather. The option of n-channel MOSFET is trivial but also for effectiveness benefit you need to pick one with a reduced on-state drain-to-source resistance. Much less than 1Ω is conveniently located.


I picked to carry out the firmware as an instance job within my stm32 plus collection. The ideas are easy so you need to have no concerns porting it to whatever structure fits your job. The firmware is executed in a file that you can see right here on Github.

The layout functions by utilizing Timer 1 to create disturbs at a regularity of 180 Hz. Each time the interrupt fires we shut off the number that we were last presenting as well as go on to establishing the GPIOs essential to light the following number. Consequently each number flickers swiftly at 180/ 3 = 60 Hz, a number I picked to match the refresh price most frequently utilized by COMPUTER screens. This offers a screen that shows up secure to the human eye.

Right here’s a failure of the vital parts of the firmware.

fixed const uint8_t AsciiTable[]= {
0,// AREA
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,// miss
0b11111100,// 0
0b01100000,// 1
0b11011010,// 2
0b11110010,// 3
0b01100110,// 4
0b10110110,// 5
0b10111110,// 6
0b11100000,// 7
0b11111110,// 8
0b11110110// 9

We wish to enable the controller to present ASCII message strings so we require a table to transform ASCII to a bitmap of which sectors need to illuminate for that personality. ASCII begins at 32 (room) so we begin our table there.

Each entrance in the table is a solitary byte with one little bit per lit-up section in the style ABCDEFG0. Extra ASCII codes are readied to no. In this instance I just require the numbers 0-9 to make sure that’s all there remains in there. You can conveniently see just how to prolong this.

enum {
SEGA = 0,// PA0
SEGB = 3,// PA3
SEGC = 8,// PB8
SEGD = 4,// PB4
SEGE = 3,// PB3
SEGF = 1,// PA1
SEGG = 2,// PA2
SEGP = 5,// PB5
DIG1 = 9,// PB9
DIG2 = 2,// PB2
DIG3 = 10// PB10

The pins utilized for every GPIO are kept in an enum for very easy referral. The relatively arbitrary job matches a job I’m presently dealing with as well as additionally reveals that the pin positioning is totally versatile.

GpioA> ;
GpioB pb;

All pins are initialised as results. To light a sector I will certainly establish the section outcome as well as the matching number MOSFET gateway outcome HIGH. Current will certainly move from the section outcome GPIO, with the LED as well as the MOSFET as well as the LED will certainly light. To switch over a number off I merely turn off its MOSFET.

/ *
* Initialise timer1 ranging from the broadband interior APB2 (APB on the F0)
* clock with an interrupt function

Timer1 timer;

/ *
* Establish ourselves up as a customer for disturbs increased by the timer course.

TimerInterruptEventSourceSlot:: bind( this, & Timer7SegmentTest:: onInterrupt)

/ *
* Establish an up-down-timer approximately tick at 80 kHz with an auto-reload worth of 444
* The timer will certainly count from 0 to 444 comprehensive, increase an Update interrupt as well as
* after that reverse pull back to 0 where it ’ ll raising one more Update interrupt
* as well as begin once more. Each trip from one end to the various other takes 1/180 2nd.

timer.setTimeBaseByFrequency(80000,444, TIM_CounterMode_CenterAligned3);

/ *
* Make it possible for simply the Update interrupt, removing any type of spurious pending flag initially

timer.clearPendingInterruptsFlag( TIM_IT_Update);
timer.enableInterrupts( TIM_IT_Update);

/ *
* Beginning the timer


Establishing the timer in stm32 plus is an easy job of proclaiming it with the clock as well as disrupt function, placing ourselves as a customer to the disturbs, establishing the wanted regularity and after that allowing the outer.

int worth = -1;

for(;;-RRB- {



if( worth >999)
worth = 0;

// equate worth to ascii, left warranted

_ screen[0]= _ screen[1]= _ screen[2]= 0;
StringUtil:: itoa( worth, const_cast( _ screen), 10);

// await 100 ms

MillisecondTimer:: hold-up(100);

The instance code after that enters into a boundless loophole counting up from no to 999 and after that twisting around as well as beginning once more.

/ *
* Customer callback feature. This is called when the upgrade disrupt that we ’ ve
* allowed is terminated.

gap onInterrupt( TimerEventType tet, uint8_t/ * timerNumber */) {


// validate our assumption

if( tet!= TimerEventType:: EVENT_UPDATE)

// shut off the last number we showed. This requires to be done initially to prevent
// turned off sectors coming to be faintly noticeable throughout multiplexing

_ numbers[_currentDigit] reset();

// breakthrough to the number we simply established

if( _ currentDigit >= 2) {
_ currentDigit= 0;
_ currentDigitPtr= _ screen;
_ currentDigit++;

// obtain the personality to present at this setting

uint8_t c= * _ currentDigitPtr++;

// examine the lower end of the variety

if( c

You May Also Like

Top Benefits of Social Media Marketing

We cannot deny the fact that when it comes to marketing, social…

World of Warcraft Classic: Some Players Use Illegal Tools to Stay Connected

Earlier this week, Blizzard released World of Warcraft Classic. The launch was,…

Crash Team Racing Bientt Back on Ps4!

Activision seems not to have finished with the remastering of the Playstation…

Draymond Green On Fans Who Say He Struggles Without Stephen Curry: ‘Michael Jordan Struggles Without Scottie Pippen’

Only2 SHARE2 DWAYNETZ0 REDDIT0 Draimond Green has had enough of fans claiming…