STM32duino II. – Ovládáme GPIO

Ve druhém díle o STM32duino si ukážeme práci s digitálními vstupy a výstupy. Ukážeme si příklad pro ovládání vstupu, výstupu a přivedeme PWM signál na GPIO.

Všechny díly seriálu o STM32duino:
STM32duino I. – Jak začít s STM32 jako Arduino
STM32duino II. – Ovládáme GPIO
STM32duino III. – Komunikujeme pomocí Serial (USART)
STM32duino IV. – Čteme teplotu a vlhkost z Si7021 (I2C sběrnice)

Obecně, STM32 mají spoustu GPIO pinů, které můžete využít. I když STM32 pracuje s napětím typicky 3.3V, některé GPIO jsou 5V tolerantní. To znamená, že na vstup/výstup můžete připojit 5V zařízení a STM32 mikrokontrolér s tím nebude mít žádný problém. Které GPIO to konkrétně jsou se dozvíte z katalogového listu (datasheetu) daného mikrokontroléru.

To, že vývod je 5V tolerantní neznamená, že při napájení 3.3V budete mít při logické jedničce na výstupu 5V. Logická jednička bude stále max. 3.3V.

Vývojové desky Nucleo-64 obsahují dva typy konektorů – Arduino Uno rev. 3 a tzv. Morpho konektory. Zatímco na Arduino Uno konektor je připojenou pouze několik GPIO, na Morpho konektory jsou vyvedeny všechny.

Základním dokumentem, který budete při manipulaci s vývojovou deskou Nucleo potřebovat je tento.

Zde najdete popisy jednotlivých komponent na Nucleo desce, významy jednotlivých jumperů (propojek) a v neposlední řadě i popis, jak naprogramovat STM32 mimo Nucleo.

Co je ale velmi důležité, najdete tu i pinout obou typů konektorů – Arduino Uno i Morpho – a také schéma zapojení.

Jak jsem zmínil výše, STM32 mikrokontroléry mají spoustu vývodů. Každý vývod patři k nějakému portu. Na desce tak můžete majít porty A, B, C i D a u větších mikrokontrolérů i další. Každý port má několik pinů, typicky 8 (0 až 7). Takže piny se označují jako PA0 – nultý pin portu A, PB5 – pátý pin portu B a tak dále.

Pokud využijete Arduino knihovny od STMicroelelectronics, vestavěná LED nese stejné označení tak, jak jste zvyklí z jiných Arduino programů a to LED_BUILTIN. Fyzicky je připojena na pin PA5. Jak knihovnu nainstalovat se dozvíte v první článku o STM32.

U každého příkladu jsou uvedeny dva kódu – využití vestavěné LED/tlačítka nebo využití pinů pro externí LED a tlačítko.

Pokud chcete použít jiný vývod, v dokumentu výše najdete vaší Nucleo desku a název vývodu.

Blikání LED:

LED (s rezistorem) připojíte mezi GPIO PC10 a GND. Vzorový kód i s popisem najdete zde.

Vlastní LED na jiném pinu.

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PC10 as an output.

pinMode(PC10, OUTPUT);

}

// the loop function runs over and over again forever

void loop()

{

digitalWrite(PC10, HIGH); // turn the LED on (HIGH is the voltage level)

delay(1000); // wait 1000ms

digitalWrite(PC10, LOW); // turn the LED off by making the voltage LOW

delay(1000); // wait 1000ms

}

Využití vestavěné LED.

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PC10 as an output.

pinMode(PA5, OUTPUT);

}

// the loop function runs over and over again forever

void loop()

{

digitalWrite(PA5, HIGH); // turn the LED on (HIGH is the voltage level)

delay(1000); // wait 1000ms

digitalWrite(PA5, LOW); // turn the LED off by making the voltage LOW

delay(1000); // wait 1000ms

}

Tlačítko a LED:

Opět připojíme LED mezi PC10 a GND. K tomuto zapojení ještě přidáme tlačítko, které připojíme mezi PC11 a GND (PC11 se nachází vedle PC10).

Pokud tlačítko zmáčknete, LED bude blikat pomaleji.

Využít můžete i uživatelské tlačítko na desce (modré), které je připojeno na GPIO PC13. LED je připojena na PA5 (nebo můžete využít pojmenování LED_BUILTIN). Celý příklad naleznete na tomto odkazu.

Vlastní tlačítko a LED na jiných pinech.

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PC10 as an output.

pinMode(PC10, OUTPUT);

// initialize digital pin PC11 as an input.

pinMode(PC11, INPUT);

}

// the loop function runs over and over again forever

void loop()

{

if(digitalRead(PC11)) // read button

{

digitalWrite(PC10, HIGH); // turn the LED on (HIGH is the voltage level)

delay(100); // wait 100ms

digitalWrite(PC10, LOW); // turn the LED off by making the voltage LOW

delay(100); // wait 100ms

}

else

{

digitalWrite(PC10, HIGH); // turn the LED on (HIGH is the voltage level)

delay(500); // wait 500ms

digitalWrite(PC10, LOW); // turn the LED off by making the voltage LOW

delay(500); // wait 500ms

}

}

Využití vestavěné LED a tlačítka (modrý kryt).

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PC10 as an output.

pinMode(PA5, OUTPUT);

// initialize digital pin PC11 as an input.

pinMode(PC13, INPUT);

}

// the loop function runs over and over again forever

void loop()

{

if(digitalRead(PC13)) // read button

{

digitalWrite(PA5, HIGH); // turn the LED on (HIGH is the voltage level)

delay(100); // wait 100ms

digitalWrite(PA5, LOW); // turn the LED off by making the voltage LOW

delay(100); // wait 100ms

}

else

{

digitalWrite(PA5, HIGH); // turn the LED on (HIGH is the voltage level)

delay(500); // wait 500ms

digitalWrite(PA5, LOW); // turn the LED off by making the voltage LOW

delay(500); // wait 500ms

}

}

PWM výstup na GPIO.

LED připojíme mezi pin PA0 a GND a budeme měnit intenzitu svitu LED. Celý vzorový kód na tomto odkazu.

Vlastní LED na jiném pinu.

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PA0 as an output.

pinMode(PA0, OUTPUT);

}

// the loop function runs over and over again forever

void loop()

{

analogWrite(PA0, 250); // PWM output for PA0, shines more

delay(500); // delay 500ms

analogWrite(PA0, 50); // PWM output for PA0, shines less

delay(500); // delay 500ms

}

Využití vestavěné LED. Název PA5 můžete změnit za LED_BUILTIN.

// the setup function runs once when you press reset or power the board

void setup()

{

// initialize digital pin PA0 as an output.

pinMode(PA5, OUTPUT);

}

// the loop function runs over and over again forever

void loop()

{

analogWrite(PA5, 250); // PWM output for PA0, shines more

delay(500); // delay 500ms

analogWrite(PA5, 50); // PWM output for PA0, shines less

delay(500); // delay 500ms

}

A to je v tomto díle o STM32duino vše. Pokud se vám díl líbil, budu rád, když jej budete sdílet s hastagem #STM32duino.

Sdílejte článek:

Související články

Arduino je velmi populární platforma s rozsáhlou komunitní podporou.

Pokud programujete mikrokontroléry od firmy STM (STM32F4, STM32F0, STM32L1) pomocí Standard Pheripheral Library, tak se vám možná nelíbí velikost výsledného kódu.

Ve čtvrtém díle našeho seriálu o STM32duino se konečně podíváme na slibovanou I2C sběrnici.

Ve třetím díle si ukážeme použití snad nejpopulárnější sběrnice – USART, v Arduino světě je nazývána jako Serial.

Další mini pokračování z předchozího článku o programování USARTu pro STM32L100 a jemu podobné typy (STM32F0, STM32F3, STM32F4.