ZL31ARM: zabawa z GPIO w STM32
Program demonstracyjny na początku swojego działania (listing 1) ustawia prędkość taktowania rdzenia oraz inicjalizuje i włącza odpowiednie porty GPIO (w przykładzie są to porty: C oraz B), do linii których podłączono moduły KAmodLED8 (jak na rysunku 1).
List. 1.
//konfigurowanie portow GPIO GPIO_InitTypeDef GPIO_InitStructure; //Porty wyjsciowe GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //wyjscie push-pull GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Init(GPIOC, &GPIO_InitStructure); //Port B pin 5 jako wejsciowy GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //Wejscie "plywajace" GPIO_Init(GPIOB, &GPIO_InitStructure); //Port C piny 0 oraz 1 jako wejsciowe GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 ; GPIO_Init(GPIOC, &GPIO_InitStructure);
Następnie zaczyna się cykliczne wykonywanie głównej części programu, w którym sprawdzane są stany przycisków joysticka, uaktualniane stałe czasowe odmierzania czasu oraz generowany nowy wzór do wyświetlenia na LED (listing 2).
List. 2.
while (1)
{
//zapisz nowy stan portu
GPIO_Write(GPIOB, KtoryLEDR );
GPIO_Write(GPIOC, KtoryLEDG );
//Odczyt stanu pinu 0 portu C
if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)==0)
{
LiczDo=LiczDo-10000; //Zwieksz predkosc
//Ograniczenie maksymalnej predkosci
if(LiczDo<200000) LiczDo=200000; }
//Odczyt stanu pinu 1 portu C
if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==0)
{
LiczDo=LiczDo+10000; //Zmniejsz predkosc
//Ograniczenie minimalnej predkosci if(LiczDo>700000) LiczDo=700000; }
if (kierunekLewo) //jesli w lewo,
{
KtoryLEDR=KtoryLEDR<<1; //przesun pozycje LEDR w lewo
KtoryLEDG=KtoryLEDG>>1; //przesun pozycje LEDG w prawo
if (KtoryLEDR>=0x8000) //jesli dioda 8 - zmien kierunek {
kierunekLewo=FALSE;
}
}
else //jesli w prawo
{
KtoryLEDR=KtoryLEDR>>1; //przesun pozycje LEDR w prawo
KtoryLEDG=KtoryLEDG<<1; //przesun pozycje LEDG w lewo
if (KtoryLEDR<=0x0100) //jesli dioda 1 - zmien kierunek {
kierunekLewo=TRUE;
}
}
for(i=0; i < LiczDo; i++); //Opoznienie-predkosc LED
//Odczyt stanu pinu 5 portu B
if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)
{
for(i=0; i < 2500000; i++); //Opoznienie dla "slow motion"
}
}
Przykładowy projekt przygotowany w środowisku µVision (Keil/ARM) z kompletem plików źródłowych udostępniamy do pobrania poniżej.


Cztery dekady Vision Engineering Germany – precyzja, innowacje i ergonomiczna mikroskopia od 1986 roku
Taśma poliimidowa (Kapton®) w elektronice: zastosowania i właściwości
Nowe technologie akumulatorowe przyspieszą elektryfikację pojazdów terenowych 

![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)
![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)


