LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

STM32Butterfly2: obsługa joysticka

 

W realizowanych projektach nieodłącznym elementem jest interfejs komunikacji z użytkownikiem, poza stosowaniem przycisków i klawiatur matrycowych stosuje się różnego rodzaju inne elementy. Przykładem może być joystick umieszczony na płytce zestawu ewaluacyjnego STM32Butterfly2. W rzeczywistości joystick można traktować jako pewien rodzaj przycisku, jednak sposób manipulowania nim daje duże możliwości w realizowanych aplikacjach, których brakuje przy zwykłych przyciskach zwiernych.

Poniższy projekt przedstawia wykorzystanie zamontowanego na płytce joysticku. Działanie aplikacji polega na zapalaniu na stałe diod LED modułu KAmodLED8 (rysunek 1) przypisanych do odpowiednich  kierunków (góra, dół, lewo i prawo) joysticka. Natomiast przyciśnięcie joysticka od góry powoduje zgaszenie zapalonych diod LED modułu.

 

Rys. 1. Wygląd modułu KAmodLED8

Rys. 1. Wygląd modułu KAmodLED8

 

 

Na rysunku 2 przedstawiono połączenie płytki z modułem KAmodLED8, połączenie można wykonać przy użyciu przewodów połączeniowych CAB_A. Moduł jest zasilany napięciem 5V, które występuje na złączu magistrali SPI oraz I2C.

 

Rys. 2. Sposób połączenia płytki STM32Butterfly z KAmodLED8

Rys. 2. Sposób połączenia płytki STM32Butterfly z KAmodLED8

 

 

Przedstawiony projekt został przygotowany z myślą o zestawie STM32Butterfly oraz STM32Butterfly2. Jednak ze względu na różnice w podłączonych liniach do joysticka wymagane jest aby w przypadku projektu dla STM32Butterfly make został wywołany z argumentem BOARD=1. Wywołanie z powyższym argumentem spowoduje, że preprocesora wykona definicje określające, do których linii podłączony jest joystick. W przypadku otwarcia zbioru projektów w TrueStudio można dokonać edycji pliku Makefile w katalogu głównym dodając dodatkowy argument BOARD=1.

Odczyt stanu joysticka, w poniższym projekcie, realizowany jest w głównej pętli programu poprzez odczyt stanu linii, do których podłączony jest manipulator. Na listingu poniżej przedstawiono program główny.

int main(void)
{
    //LED as output
    RCC->APB2ENR |= LED_PORT_APB2; //Enable PE in APB2
    io_config_ext(LEDS_PORT,LEDS_BITS,GPIO_MODE_10MHZ,GPIO_CNF_GPIO_PP);
    
   //JOY pin configuration input pullup VCC
    RCC->APB2ENR |= JOY_PORT_APB2;
    io_config_ext(JOY_PORT, JOY_BITS, GPIO_MODE_INPUT, GPIO_CNF_IN_PULLUP );
    io_set_clr_mask( JOY_PORT, JOY_BITS, JOY_BITS );
    
    int leds_on = 0;
    //main loop
    while(true)
    {
	int jkey = joy_keys();
	if(jkey & JOY_OK )
	    leds_on = 0;
	else
	    leds_on |= jkey>>1;        
	io_set_clr_mask(LEDS_PORT, leds_on, LEDS_BITS );
    }
    return 0;
}

 

Na początku programu mamy zrealizowane włączenie zegara dla portu GPIO oraz konfigurację linii jako wyjść, do których podłączony jest moduł diod LED. Operacja konfiguracji linii jest wykonywana przez funkcję io_config_ext. Pierwszym jej parametrem jest określenie konfigurowanego portu, drugi parametr określa linie, natomiast pozostałe dwa określają sposób działania.  W kolejnym etapie przeprowadzana jest konfiguracja linii oraz włączany zegar portu, do którego podłączony jest joystick. Działania są podobne jak dla linii diod LED, z tą różnicą, że dla linii joysticka dodatkowo realizowane jest polecenie podciągające linie do potencjału dodatkowego. Odpowiada za to funkcja io_set_clr_mask, która jako pierwszy parametr przyjmuje port GPIO, jako drugi parametr wartość określającą linie do ustawienia (wartość bitu ‘1’) i wyzerowania (wartość bitu ‘0’), natomiast ostatni parametr jest maską blokującą zmianę pozostałych linii.

Do pobrania

Tagi: GPIO, LED