LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[2] JAVA i STM32 – ekspresowy kurs programowania z MicroEJ – obsługa GPIO

Uwaga! Wszystkie opublikowane odcinki kursu są dostępne pod >>> adresem.

W drugim artykule poświęconym platformie ButterflyOS (MicroEJ – JAVA na STM32) przedstawione zostaną podstawowe mechanizmy odpowiedzialne za obsługę wejść i wyjść w języku JAVA, często używane w budowaniu bazy sprzętowej interfejsów użytkownika. Stworzony zostanie przykładowy projekt w języku Java dla mikrokontrolera STM32 z zestawu STM32F429I-DISCO zawierający obsługę przycisku i diod LED. Na koniec pokazana zostanie niższa warstwa platformy napisana w języku C.

 

Obsługa wejść

Urządzenia wejściowe są integralną częścią systemów mikroprocesorowych. Wśród nich najczęściej spotykane są przyciski, joysticki i klawiatury. Ze względu na ich powszechność, ButterflyOS wyposażony został w moduł o nazwie MicroUI, odpowiedzialny za obsługę tych urządzeń i przetwarzanie wysyłanych przez nie sygnałów. Schemat blokowy przepływu sygnałów przez ten moduł pokazano na rysunku 1.

Rys. 1. Przepływ sygnału w module MicroUI

Przepływ sygnału odbywa się w dwóch warstwach. Warstwa pierwsza, napisana w C jest odpowiedzialna za odebranie sygnału z urządzenia zewnętrznego za pomocą przerwania mikrokontrolera pochodzącego od linii GPIO. Sygnał ten jest interpretowany wewnątrz modułu LLINPUT, gdzie generowana jest liczba 32-bitowa, kodująca opis zdarzenia oraz zawierająca jego typ, np. przycisk lub klawiatura. Tak przygotowane dane umieszczane są w kolejce zdarzeń, z której odbierane są przez wątek warstwy wyższej, napisanej w Javie.

Wątek odbierający zdarzenie przesyła je do odpowiedniego generatora, który przetwarza je na postać wygodniejszą do interpretacji przez słuchaczy, oczekujących na informację o przychodzących zdarzeniach. Finalny opis zdarzenia jest również liczbą 32-bitową i w przypadku zwykłego przycisku ma postać przedstawioną na rysunku 2. Zawiera on typ zdarzenia (np. przycisk), identyfikator generatora, z którego pochodzi, kod wykonanej przez użytkownika czynności (np. pojedyncze lub podwójne wciśnięcie, zwolnienie przycisku), numer przycisku, z którego pochodzi zdarzenie.

Rys. 2. Struktura zdarzenia pochodzącego od przycisku

Do powyższego schematu można dodawać własne zdarzenia pochodzące od urządzeń niezdefiniowanych w bibliotece MicroUI.

Przygotowanie platformy

Pierwszą rzeczą, jaką należy wykonać tworząc nowy projekt jest przygotowanie platformy zawierającej biblioteki Javy wymagane przez aplikację, oraz niskopoziomowe sterowniki peryferiów. Mając do dyspozycji zestaw ewaluacyjny 32F429IDISCOVERY (STM32F429I-DISCO) można zbudować platformę w oparciu o jeden z przykładów dostępnych w środowisku Butterfly OS. W tym celu należy wybrać File?New?Java Platform, a w wyświetlonym oknie dialogowym zaznaczyć rodzinę mikrokontrolerów STM32JavaF4 oraz przykład Basic-UI dla zestawu STM32F429I-DISCO (rysunek 3). Po wciśnięciu przycisku Next, należy wypełnić wymagane pola oznaczone gwiazdkę i kliknąć Finish.

Rys. 3. Tworzenie nowej platformy

Wszystkie źródła związane z platformą pokazują się w drzewie projektu po lewej stronie. Najważniejsze elementy platformy znajdują się w pakietach: *-bsp (board support package), zawierającym m.in. sterowniki peryferiów napisane w C, *-configuration, umożliwiającym konfigurację wykorzystywanych modułów Javy oraz *-fp (front panel), zawierającemu opis układu potrzebny do symulacji (m.in. liczbę i lokalizację LED-ów i przycisków). Należy rozwinąć pakiet *-configuration i dwukrotnie kliknąć plik o nazwie example.platform. Aby zbudować platformę należy w wyświetlonym oknie kliknąć opcję Build platform. Po udanej kompilacji, platforma jest już gotowa do użycia.

Projekt GPIO

Po przygotowaniu platformy można zabrać się do przygotowywania projektu. W tym celu należy wybrać File?New?Java Project. W oknie nowego projektu (rysunek 4) należy podać nazwę projektu, a z listy modułów wybrać MICROUI oraz EDC (numery wersji są zależne od wersji środowiska, które zostało zainstalowane).

Rys. 4. Tworzenie nowego projektu