STM32duino II. - Ovládáme GPIO
- April 03 2018
- STM32duino
- 3493x Přečteno
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.