UM3236 LVGL knihovny pro LCD displeje
Uživatelská příručka
Zavedení
V moderním kontextu automobilového průmyslu je běžné vyvíjet stále složitější GUI i pro malé LCD displeje. Pro splnění této potřeby byla vytvořena nová komponenta AEK-LCD-LVGL, která byla přidána do ekosystému AutoDevKit.
Tato nová komponenta importuje grafickou knihovnu LVGL a používá se s komponentou AEK-LCD-DT028V1 k rychlejšímu vývoji složitých GUI.
LVGL (odlehčená a všestranná grafická knihovna) je bezplatná grafická knihovna s otevřeným zdrojovým kódem napsaná v jazyce C, která poskytuje nástroje pro vytváření grafických rozhraní se snadno použitelnou grafikou, pěknými vizuálními efekty a nízkou zátěží paměti.
LVGL je velmi výkonný, protože obsahuje předdefinované prvky, jako jsou tlačítka, grafy, seznamy, posuvníky a obrázky. Vytváření grafiky s animacemi, vyhlazováním, neprůhledností a plynulým rolováním je s LVGL zjednodušeno. Knihovna je kompatibilní s mnoha typy vstupních zařízení, jako jsou touchpady, myši, klávesnice a kodéry. Cílem této uživatelské příručky je ukázat, jak snadno vytvořit LCD GUI pomocí AutoDevKit.
Poznámka: Další podrobnosti o LVGL naleznete v oficiální dokumentaci. Zdrojový kód je k dispozici ke stažení z GitHubu.
Architektura AEK-LVGLObrázek výše ukazuje softwarovou architekturu LVGL integrovanou do AutoDevKit.
Softwarová architektura se vyznačuje:
- Knihovna LVGL: implementuje pokročilé grafické funkce založené na základní grafické knihovně AEK-LCD-DT028V1:
– aek_ili9341_drawPixel: tiskne pixely na LCD AEK-LCD-DT028V1;
– aek_lcd_get_touchFeedback: detekuje dotyk na dotykové obrazovce LCD AEK-LCD-DT028V1;
– aek_lcd_read_touchPos: získá souřadnice dotykového bodu;
– aek_lcd_set_touch Feedback: Označuje, že dotyková akce je dokončena. - Základní grafická knihovna: implementuje základní grafické funkce a volá nízkoúrovňová primitiva ovladačů.
- Nízkoúrovňový ovladač: implementuje periferie MCU. V tomto případě se používá protokol SPI.
- AEK-LCD-DT028V1: LCD vyhodnocovací deska.
Základy LVGL
Knihovna LVGL spolupracuje s komponentou AEK-LCD-DT028V1 prostřednictvím dvou ovladačů Disprove a IndevDriver, jak je znázorněno na obrázku níže.Disprove má na starosti přípravu obrazu vyrovnávací paměti a jeho předání do spodní vrstvy, aby se zobrazilo na LCD. Používá následující strukturu typu lv_disp_drv_t:
- draw_buf: ukazuje na strukturu vyrovnávací paměti, ve které LVGL kreslí.
- nájemníci: horizontální rozlišení displeje v pixelech.
- Verres: vertikální rozlišení displeje v pixelech.
- flush_cb: ukazuje na funkci použitou k tisku vyrovnávací paměti na LCD displej.
- monitor_cb: sleduje počet pixelů a čas potřebný k zobrazení dat.
Na druhé straně IndevDriver získává dotykové informace LCD přicházející ze spodní vrstvy. Používá následující strukturu typu lv_indev_drv_t:
typ: toto pole obsahuje typ vstupního zařízení. Mezi předdefinovaná dostupná makra patří:
– LV_INDEV_TYPE_POINTER (použito v našem případě)
– LV_INDEV_TYPE_KEYPAD
– LV_INDEV_TYPE_ENCODER
– LV_INDEV_TYPE_BUTTON
redact: ukazuje na funkci použitou k načtení dotykových informací.
flush_cb a redact: jsou volány periodicky na základě uživatelem definované periody obnovy obrazovky a dotykového obnovovacího vstupu. Knihovna LVGL řídí obnovovací časy prostřednictvím vnitřních hodin. Pro správu času se používají dvě základní funkce LVGL: - lv_tick_inc(uint32_t x): cílem této funkce je synchronizovat čas LVGL s fyzickým časem MCU. Aktualizace zaškrtnutí musí být nastavena mezi 1 až 10 milisekundami podle specifikace LVGL. v
V našem případě jsme ji nastavili na 5 milisekund. - lv_timer_handler (void): aktualizuje vnitřní objekty LVGL na základě uplynulého času. Fyzický čas je sledován prostřednictvím periferie programovatelného časovače přerušení (PIT) MCU.
Rozhraní mezi LVGL a komponentou AEK-LCD-DT028V1
Rozhraní mezi AEK-LCD-LVGL a komponentou AEK-LCD-DT028V1 je implementováno file s názvem lcd_lvgl.c umístěný ve složce „aek_lcd_lvgl_component_rla“. Tento file obsahuje funkce pro:
- inicializovat knihovnu LVGL,
- spravovat interní časovač LVGL,
- rozhraní knihovny LVGL se základní grafickou knihovnou implementovanou komponentou AEK-LCD-DT028V1.
V následujících odstavcích je vysvětleno pět klíčových funkcí.
3.1 Inicializace displeje
Funkce aek_lcd_lvgl_display_init inicializuje dvě klíčové struktury LVGL, Disprove a IndevDriver.
3.1.1 Vyvrátit
Klíčovým cílem struktury Disprove je udržovat vyrovnávací paměť pro LVGL. Pole Disprove draw_buf ukazuje na strukturu vyrovnávací paměti, která může obsahovat až dva různé vyrovnávací paměti. Pole draw_buf je inicializováno funkcí lv_disp_draw_buf_init().Ve výše uvedeném kódu představují parametry DISP_HOR_RES a DISP_VER_RES rozměr LCD.
Poznámka:
Velikost vyrovnávací paměti musí být přizpůsobena podle dostupné paměti systému. Oficiální průvodce LVGL doporučuje zvolit velikost vyrovnávacích pamětí pro kreslení alespoň 1/10 velikosti obrazovky. Pokud je použita druhá volitelná vyrovnávací paměť, LVGL se může napojit na jednu vyrovnávací paměť, zatímco data z druhé vyrovnávací paměti jsou odesílána k zobrazení na pozadí.Dalšími parametry struktury jsou rozměry obrazovky, dvě funkce, flush a monitor_cb, které budeme analyzovat později. Jakmile je struktura vyplněna, musí být zaregistrována pomocí vyhrazené funkce lv_disp_drv_register() pro nastavení aktivního zobrazení.
3.1.2 IndevDriver
IndevDriver se inicializuje následovně:Klíčem definovaná pole představují typ použitého zařízení a funkce pro jeho správu. Také v tomto případě musí být inicializovaná struktura zaregistrována, aby se zařízení stalo aktivním.
3.2 Spláchnout
Funkce splachování využívá základní grafickou knihovnu komponent AEK-LCD-DT028V1 k vykreslení obrazu přítomného ve vyrovnávací paměti inicializované podle předchozího odstavce na LCD.Kostra funkce flush byla poskytnuta funkcí LVGL a přizpůsobena používanému ovladači obrazovky LCD (tj. aek_ili9341_drawPixel – kreslení pixelů). Vstupní parametry jsou:
- suché: ukazatel na Vyvrátit
- area: buffer, který obsahuje specifickou oblast, kterou je třeba aktualizovat
- barva: buffer, který obsahuje barvy, které mají být vytištěny.
3.3 monitor_cb
Funkce monitor_cb je definována v oficiální příručce LVGL a nevyžaduje přizpůsobení.3.4 my_input_read
Funkce my_input_read má na starosti správu vstupu přicházejícího z LCD obrazovky na vysoké úrovni.
Kostra funkce je definována knihovnou LVGL. Vstupní parametry jsou:
- drv: ukazatel na inicializovaný vstupní ovladač
- data: obsahuje pixelově převedenou souřadnici x,y dotykových bodů Obrázek níže ukazuje implementaci funkce my_input_read:
3.5 Obnovit obrazovku
Funkce aek_lcd_lvgl_refresh_screen aktualizuje interní časovače LVGL.
Poznámka: Tato funkce musí být správně umístěna v kódu aplikace, aby byla splněna časová omezení LVGL.
Ekosystém AutoDevKit
Vývoj aplikací, které využívají AEK-LCD-LVGL, vyžaduje plný pokroktage z AutoDevKit ekosystém, jehož základními složkami jsou:
- AutoDevKit Studio IDE instalovatelné z www.st.com/autodevkitsw
- Ladicí software SPC5-UDESTK pro Windows nebo Opened debugger
- Mechanika AEK-LCD-LVGL
4.1 AutoDevKit Studio
AutoDevKit Studio (STSW-AUTODEVKIT) je integrované vývojové prostředí (IDE) založené na Eclipse navržené k podpoře vývoje vestavěných aplikací založených na 5bitových mikrokontrolérech SPC32 Power Architecture.
Balíček obsahuje průvodce aplikací pro zahájení projektů se všemi relevantními komponentami a klíčovými prvky potřebnými pro generování konečného zdrojového kódu aplikace. AutoDevKit Studio také nabízí:
- možnost integrace dalších softwarových produktů ze standardního tržiště Eclipse
- bezplatná licence GCC GNU C Compiler komponent
- podpora standardních kompilátorů
- podpora vícejádrových mikrokontrolérů
- PinMap editor pro usnadnění konfigurace pinů MCU
- integrované hardwarové a softwarové komponenty, kontrola kompatibility komponent a nástroje pro konfiguraci MCU a periferií
- možnost vytváření nových systémových řešení ze stávajících přidáním nebo odebráním kompatibilních funkčních desek
- nový kód lze okamžitě vygenerovat pro jakýkoli kompatibilní MCU
- vysokoúrovňová aplikační API pro ovládání každé funkční komponenty, včetně těch pro komponentu AEK-LCDLVGL.
Další informaceq viz UM2623 (zejména oddíl 6 a oddíl 7) nebo se podívejte na videonávody.
4.2 Komponenta AEK_LCD_LVGL
Ovladače AEK-LVGL jsou dodávány s instalací STSW-AUTODEVKIT (od verze 2.0.0 dále) pro usnadnění fáze programování.
Aktualizujte svou instalaci AutoDevKit, abyste získali nejnovější verzi. Po správné instalaci vyberte komponentu s názvem AEK_LVGL Component RLA.
4.2.1 Konfigurace součásti AEK_LCD_LVGL
Při konfiguraci součásti postupujte podle níže uvedeného postupu.
Krok 1. Nastavte čas Refr_Period. Toto je perioda aktualizace obrazovky (doporučená hodnota je 30).
Krok 2. Nastavte čas Read_Period. Toto je minimální doba mezi dvěma následujícími detekcemi dotyku (doporučená hodnota je 30).
Krok 3. Zaškrtnutím políčka Draw Complex povolíte pokročilé widgety, jako jsou stíny, přechody, zaoblené rohy, kruhy, oblouky, zkosené čáry a transformace obrázků.
Krok 4. Vyberte písma, která chcete použít. Vezměte v úvahu, že každé písmo vyžaduje další flash paměť pro vygenerovaný kód aplikace.
Jak vytvořit projekt AutoDevKit s komponentou AEK-LCD-LVGL založenou na SPC58EC
Postup je následující:
Krok 1. Vytvořte novou aplikaci AutoDevKit Studio pro mikrokontrolér řady SPC58EC a přidejte následující součásti:
– SPC58ECxx Init Package Component RLA
– SPC58ECxx Low Level Drivers Component RLA
Poznámka:
Přidejte tyto součásti na začátku, jinak zbývající součásti nejsou viditelné.
Krok 2. Přidejte následující další součásti:
Krok 2a. Součást Init Package AutoDevKit
Krok 2b. SPC58ECxx Platform Component RLA
Krok 2c. AEK-LCD-DT028V1 Komponenta RLA (viz UM2939 pro konfiguraci)
Krok 2d. Komponenta AEK-LCD-LVGL RLAKrok 3. Klikněte na tlačítko [Alokace] v konfiguračním okně AEK-LCD-LVGL. Tato operace deleguje konfiguraci AEK-LCD-LVGL na AutoDevKit.
Krok 4. Přidělení povolilo periferii časovače PIT. Můžete si to ověřit v komponentě Low-Level Driver.Krok 5. Vygenerujte a sestavte aplikaci pomocí příslušných ikon v AutoDevKit Studio. Složka projektu se pak naplní novými files, včetně main.c. Složka komponent je pak naplněna AEKLCD-DT028V1 a
Ovladače AEK-LCD-LVGL.
Krok 6. Otevřete maniku file a zahrnují AEK-LCD-DT028V1.h a AEK_LCD_LVGL.h files.Krok 7. V maniku file, za funkci irqIsrEnable() vložte následující povinné funkce:
Krok 8. Do souboru main.c zkopírujte a vložte exampsoubor z knihovny LVGL převzatý z oficiálního průvodce a vložte jej do main().
Krok 9. Uložte, vygenerujte a zkompilujte aplikaci.
Krok 10. Otevřete desku view editor poskytovaný AutoDevKit Poskytuje grafického point-to-point průvodce, jak zapojit desky.
Krok 11. Připojte AEK-LCD-DT028V1 k USB portu na vašem PC pomocí mini-USB na USB kabelu.
Krok 12. Spusťte SPC5-UDESTK-SW a otevřete ladicí programy file ve složce AEK-LCD-LVGL– Application /UDE.
Krok 13. Spusťte a odlaďte svůj kód.
Dostupné ukázky pro AEK-LVGL
S komponentou AEK-LCD-LVGL je k dispozici několik ukázek:
- SPC582Bxx_RLA Testovací aplikace AEK_LCD_LVGL
- SPC58ECxx_RLA Testovací aplikace AEK-LCD_LVGL
- duální obrazovka AVAS demo – SPC58ECxx_RLA_MainEcuForIntegratAVASControl – Testovací aplikace
Poznámka: S novými verzemi AutoDevKit mohou být k dispozici další ukázky.
Pokročilá aplikace napřample – ukázka AVAS na dvou obrazovkách
Byla implementována pokročilá aplikace využívající LVGL. Tato aplikace vykresluje na displeji měřidlo otáček motoru a spravuje související animace měřiče.
Implementovaná aplikace AVAS je založena na desce AEK-AUD-C1D9031 a simuluje zvuk motoru automobilu při nízkých rychlostech, aby upozornila chodce na blížící se elektrické vozidlo.
V ukázce simulujeme zrychlení a zpomalení (tj. zvýšení/snížení otáček) motoru automobilu a jeho hlasitost prostřednictvím ovládacího panelu implementovaného na LCD obrazovce AEK-LCD-DT028V1.Rozšířili jsme demo přidáním druhého LCD AEK-LCD-DT028V1 a pomocí knihovny LVGL jsme vytvořili rychloměr pro měření hodnot otáček motoru.
7.1 Použité widgety LVGL
K vývoji ukázky AVAS se dvěma obrazovkami jsme použili následující widgety LVGL:
- Obrázek použitý jako pozadí tachometru
- Oblouk používaný jako ukazatel tachometru
- Animace, která aktualizuje hodnotu oblouku podle otáček motoru
7.1.1 Widget obrázku LVGL
Chcete-li použít obrázek s knihovnou LVGL, převeďte jej do pole C pomocí bezplatné online konvertor.Poznámka:
Při převodu obrázku nezapomeňte zaškrtnout políčko pro formát Big-Endian.
V ukázce AVAS se dvěma obrazovkami bylo pole C představující obrázek tachometru pojmenováno Gauge. Widget obrázku byl přizpůsoben jako následuje:Kde:
- lv_img_declare: se používá k deklaraci obrazu s názvem Gauge.
- lv_img_create: slouží k vytvoření objektu obrázku a jeho připojení k aktuální obrazovce.
- lv_img_set_src: toto je obrázek získaný z dříve zobrazeného konvertoru LVGL (doporučuje se použít formát jpg).
- lv_obj_align: se používá k zarovnání obrazu na střed s daným posunem.
- lv_obj_set_size: slouží k nastavení velikosti obrázku.
Poznámka:
Další podrobnosti o tom, jak spravovat obrázek pomocí knihovny LVGL, naleznete v oficiální dokumentaci.
7.1.2 Widget oblouku LVGL
Byl vytvořen vícebarevný oblouk, který ukazuje okamžité otáčky motoru. Vícebarevný oblouk se skládá ze dvou sousedících barev, červené a modré.Následující kód ukazuje, jak vytvořit oblouk:
Kde:
- lv_arc_create: vytvoří obloukový objekt.
- lv_arc_set_rotation: nastavuje rotaci oblouku.
- lv_arc_set_bg_angles: nastavuje maximální a minimální hodnotu oblouku ve stupních.
- lv_arc_set_value: nastaví počáteční hodnotu oblouku na nulu.
- lv_obj_set_size: nastavuje rozměry oblouku.
- lv_obj_remove_style: odstraní koncový ukazatel oblouku.
- lv_obj_clear_flag: nastaví oblouk jako neklikací.
- lv_obj_align: zarovná oblouk na střed se zadaným odsazením.
7.1.3 Animace související s widgetem
Vytvoří se specifická funkce animace oblouku a předá se motoru LVGL pro zobrazení změn otáček. Kód funkce je následující:Kde:
- arc: je ukazatel na aktuální widget oblouku
- zpoždění: je doba zpoždění před začátkem animace
- start: je počáteční poloha oblouku
- konec: je konečná poloha oblouku
- rychlost: je rychlost animace v jednotkách/s.
Poznámka: Další podrobnosti o použitých animačních funkcích naleznete v dokumentaci LVGL. Vzhledem k tomu, že celý oblouk se skládá ze dvou na sebe navazujících oblouků, museli jsme správně zvládnout funkci animace. Za tímto účelem analyzujme dva různé scénáře:
- Případ: animace zahrnuje jeden oblouk V tomto jednoduchém případě přiřadíme oblouku jedinou animaci.
- Případ: animace zahrnuje dva oblouky V tomto případě animace druhého oblouku začíná na konci animace prvního.
Specifická funkce LVGL (lv_anim_speed_to_time) počítá dobu animace. Tato doba provádění se používá k výpočtu zpoždění animace druhého oblouku.7.2 Implementace dvou jader
V ukázce AVAS se dvěma obrazovkami jsou úlohy zobrazení a přehrávání zvuku souběžně prováděny ve vestavěném systému v reálném čase. Abychom překonali možnou ztrátu odezvy systému, rozhodli jsme se použít dvě různá jádra: jedno vyhrazené pro displej a jedno pro přehrávání zvuku.
Na desce AEK-MCU-C4MLIT1 je umístěn mikrokontrolér SPC58EC80E5 s dvoujádrovým procesorem, který se nejlépe hodí pro výše popsaný případ.
Podrobně:
- Jádro 2: Jako první se spustí, inicializuje knihovnu a poté spustí kód aplikace.
- Jádro 0: Volá funkci aek_lcd_lvgl_refresh_screen() v rámci hlavní smyčky, aby se průběžně aktualizoval displej a četl dotykový vstup.
Funkce PIT a aek_lcd_lvgl_refresh_screen() musí být umístěny ve stejném jádru.
Historie revizí
Tabulka 1. Historie revizí dokumentu
Datum | Revize | Změny |
4. října 23 | 1 | Počáteční vydání. |
DŮLEŽITÉ UPOZORNĚNÍ – ČTĚTE POZORNĚ
STMicroelectronics NV a její dceřiné společnosti (“ST”) si vyhrazují právo provádět změny, opravy, vylepšení, úpravy a vylepšení produktů ST a/nebo tohoto dokumentu kdykoli bez upozornění. Kupující by měli před zadáním objednávky získat nejnovější relevantní informace o produktech ST. Produkty ST jsou prodávány v souladu s prodejními podmínkami ST platnými v době potvrzení objednávky. Kupující jsou výhradně odpovědní za výběr, výběr a použití produktů ST a ST nepřebírá žádnou odpovědnost za pomoc s aplikací nebo design produktů kupujících.
Společnost ST zde neuděluje žádnou výslovnou ani předpokládanou licenci k právu duševního vlastnictví.
Další prodej produktů ST s ustanoveními odlišnými od informací uvedených v tomto dokumentu ruší jakoukoli záruku poskytnutou společností ST na takový produkt.
ST a logo ST jsou ochranné známky společnosti ST. Další informace o ochranných známkách ST viz www.st.com/trademarks. Všechny ostatní názvy produktů nebo služeb jsou majetkem jejich příslušných vlastníků.
Informace v tomto dokumentu nahrazují a nahrazují informace dříve uvedené v předchozích verzích tohoto dokumentu. © 2023 STMicroelectronics – Všechna práva vyhrazena
UM3236 – Rev 1 – říjen 2023
Pro další informace kontaktujte svého místního prodejce STMicroelectronics
Dokumenty / zdroje
![]() |
STMicroelectronics UM3236 LVGL knihovny pro LCD displeje [pdfUživatelská příručka AEK-LCD-DT028V1, UM3236, UM3236 LVGL knihovny pro LCD displeje, LVGL knihovny pro LCD displeje, Knihovny pro LCD displeje, LCD displeje |