Biblioteche UM3236 LVGL per display LCD
Manuale d'usu
Introduzione
In u cuntestu mudernu di l'industria di l'automobile, hè cumunu di sviluppà GUI più è più cumplessi ancu per i picculi display LCD. Per risponde à sta necessità, un novu cumpunente, AEK-LCD-LVGL, hè statu creatu è aghjuntu à l'ecosistema AutoDevKit.
Stu novu cumpunente importa a libreria grafica LVGL, è hè utilizatu cù u cumpunente AEK-LCD-DT028V1 per sviluppà GUI cumplessi più veloce.
A LVGL (biblioteca grafica ligera è versatile) hè una libreria grafica libera, aperta, scritta in lingua C, chì furnisce arnesi per creà GUI cun grafica faciule d'utilizà, effetti visuali piacevuli è occupazione di memoria bassa.
LVGL hè assai putente postu chì cuntene elementi predefiniti, cum'è i buttoni, charts, listi, sliders è imagine. A creazione di grafica cù animazioni, anti-aliasing, opacità è scrolling fluidu hè simplificatu cù LVGL. A biblioteca hè cumpatibile cù parechji tipi di dispusitivi di input, cum'è touchpads, mouse, tastiere è codificatori. U scopu di stu manuale d'utilizatore hè di mustrà cumu creà una GUI LCD facilmente, utilizendu AutoDevKit.
Nota: Per più dettagli nantu à LVGL, riferite à a documentazione ufficiale. U codice fonte hè dispunibule per scaricà da GitHub.
L'architettura AEK-LVGLL'immagine sopra mostra l'architettura di u software LVGL integrata in AutoDevKit.
L'architettura di u software hè carattarizata da:
- Una libreria LVGL: implementa funzioni grafiche avanzate basate nantu à a libreria grafica basica AEK-LCD-DT028V1:
- aek_ili9341_drawPixel: stampa pixel in u LCD AEK-LCD-DT028V1;
- aek_lcd_get_touchFeedback: rileva u toccu nantu à u touch screen LCD AEK-LCD-DT028V1;
- aek_lcd_read_touchPos: riceve e coordenate di u puntu toccu;
- aek_lcd_set_touch Feedback: indica chì l'azzione di u toccu hè finita. - Una libreria grafica basica: implementa funzioni grafiche basiche è chjama primitivi di driver di livellu bassu.
- Un driver di livellu bassu: implementa periferiche MCU. In questu casu, u protocolu SPI hè utilizatu.
- Un AEK-LCD-DT028V1: Scheda di valutazione LCD.
Principi di LVGL
A biblioteca LVGL interagisce cù u cumpunente AEK-LCD-DT028V1 attraversu dui driver Disprove è IndevDriver, cum'è mostra in l'imaghjini sottu.U Disprove hè incaricatu di preparà l'imaghjini di buffer è di passà à a capa inferiore per vede nantu à u LCD. Aduprà a seguente struttura tipizzata lv_disp_drv_t:
- draw_buf: punta à una struttura di buffer di memoria in quale u LVGL tira.
- hiers: risoluzione horizontale di a visualizazione in pixel.
- Verres : risoluzione verticale di a visualizazione in pixel.
- flush_cb: punta à a funzione utilizata per stampà u buffer di memoria à u display LCD.
- monitor_cb: monitorizza u numeru di pixel è u tempu necessariu per vede e dati.
Da l'altra parte, IndevDriver recupera l'informazioni LCD touch chì venenu da a capa più bassa. Aduprà a seguente struttura tipizzata lv_indev_drv_t:
tipu: stu campu cuntene u tipu di u dispusitivu input. I macros dispunibuli predefiniti include:
- LV_INDEV_TYPE_POINTER (usatu in u nostru casu)
- LV_INDEV_TYPE_KEYPAD
- LV_INDEV_TYPE_ENCODER
- LV_INDEV_TYPE_BUTTON
redatta: punta à a funzione utilizata per ricuperà l'infurmazioni touch.
flush_cb è redact: sò chjamati periodicamente basati, rispettivamente, nantu à u periodu di rinfrescante di u screnu definitu da l'utilizatore è l'input di rinfrescante toccu. A biblioteca LVGL gestisce i tempi di rinfrescante attraversu un clock internu. Dui funzioni basi LVGL sò aduprate per a gestione di u tempu: - lv_tick_inc(uint32_t x): u scopu di sta funzione hè di sincronizà u tempu LVGL cù u tempu fisicu di u MCU. L'aghjurnamentu di tick deve esse stabilitu trà 1 à 10 millisecondi secondu a specificazione LVGL. In
u nostru casu, avemu stabilitu à 5 millisecondi. - lv_timer_handler (void): aghjurnà l'uggetti LVGL internu basatu annantu à u tempu passatu. U tempu fisicu hè monitoratu à traversu u timer di interruzzione programabile (PIT) perifericu di u MCU.
Interfaccia trà LVGL è u cumpunente AEK-LCD-DT028V1
L'interfaccia trà AEK-LCD-LVGL è u cumpunente AEK-LCD-DT028V1 hè implementata da un file chjamatu lcd_lvgl.c situatu sottu u cartulare "aek_lcd_lvgl_component_rla". Questu file cuntene funzioni per:
- inizializza a biblioteca LVGL,
- gestisce u timer internu LVGL,
- interfaccia a biblioteca LVGL cù a biblioteca grafica di basa implementata da u cumpunente AEK-LCD-DT028V1.
I cinque funzioni chjave sò spiegati in i seguenti paragrafi.
3.1 Display Init
A funzione aek_lcd_lvgl_display_init inizializza e duie strutture chjave LVGL, Disprove è IndevDriver.
3.1.1 Disprova
U scopu chjave di a struttura Disprove hè di mantene u buffer di disegnu per u LVGL. U campu Disprove draw_buf punta à a struttura di buffer di memoria capace di cuntene finu à dui buffer di memoria differenti. U campu draw_buf hè inizializatu cù a funzione lv_disp_draw_buf_init ().In u codice sopra, i paràmetri DISP_HOR_RES è DISP_VER_RES rapprisentanu a dimensione LCD.
Nota:
A dimensione di u buffer deve esse persunalizatu secondu a memoria dispunibile di u sistema. A guida ufficiale LVGL ricumanda di sceglie a dimensione di i buffer di disegnu di almenu 1/10 di a dimensione di u screnu. Se si usa un secondu buffer opzionale, LVGL pò toccu in un buffer mentre i dati di l'altru buffer sò mandati per esse visualizati in fondo.L'altri paràmetri di a struttura sò e dimensioni di u screnu, e duie funzioni, flush è monitor_cb, chì avemu da analizà dopu. Una volta riempita, a struttura deve esse registrata cù a funzione dedicata lv_disp_drv_register () per stabilisce una visualizazione attiva.
3.1.2 IndevDriver
L'IndevDriver hè inizializatu cusì:I campi definiti chjave sò u tipu di dispusitivu utilizatu è a funzione per gestisce. Ancu in questu casu, a struttura inizializzata deve esse registrata per fà u dispusitivu attivu.
3.2 Flush
A funzione di flush usa a libreria grafica di basa di cumpunenti AEK-LCD-DT028V1 per disegnà, nantu à u LCD, l'imaghjini presenti in u buffer di memoria inizializatu secondu u paràgrafu precedente.U scheletru di funzione flush hè statu furnitu da a funzione LVGL è persunalizatu per u driver di schermu LCD in usu (ie, aek_ili9341_drawPixel - pixel drawing). I paràmetri di input sò:
- seccu : u punteru à u Disprove
- area : buffer chì cuntene l'area specifica chì deve esse aghjurnata
- culore : buffer chì cuntene i culori per esse stampati.
3.3 monitor_cb
A funzione monitor_cb hè definita in a guida ufficiale LVGL è ùn hè micca bisognu di persunalizazione.3.4 my_input_read
A funzione my_input_read hè incaricata di gestisce l'input chì vene da u screnu LCD à altu livellu.
U scheletru di funzione hè definitu da a biblioteca LVGL. I paràmetri di input sò:
- drv: puntatore à u driver di input inizializatu
- data: cuntene a coordenada x,y cunvertita in pixel di i punti tocchi L'imaghjini sottu mostra l'implementazione di a funzione my_input_read:
3.5 Refresh screen
A funzione aek_lcd_lvgl_refresh_screen aghjurnà i timers interni LVGL.
Nota: Sta funzione deve esse piazzata currettamente in u codice di l'applicazione per cumpiendu i limiti di u tempu LVGL.
Ecosistema AutoDevKit
U sviluppu di l'applicazioni chì usa l'AEK-LCD-LVGL piglia un vantaghju cumpletutage di u AutoDevKit ecosistema, chì i cumpunenti basi sò:
- AutoDevKit Studio IDE installabile da www.st.com/autodevkitsw
- U software di debugging SPC5-UDESTK per Windows o debugger apertu
- Unità AEK-LCD-LVGL
4.1 AutoDevKit Studio
AutoDevKit Studio (STSW-AUTODEVKIT) hè un ambiente di sviluppu integratu (IDE) basatu annantu à Eclipse cuncepitu per aiutà u sviluppu di l'applicazioni integrate basate nantu à i microcontrollers SPC5 Power Architecture 32-bit.
U pacchettu include un assistente di l'applicazione per inizià i prughjetti cù tutti i cumpunenti pertinenti è elementi chjave necessarii per generà u codice fonte di l'applicazione finale. AutoDevKit Studio include ancu:
- a pussibilità di integrà altri prudutti di software da u mercatu standard Eclipse
- licenza libera GCC GNU C Compiler component
- supportu per i compilatori standard di l'industria
- supportu per i microcontrollers multi-core
- Editor PinMap per facilità a cunfigurazione di pin MCU
- cumpunenti hardware è software integrati, verificazione di cumpatibilità di cumpunenti, è strumenti di cunfigurazione MCU è periferiche
- a pussibilità di creà novi suluzioni di sistema da quelli esistenti aghjustendu o sguassate schede di funzione cumpatibili
- un novu codice pò esse generatu immediatamente per qualsiasi MCU cumpatibile
- API d'applicazione d'altu livellu per cuntrullà ogni cumpunente funziunale, cumprese quelli per u cumpunente AEK-LCDLVGL.
Per più infurmazione q riferite à UM 2623 (in particulare, Sezione 6 è Sezione 7) o fighjate i video tutorials.
4.2 AEK_LCD_LVGL cumpunente
I cunduttori AEK-LVGL sò furniti cù l'installazione STSW-AUTODEVKIT (da a versione 2.0.0) per facilità a fase di prugrammazione.
Aghjurnate a vostra installazione AutoDevKit per uttene l'ultima versione. Una volta installatu bè, selezziunate u cumpunente chjamatu AEK_LVGL Component RLA.
4.2.1 AEK_LCD_LVGL cunfigurazione di cumpunenti
Per cunfigurà u cumpunente, seguitate a prucedura sottu.
Passu 1. Stallà u tempu Refr_Period. Questu hè u periodu di rinfrescamentu di u screnu (u valore cunsigliatu hè 30).
Passu 2. Stallà u tempu Read_Period. Questu hè u tempu minimu trà duie rilevazioni di toccu seguenti (u valore cunsigliatu hè 30).
Passu 3. Tick the Draw Complex box per attivà u widget avanzatu cum'è ombre, gradienti, anguli arrotondati, circles, archi, linee skew, è trasfurmazioni di l'imaghjini.
Step 4. Selezziunà i fonti chì vo vulete aduprà. Cunsiderate chì ogni font richiede memoria flash extra per u codice di l'applicazione generatu.
Cumu creà un prughjettu AutoDevKit cù u cumpunente AEK-LCD-LVGL basatu in SPC58EC
I passi sò:
Passu 1. Crea una nova applicazione AutoDevKit Studio per u microcontroller di a serie SPC58EC è aghjunghje i seguenti cumpunenti:
- SPC58ECxx Init Package Component RLA
- SPC58ECxx Componente di Drivers Low Level RLA
Nota:
Aghjunghjite questi cumpunenti à u principiu, altrimente i cumpunenti restante ùn sò micca visibili.
Passu 2. Aghjunghjite i seguenti cumpunenti supplementari:
Passu 2a. Cumpunente di u pacchettu AutoDevKit Init
Passu 2b. SPC58ECxx Platform Component RLA
Passu 2c. AEK-LCD-DT028V1 Component RLA (vede UM 2939 per a cunfigurazione)
Passu 2d. AEK-LCD-LVGL Component RLAStep 3. Cliccate u buttone [Allocation] in a finestra di cunfigurazione AEK-LCD-LVGL. Questa operazione delega a cunfigurazione AEK-LCD-LVGL à AutoDevKit.
Step 4. L'allocazione hà permessu u perifericu timer PIT. Pudete verificà in u cumpunente di Driver Low-Level.Passu 5. Generate è custruisce l'applicazione cù l'icone apprupriate in AutoDevKit Studio. U cartulare di u prugettu hè poi populatu cù novi files, cumpresi main.c. U cartulare di cumpunenti hè populatu tandu cù AEKLCD-DT028V1 è
Drivers AEK-LCD-LVGL.
Step 6. Aprite u maniacale file è include AEK-LCD-DT028V1.h è AEK_LCD_LVGL.h files.Passu 7. In a mania file, dopu a funzione irqIsrEnable(), inserite e seguenti funzioni obligatorii:
Step 8. In u main.c, cupià è incollà un example da a libreria LVGL presa da a guida ufficiale è inserisci in u main().
Step 9. Salvà, generà, è compilà a dumanda.
Passu 10. Aprite u bordu view editore furnitu da AutoDevKit Questu furnisce una guida grafica di puntu à puntu nantu à cumu cablare e schede.
Passu 11. Cunnette vi AEK-LCD-DT028V1 à un portu USB nant'à u vostru PC cù un cavu mini-USB à USB.
Passu 12. Lanciari SPC5-UDESTK-SW è apre u debug file in u cartulare AEK-LCD-LVGL- Applicazione /UDE.
Step 13. Run è debug u vostru codice.
Demos dispunibili per AEK-LVGL
Ci sò parechje demo furnite cù u cumpunente AEK-LCD-LVGL:
- SPC582Bxx_RLA AEK_LCD_LVGL Test Application
- SPC58ECxx_RLA AEK-LCD_LVGL Test Application
- Demo AVAS dual screen - SPC58ECxx_RLA_MainEcuForIntegratAVASControl - Applicazione di prova
Nota: Più demo puderanu esse dispunibili cù novi versioni di AutoDevKit.
Applicazione avanzata example - dual screen AVAS demo
Una applicazione avanzata hè stata implementata cù LVGL. Questa applicazione disegna un calibre di vittura per i rpm di u mutore in un display è gestisce l'animazioni di calibre relative.
L'applicazione AVAS implementata hè basata nantu à a scheda AEK-AUD-C1D9031 è simula u sonu di u mutore di vittura à bassa velocità per avvistà i pedoni di un veiculu elettricu chì si avvicina.
In a demo, simulemu l'accelerazione è a decelerazione (vale à dì, un aumentu / diminuzione di rpms) di un mutore di vittura è u so voluminu attraversu un pannellu di cuntrollu implementatu nantu à a pantalla LCD di l'AEK-LCD-DT028V1.Avemu allargatu a demo aghjustendu un secondu LCD AEK-LCD-DT028V1 è utilizendu a biblioteca LVGL per creà un tachimetru per calibre i valori di rpm di u mutore.
7.1 Widgets LVGL utilizati
Per sviluppà a demo AVAS dual screen, avemu usatu i seguenti widgets LVGL:
- Una maghjina usata cum'è un fondo di tachimetru
- Un arcu usatu cum'è un indicatore di tachimetru
- Una animazione chì aghjurnà u valore di l'arcu secondu u rpm di u mutore
7.1.1 Un widget d'imaghjini LVGL
Per utilizà una maghjina cù a libreria LVGL, cunvertisce in un array C usendu un online gratuitu cunvertitore.Nota:
Quandu cunvertisce l'imaghjini ricordate di tick the box of the Big-Endian format.
In a demo AVAS dual screen, a matrice C chì rapprisenta l'imaghjini di u tachimetru hè stata chjamata Gauge. U widget di l'imaghjini hè statu persunalizatu cum'è seguita:Induve:
- lv_img_declare: hè utilizatu per dichjarà una maghjina chjamata Gauge.
- lv_img_create: hè utilizatu per creà un oggettu di l'imaghjini è aghjunghje à a pantalla attuale.
- lv_img_set_src: questa hè l'imaghjina ottenuta da u cunvertitore LVGL mostratu prima (si ricumandemu d'utilizà u furmatu jpg).
- lv_obj_align: hè utilizatu per allineà l'imaghjini à u centru cù un offset datu.
- lv_obj_set_size: hè utilizatu per stabilisce a dimensione di l'imaghjini.
Nota:
Per più dettagli nantu à cumu gestisce una maghjina cù a libreria LVGL, riferite à a documentazione ufficiale.
7.1.2 Un widget d'arcu LVGL
Un arcu multicolore hè statu creatu per vede i rpm istantanei di u mutore. L'arcu multicolore hè custituitu di dui culori cuntigui, rossu è blu, rispettivamente.U codice seguente mostra cumu creà un arcu:
Induve:
- lv_arc_create: crea un oggettu arcu.
- lv_arc_set_rotation: stabilisce a rotazione di l'arcu.
- lv_arc_set_bg_angles: stabilisce u valore di l'arcu massimu è minimu in gradi.
- lv_arc_set_value: stabilisce u valore iniziale di l'arcu à zero.
- lv_obj_set_size: stabilisce e dimensioni di l'arcu.
- lv_obj_remove_style: elimina u puntatore finale di l'arcu.
- lv_obj_clear_flag: stabilisce l'arcu cum'è micca clicable.
- lv_obj_align: allinea l'arcu à u centru cù un offset specificatu.
7.1.3 Animazione assuciata à u widget
Una funzione d'animazione d'arcu specifica hè creata è passata à u mutore LVGL per vede i cambiamenti di rpm. U codice funzione hè u seguenti:Induve:
- arc: hè u puntatore à u widget arcu attuale
- ritardu: hè u tempu di ritardu prima chì l'animazione principia
- start : hè a pusizione iniziale di l'arcu
- fine : hè a pusizione di l'arcu finale
- vitezza: hè a vitezza di l'animazione in unità/sec.
Nota: Per più dettagli nantu à e funzioni di animazione usate, riferite à a documentazione LVGL. Cunsiderendu chì l'arcu cumpletu hè custituitu da dui archi contigui, avemu avutu à gestisce a funzione d'animazione bè. Per questu scopu, analizzemu dui scenarii diffirenti:
- Casu: l'animazione implica un arcu In questu casu simplice, assignemu una sola animazione à l'arcu.
- Casu: l'animazione implica dui archi In questu casu, l'animazione di u sicondu arcu principia à a fine di l'animazione di u primu.
Una funzione LVGL specifica (lv_anim_speed_to_time) calcula u tempu d'animazione. Stu tempu d'esekzione hè utilizatu per calculà u ritardu di l'animazione di u sicondu arcu.7.2 Implementazione dual core
In a demo AVAS dual screen, i travaglii di visualizazione è di riproduzione audio sò eseguiti simultaneamente in un sistema integratu in tempu reale. Per superà una eventuale perdita di a risposta di u sistema, avemu decisu d'utilizà dui core diffirenti: unu dedicatu à a visualizazione è unu à a riproduzione audio.
A scheda AEK-MCU-C4MLIT1 ospita un microcontroller SPC58EC80E5 cun un processore dual core, u megliu adattatu per u casu sopra descrittu.
In detail:
- Core 2: Hè u primu à principià, inizializza a biblioteca è poi eseguisce u codice di l'applicazione.
- Core 0: Chjama a funzione aek_lcd_lvgl_refresh_screen () in u ciclu principale, per aghjurnà continuamente a visualizazione è leghje l'input toccu.
E funzioni PIT è aek_lcd_lvgl_refresh_screen() deve esse piazzate in u stessu core.
Storia di rivisione
Table 1. Storia di rivisione di documenti
Data | Revisione | Cambiamenti |
4-ottobre-23 | 1 | Liberazione iniziale. |
AVVISU IMPORTANTE - LEGGIU ATTENTAMENTE
STMicroelectronics NV è e so filiali ("ST") si riservanu u dirittu di fà cambiamenti, correzioni, miglioramenti, mudificazioni è migliure à i prudutti ST è / o à stu documentu in ogni mumentu senza avvisu. I cumpratori anu da ottene l'ultime informazioni pertinenti nantu à i prudutti ST prima di fà ordini. I prudutti ST sò venduti in cunfurmità cù i termini è e cundizioni di vendita di ST in vigore à u mumentu di a ricunniscenza di l'ordine. I cumpratori sò solu rispunsevuli di a scelta, a selezzione è l'usu di i prudutti ST è ST ùn assume micca responsabilità per l'assistenza di l'applicazione o u disignu di i prudutti di l'acquirente.
Nisuna licenza, espressa o implicita, à qualsiasi dirittu di pruprietà intellettuale hè cuncessa da ST quì.
A rivendita di i prudutti ST cù disposizioni diverse da l'infurmazioni stabilite quì annullerà ogni garanzia accordata da ST per tali pruduttu.
ST è u logo ST sò marchi di ST. Per infurmazioni supplementari nantu à i marchi ST, riferite à www.st.com/trademarks. Tutti l'altri prudutti o nomi di serviziu sò a pruprietà di i so rispettivi pruprietarii.
L'infurmazioni in stu documentu rimpiazzanu è rimpiazzanu l'infurmazioni furnite prima in qualsiasi versione precedente di stu documentu. © 2023 STMicroelectronics - Tutti i diritti riservati
UM3236 - Rev 1 - Ottobre 2023
Per più infurmazione cuntattate a vostra vendita locale di STMicroelectronics
Documenti / Risorse
![]() |
Biblioteche STMicroelectronics UM3236 LVGL per display LCD [pdfManuale d'usu AEK-LCD-DT028V1, UM3236, UM3236 Biblioteche LVGL per schermi LCD, Biblioteche LVGL per schermi LCD, librerie per schermi LCD, schermi LCD |