[6] STM32CUBE w przykładach (obsługa interfejsu I2C)

  1. Z powodu błędu w oprogramowaniu System Workbench, możemy mieć problem z kompilacją kodu zawierającego odwołania do funkcji z biblioteki math. Aby temu zaradzić, należy wejść w ustawienia projektu (klikamy prawym przyciskiem na jego nazwę i z menu wybieramy polecenie „Properties”). Następnie otwieramy kartę „C/C++ Build” –> „Settings” i w kolejnym panelu, wewnątrz nowej karty, rozwijamy „MCU GCC Linker” –> „Libraries”, przewijamy kartę w dół, odznaczamy opcję „Use C math library” oraz dodajemy (przycisk z plusem), w polu „Libraries”, bibliotekę o nazwie „m”. Dalej klikamy przycisk „Apply” oraz „OK”.
Rys. 12. Dodawanie biblioteki math w ustawieniach linkera
  1. Modyfikujemy kod źródłowy plik „Src/main.c” zgodnie z listingiem nr 1 oraz tworzymy dwa nowe pliki – “bmp180.h”, w podfolderze “Inc” oraz “bmp180.c”, w “Src”. Aby to zrobić, w panelu Project Explorer, znajdującym się z lewej strony głównego okna środowiska, klikamy prawym przyciskiem myszy na nazwę podfolderu (“Inc” i “Src”), a następnie, z menu kontekstowego wybieramy kolejno: “New” -> “File”, podajemy jego nazwę i zatwierdzamy klikając “Finish”.

 

List. 1. Zawartość pliku main.c

 

List. 2. Zawartość pliku bmp180.h

 

List. 3. Zawartość pliku bmp180.c

  1. Po dokonaniu modyfikacji, zapisujemy zmiany w plikach, kompilujemy, wgrywamy i uruchamiamy program na mikrokontrolerze – klikamy ikony młotka i robaka, znajdujące się na pasku narzędziowym. Gdy program zostanie już uruchomiony, włączamy program PuTTY, opisany dokładniej w czwartej części serii, wybieramy w jego ustawianiach typ połączenia – “Serial”, jego szybkość – 115200 kbps, nazwę portu szeregowego – tą możemy sprawdzić w Menadżerze Urządzeń bądź dmesg-u i klikamy przycisk OK.
Rys. 13. Ustawianie parametrów połączenia UART w programie PuTTY

 

Rys. 14. Odbiór danych w programie PuTTY

Plik nagłówkowy (“bmp180.h”) definiuje funkcje i struktury danych biblioteki. Jest dołączany wszędzie tam gdzie istnieje potrzeba skorzystania z biblioteki. Towarzyszący mu plik „.c” (“bmp180.c”) zawiera kod źródłowy tych funkcji. Aby korzystając z biblioteki, wykonać pomiar i wydobyć wartości zmierzone, należy kolejno: znacjonalizować strukturę przechowującą odczytane wartości (“bmp_state bmp = bmp_init(&hi2c1);”), odczytać do tej struktury dane kompensujące wyniki pomiarów (“bmp_read_compensation_data(&bmp);”), wykonać pomiary temperatury i ciśnienia (“bmp_read_temp_and_pressure(&bmp);”), odczytać skompensowaną wartość temperatury (“double temperature = bmp_get_temperature(&bmp);”), ciśnienia atmosferycznego (“doubel pressure = bmp_get_pressure(&bmp);”) oraz wyliczyć na podstawie ciśnienia, wysokość n.p.m. (“double altitude = bmp_get_altitude(pressure, 1013.25);”). Zwracana przez funkcje wartości podawane są w następujących jednostkach: temperatura – stopnie Celsjusza, ciśnienie – hektopaskale, wysokość – metry nad poziomem morza. Następnie, w pliku “main.c”, przy pomocy funkcji sprintf() oraz HAL_UART_Transmit(), parametry te zapisywane są do zmiennej typu string i wysyłane do komputera interfejsem UART. Znaki “\r” oraz “\n”, użyte w instrukcji sprintf(), oznaczają kolejno: powrót na początek linii oraz przejście do nowej linii. Dzięki zastosowaniu jedynie instrukcji “\r”, w drugim wywołaniu funkcji sprintf(), wyniki wyświetlane w oknie PuTTY są cały czas nadpisywane, w tej samej linii.

Interfejs I2C, podobnie jak pozostałe omawiane, może być wykorzystywany w trybie DMA oraz w przerwaniach. Wywołania funkcji są niemal identyczne jak dla interfejsu SPI, czy UART.

Aleksander Kurczyk

 

Do pobrania

Autor: