Obsługa wyświetlacza LCD z interfejsem SPI oraz wykorzystywanie bufora kołowego

0

Witam, mam do zaimplementowania bufor kolowy ktory ma komunikować się z PC poprzed z USART, a nastepnie na wyswietlaczu ma byc realizowana prosta gra logiczna.
Od czego zacząć i jak dokładnie dziala bufor kołowy na przerwaniach?

1

zacząć możesz od nauki obsługi googla, np. https://www.google.pl/search?q=bufor+ko%C5%82owy+na+przerwaniach

0

UPDATE:
Dokładnie chodzi o wyświetlacz LCD 1,8" TFT 128x160 ST7735

1

Popularny moduł. Bez problemu korzystałem z niego z RPi i Arduino (z użyciem gotowych bibliotek).
Myślę, że więcej się dowiesz jak pokażesz swój kod i zadasz konkretne pytanie.

1

Nie podałeś jaki dokładnie jest to STM, ale jeżeli coś z serii STM32F429xx, to masz dwie drogi.

  1. Możesz obsługiwać ten wyświetlacz, tak jak z poziomu AVR albo Raspberry typowo programowo. W takim przypadku dokumentacja wyświetlacza, jakieś przykładowe kody do pomocy i do boju.
  2. Jeżeli masz jednak coś ze wspomnianej serii STM oraz twój wyświetlacz ma odpowiedni interfejs, to mają one pewne sprzętowe wsparcie do obsługi wyświetlaczy w formie LTDC i Chrom-ART Accelerator (często określany tak oczywistym skrótem jak DMA2D ;-) . Najlepiej chyba tymi rozwiązaniami bawić się na płytce STM32F429I-DISCO. Tutaj przykładowy film jak to połączyć ze sobą:

Wyświetlacz na wspomnianej przeze mnie płytce to ILI9341. Nawet jeżeli nie chcesz/nie możesz użyć sprzętowego wsparcia wyświetlacza, to warto aktywować kostkę DRAM na płycie na potrzeby grafik. Jeżeli masz jedną z tych wspieranych płytek przez STM32CubeMX, to najszybszym sposobem na poznanie prawidłowych parametrów jest utworzenie nowego projektu i na pytaniu o zainicjalizowanie wszystkich peryferiów wyrażenie zgody, po czym podejrzenie ustawień. W przypadku nieoficjalnej płytki musisz samemu zagłębić się w schemat płytki i dokumentację twojej pamięci DRAM.

Jak umieszczać grafiki w pamięci? W przypadku DMA2D w pamięci musisz umieszczać pliki BMP. Umieszczenie takiego pliku polega w praktyce na przerobieniu go na plik nagłówkowy. Wyjaśniając dokładniej: pierwsze bajty pliku BMP po otworzeniu w hex edytorze, to: 0x42, 0x4d, 0x7a, 0x84 itd. Twój plik nagłówkowy powinien więc zawierać taką tablicę:

const uint8_t moja_grafika[] = {0x42, 0x4d, 0x7a, 0x84...};

Możesz samemu napisać taki konwerter, ale w internecie widziałem już kilka tego typu narządzi. Problem tej konwersji został tutaj jeszcze opisany https://www.riuson.com/blog/post/generate-image-for-stm32-discovery-bsp Od siebie dodam, iż jeżeli będziesz konwertował grafikę z jakiegoś innego formatu (np. JPG) na BMP, to musisz uważać aby program graficzny za bardzo nie zoptymalizował pliku BMP. Miałem sytuację, iż GIMP przeskalowaniu obrazka stwierdził, iż do jego zapisania w BMP wystarczy mu paleta, w której na jeden kolor przypadają 4 bity. Problem w tym, iż funkcja BSP_LCD_DrawBitmap dla mojej płytki nie przewidywała takiego wariantu i program szedł w krzaki. Nawet jeżeli nie używasz DMA2D, to myślę, iż warto spróbować zaimplementować prostą obsług BMP. Różnica będzie taka, iż zamiast piksele wysyłać do przemielenia przez sprzętowe wsparcie będziesz musiał je samemu wysłać. Jako punkt startowy polecam zajrzeć w źródła wspomnianej funkcji BSP_LCD_DrawBitmap dla mojej płytki, bo implementacja formatu jest tam zrobiona tak prosto jak to możliwe, a jako dokumentacja formatu myślę, iż na obecnym etapie wystarczy angielska wikipedia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1