[PROJEKT] Programowy koder JPG dla STM32

W systemach mikroprocesorowych wyposażonych w kolorowe kamery są generowane pliki danych o sporych objętościach. W przypadku zdjęć, które mają być wykorzystane poza systemem najlepiej dane obrazu zapisać w formie pliku w powszechnie akceptowalnym formacie graficznym. Jeżeli w związku z dalszym wykorzystaniem obrazu dopuszczalna jest kompresja stratna najwygodniejszym formatem zapisu jest format JPG. Przy nieznacznym pogorszeniu jakości obrazu wielkość pliku JPG jest wielokrotnie mniejsza od rozmiaru danych wejściowych, co w systemach z mikrokontrolerami jest pożądane.
O ile łatwo znaleźć pliki źródłowe procedur koderów JPG dla dużych komputerów, to trudniej o podobny przykład dla małego systemu z ograniczonymi zasobami pamięci RAM i Flash. Z tego powodu kilka lat temu samodzielnie dostosowałem bibliotekę kodera JPG tak, aby możliwe było jej uruchomienie w urządzeniu z mikrokontrolerem z rodziny STM32F2xx. Jako podstawę wykorzystałem dostępny w sieci koder JPG dla komputera PC, opracowany w 1999 roku przez Cristi Cuturicu. Koder zapewnia 10…12-krotne zmniejszenie objętości danych wejściowych przy zadawalającej jakości obrazu po kompresji. Zużycie pamięci RAM zależy od rozmiarów zdjęć i sposobu użycia biblioteki kodera. W przypadku zdjęcia o wymiarach 160×120 pikseli w formacie RGB565 (2 bajty na piksel) i użyciu dwóch buforów w pamięci RAM dla danych obrazu i wyjściowego pliku JPG, potrzeba łącznie około 45…50 kB RAM-u. Zapotrzebowanie na pamięć można zmniejszyć jeżeli system posiada pamięć masową, z której można pobierać dane do konwersji a samą konwersję przeprowadzać kolejnymi krokami.
Opracowany przykład oprogramowania pokazuje sposób użycia biblioteki kodera JPG. Sposób działania programu jest następujący:
- oczekiwanie w pętli na sygnał do wykonania zdjęcia,
- ustawienie modułu kamery do wykonania zdjęcia o formacie 160×120 RGB565,
- wykonanie zdjęcia i przy pomocy mechanizmu DMA mikrokontrolera przesłanie danych obrazu z modułu do buforu w pamięci RAM,
- wywołanie procedury encode_image która koduje dane obrazu a wynikowy plik JPG zapisuje w buforze wyjściowym,
- przepisanie pliku JPG z buforu wyjściowego do katalogu na karcie microSD.
Procedura encode_image wywoływana jest z następującymi parametrami:
- parametr char określający typ kodowania i położenie buforu danych wejściowych. Ponieważ w tym przykładzie domyślnym buforem danych jest globalny bufor_RAM_pliku_obrazka_format[] utworzony w pamięci RAM mikrokontrolera parametr zawsze powinien mieć wartość KODOWANIE_JPG_Z_INT_RAM (0x02),
- parametr char * wskaźnik do początku buforu danych wyjściowych dla pliku JPG,
- parametr int rozmiar w bajtach buforu danych wyjściowych,
- parametr char czynnik którego wartość określa stopień kompresji. Zwykle 50, dla 80 kompresja jest większa ale spada jakość zdjęcia kodowanego w formacie JPG,
- parametr int szerokość w pikselach obrazu poddawanego kompresji,
- parametr int wysokość w liniach obrazu poddawanego kompresji,
- parametr char * w tym przykładzie nie wykorzystywany.
Po konwersji plik JPG zapisywany jest na karcie microSD. Do komunikacji pomiędzy mikrokontrolerem a kartą wykorzystywana jest magistrala SPI. Zdjęcia zapisywane są w katalogu odpowiadającemu aktualnemu dniu tygodnia. Katalogi dni tygodnia tworzone są na karcie automatycznie przez oprogramowanie. Za pracę z katalogami odpowiada darmowy FatFs – FAT file system przystosowany dla mikrokontrolera STM32F2xx.
Oprogramowanie na potrzeby niniejszego przykładu powstało z dostosowania większego projektu. Dla zwiększenia przejrzystości usunięto wszelkie procedury typu: obsługa UART-a, zmiana parametrów zdjęcia, ustawianie zegara RTC. Procedury te w rzeczywistym urządzeniu muszą być oczywiście dopisane i obsługiwane.
Rys. 1. Schemat elektryczny testowego „aparatu fotograficznego”
Oprogramowanie przystosowane jest do układu, którego schemat ideowy pokazany został na rysunku 1. W minimalnej konfiguracji do działania układu potrzebne są oprócz standardowych peryferii mikrokontrolera następujące komponenty:
- X2, C31, C32 układ rezonatora zegara czasu rzeczywistego RTC,
- BT1 bateria +3V do podtrzymania w czasie wyłączenia zasilania zawartości rejestrów zegara RTC i rejestrów pamięci BKP mikrokontrolera,
- złącze JP9 do dołączenia modułu kamery ze sterownikiem MT9D111 firmy APTINA,
- SD1 gniazdo dla karty microSD,
- D1, D2 diody sygnalizacyjne,
- S1 przycisk astabilny inicjujący wykonanie kolejnego zdjęcia.
Stabilizator U1 (2,5V) i rezystor R10 służą do wytworzenia napięcia +2,8V dla modułu kamery. W przypadku zastosowania stabilizatora o napięciu pracy 2,8V opornik nie jest potrzebny.
W celu przejrzenia zdjęć zapisanych na karcie należy kartę wyjąc z gniazda i użyć zewnętrznego czytnika. Oprogramowanie może zapisać do 999 zdjęć w jednym podkatalogu dnia tygodnia.
Projekt przykładowego oprogramowania przeznaczony jest do pracy w środowisku uVision KEIL/ARM. Dla prawidłowej kompilacji potrzebny jest dostęp do STM32F2xx Standard Peripherals Library.
Ryszard Szymaniak



POWER UP. Wybór przekaźników do bezpiecznych stacji ładowania prądem przemiennym: normy, wymagania i rozwiązania
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 


![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)

