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í výstupu, vstupu 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)
GPIO piny na STM32
STM32 mikrokontroléry mají zpravidla více GPIO pinů než Arduino. I když STM32 pracuje s napětím typicky 3.3 V, některé GPIO jsou 5V tolerantní — na vstup/výstup tedy můžete připojit 5V zařízení bez problému. Které piny konkrétně jsou 5V tolerantní, zjistíte z datasheetu daného mikrokontroléru. Pozor: 5V tolerance na vstupu neznamená, že výstupní logická jednička bude 5 V — výstup bude stále max. 3.3 V.
Vývojové desky Nucleo-64 obsahují dva typy konektorů — Arduino Uno rev. 3 a tzv. Morpho konektory. Na Arduino konektor je vyvedeno jen několik GPIO, na Morpho konektory jsou vyvedeny všechny.
Základní dokument pro práci s Nucleo deskou (pinout, popis jumperů, schéma zapojení) najdete na stránce produktu STM32F411 Nucleo.
Piny STM32 se označují podle portu a čísla: PA0 = nultý pin portu A, PB5 = pátý pin portu B atd.

Pokud použijete Arduino knihovny od STMicroelectronics, vestavěná LED nese označení LED_BUILTIN — fyzicky je připojena na pin PA5 u Nucleo-64. U každého příkladu níže jsou vždy dvě varianty: varianta s vlastními piny a varianta s vestavěnou LED/tlačítkem na desce.
Poznámka pro BluePill/BlackPill: rozmístění pinů se od Nuclea liší. Vestavěná LED je na PC13 (logika obrácená — LOW = svítí). Vždy zkontrolujte pinout vaší konkrétní desky.
Blikání LED
LED (s rezistorem ~220 Ω) připojte mezi GPIO PC10 a GND.
Vlastní LED na pinu PC10:
void setup() {
pinMode(PC10, OUTPUT);
}
void loop() {
digitalWrite(PC10, HIGH); // LED zapnout
delay(1000);
digitalWrite(PC10, LOW); // LED vypnout
delay(1000);
}
Vestavěná LED (PA5 / LED_BUILTIN):
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Celý vzorový kód s popisem najdete na GitHubu.
Tlačítko a LED
LED připojte mezi PC10 a GND. Tlačítko připojte mezi PC11 a GND — PC11 se nachází vedle PC10 na Morpho konektoru.
Pokud tlačítko zmáčknete, LED bude blikat rychleji.
Důležité: vstup je nastaven jako INPUT_PULLUP — interní pull-up rezistor drží pin na HIGH, dokud tlačítko není zmáčknuto. Proto je logika obrácená: tlačítko zmáčknuto = LOW, uvolňováno = HIGH. Pokud byste použili jen INPUT bez pull-up nebo fyzického rezistoru, pin by byl plovoucí a LED by spínála náhodně.
Vlastní tlačítko a LED:
void setup() {
pinMode(PC10, OUTPUT);
pinMode(PC11, INPUT_PULLUP); // interní pull-up, tlačítko na GND
}
void loop() {
if (!digitalRead(PC11)) { // zmáčknuto = LOW
digitalWrite(PC10, HIGH);
delay(100);
digitalWrite(PC10, LOW);
delay(100);
} else {
digitalWrite(PC10, HIGH);
delay(500);
digitalWrite(PC10, LOW);
delay(500);
}
}
Vestavěná LED (PA5) a vestavěné tlačítko (PC13, modrý kryt):
void setup() {
pinMode(PA5, OUTPUT);
pinMode(PC13, INPUT_PULLUP);
}
void loop() {
if (!digitalRead(PC13)) {
digitalWrite(PA5, HIGH);
delay(100);
digitalWrite(PA5, LOW);
delay(100);
} else {
digitalWrite(PA5, HIGH);
delay(500);
digitalWrite(PA5, LOW);
delay(500);
}
}
Celý vzorový kód najdete na GitHubu.
PWM výstup na GPIO
LED připojte mezi pin PA0 a GND. Pomocí analogWrite budeme měnit intenzitu svitu.
analogWrite na STM32duino pracuje se stejnou 8bitovou hodnotou jako Arduino — rozsah je 0–255, kde 0 = vypnuto, 255 = plný výkon. Hodnota 50 odpovídá přibližně 20 % výkonu, 250 přibližně 98 %.
Vlastní LED na PA0:
void setup() {
pinMode(PA0, OUTPUT);
}
void loop() {
analogWrite(PA0, 250); // téměř plný jas
delay(500);
analogWrite(PA0, 50); // přibližně 20 % jasu
delay(500);
}
Vestavěná LED (PA5 / LED_BUILTIN):
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
analogWrite(LED_BUILTIN, 250);
delay(500);
analogWrite(LED_BUILTIN, 50);
delay(500);
}
Celý vzorový kód najdete na GitHubu.
Poznámka pro pokročilé: analogWrite / digitalWrite jsou pohodlné, ale pomalejší než přímý zápis do GPIO registrů. Pro časově kritické aplikace (bit-banging, vysokofrekvenční signály) použijte přímý přístup přes GPIOA->ODR nebo STM32 HAL funkce.
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 hashtagem #STM32duino.








Žádné sociální komentáře k dispozici.