UM3236 LVGL bibliotēkas LCD displejiem
Lietotāja rokasgrāmata
Ievads
Mūsdienu autobūves kontekstā ir ierasts izstrādāt arvien sarežģītākus GUI pat maziem LCD displejiem. Lai apmierinātu šo vajadzību, ir izveidots jauns komponents AEK-LCD-LVGL, kas pievienots AutoDevKit ekosistēmai.
Šis jaunais komponents importē LVGL grafikas bibliotēku, un tas tiek izmantots kopā ar komponentu AEK-LCD-DT028V1, lai ātrāk izstrādātu sarežģītus GUI.
LVGL (viegla un daudzpusīga grafikas bibliotēka) ir bezmaksas atvērtā koda grafikas bibliotēka, kas rakstīta C valodā un nodrošina rīkus, lai izveidotu GUI ar viegli lietojamu grafiku, jaukiem vizuālajiem efektiem un maz atmiņas aizņemšanas.
LVGL ir ļoti jaudīgs, jo satur iepriekš definētus elementus, piemēram, pogas, diagrammas, sarakstus, slīdņus un attēlus. Grafikas izveide ar animācijām, pretapzīmēšanu, necaurredzamību un vienmērīgu ritināšanu ir vienkāršota ar LVGL. Bibliotēka ir saderīga ar daudzu veidu ievades ierīcēm, piemēram, skārienpaliktņiem, pelēm, tastatūrām un kodētājiem. Šīs lietotāja rokasgrāmatas mērķis ir parādīt, kā viegli izveidot LCD GUI, izmantojot AutoDevKit.
Piezīme: Plašāku informāciju par LVGL skatiet oficiālajā dokumentācijā. Avota kods ir pieejams lejupielādei no GitHub.
AEK-LVGL arhitektūra
Iepriekš redzamajā attēlā redzama LVGL programmatūras arhitektūra, kas integrēta AutoDevKit.
Programmatūras arhitektūru raksturo:
- LVGL bibliotēka: tā ievieš uzlabotas grafiskās funkcijas, kuru pamatā ir AEK-LCD-DT028V1 pamata grafiskā bibliotēka:
– aek_ili9341_drawPixel: tas drukā pikseļus uz AEK-LCD-DT028V1 LCD;
– aek_lcd_get_touchFeedback: tā nosaka pieskārienu AEK-LCD-DT028V1 LCD skārienekrānā;
– aek_lcd_read_touchPos: iegūst skartā punkta koordinātas;
– aek_lcd_set_touch Atsauksmes: tas norāda, ka pieskāriena darbība ir pabeigta. - Pamata grafiskā bibliotēka: tā īsteno pamata grafiskās funkcijas un izsauc zema līmeņa draiveru primitīvus.
- Zema līmeņa draiveris: tas ievieš MCU perifērijas ierīces. Šajā gadījumā tiek izmantots SPI protokols.
- AEK-LCD-DT028V1: LCD novērtēšanas panelis.
LVGL pamati
LVGL bibliotēka mijiedarbojas ar AEK-LCD-DT028V1 komponentu, izmantojot divus draiverus Disprove un IndevDriver, kā parādīts attēlā zemāk.
Disprove ir atbildīgs par buferattēla sagatavošanu un nodošanu zemākajam slānim, lai to parādītu LCD. Tas izmanto šādu lv_disp_drv_t drukātu struktūru:
- draw_buf: norāda uz atmiņas bufera struktūru, kurā LVGL zīmē.
- īrnieki: displeja horizontālā izšķirtspēja pikseļos.
- Verres: displeja vertikālā izšķirtspēja pikseļos.
- flush_cb: norāda uz funkciju, ko izmanto atmiņas bufera drukāšanai LCD displejā.
- monitor_cb: tas uzrauga pikseļu skaitu un datu parādīšanai nepieciešamo laiku.
No otras puses, IndevDriver izgūst LCD skārienekrāna informāciju, kas nāk no apakšējā slāņa. Tas izmanto šādu lv_indev_drv_t drukātu struktūru:
tips: šajā laukā ir norādīts ievades ierīces veids. Iepriekš definētie pieejamie makro ietver:
– LV_INDEV_TYPE_POINTER (izmanto mūsu gadījumā)
– LV_INDEV_TYPE_KEYPAD
– LV_INDEV_TYPE_ENCODER
– LV_INDEV_TYPE_BUTTON
redakt: norāda uz funkciju, ko izmanto, lai izgūtu pieskārienu informāciju.
flush_cb un redact: tiek izsaukti periodiski, attiecīgi pamatojoties uz lietotāja definētu ekrāna atsvaidzināšanas periodu un pieskāriena atsvaidzināšanas ievadi. LVGL bibliotēka pārvalda atsvaidzināšanas laikus, izmantojot iekšējo pulksteni. Laika pārvaldībai tiek izmantotas divas LVGL pamatfunkcijas: - lv_tick_inc(uint32_t x): šīs funkcijas mērķis ir sinhronizēt LVGL laiku ar MCU fizisko laiku. Atjaunināšanai jābūt iestatītai no 1 līdz 10 milisekundēm saskaņā ar LVGL specifikāciju. In
mūsu gadījumā mēs to iestatījām uz 5 milisekundēm. - lv_timer_handler (void): tas atjaunina iekšējos LVGL objektus, pamatojoties uz pagājušo laiku. Fiziskais laiks tiek uzraudzīts, izmantojot MCU programmējamo pārtraukumu taimera (PIT) perifērijas ierīci.
Interfeiss starp LVGL un komponentu AEK-LCD-DT028V1
Saskarne starp AEK-LCD-LVGL un AEK-LCD-DT028V1 komponentu ir ieviesta ar file ar nosaukumu lcd_lvgl.c, kas atrodas mapē “aek_lcd_lvgl_component_rla”. Šis file satur funkcijas, lai:
- inicializēt LVGL bibliotēku,
- pārvaldīt LVGL iekšējo taimeri,
- saskarne LVGL bibliotēku ar pamata grafisko bibliotēku, ko īsteno komponents AEK-LCD-DT028V1.
Piecas galvenās funkcijas ir izskaidrotas turpmākajos punktos.
3.1. Display Init
Funkcija aek_lcd_lvgl_display_init inicializē divas LVGL atslēgu struktūras — Disprove un IndevDriver.
3.1.1. Atspēkot
Disprove struktūras galvenais mērķis ir saglabāt LVGL zīmēšanas buferi. Lauka Disprove draw_buf punkti atmiņas bufera struktūrā var saturēt līdz diviem dažādiem atmiņas buferiem. Lauks draw_buf tiek inicializēts ar funkciju lv_disp_draw_buf_init().
Iepriekš minētajā kodā parametri DISP_HOR_RES un DISP_VER_RES apzīmē LCD izmēru.
Piezīme:
Bufera lielums ir jāpielāgo atbilstoši sistēmā pieejamajai atmiņai. Oficiālais LVGL ceļvedis iesaka izvēlēties zīmēšanas buferu izmērus vismaz 1/10 no ekrāna izmēra. Ja tiek izmantots otrs papildu buferis, LVGL var piekļūt vienam buferim, kamēr otra bufera dati tiek nosūtīti, lai tie tiktu parādīti fonā.
Citi struktūras parametri ir ekrāna izmēri, divas funkcijas, flush un monitor_cb, ko mēs analizēsim vēlāk. Kad struktūra ir aizpildīta, tā ir jāreģistrē ar speciālo funkciju lv_disp_drv_register(), lai iestatītu aktīvu displeju.
3.1.2. IndevDriver
IndevDriver tiek inicializēts šādi:
Galvenie definētie lauki ir izmantotās ierīces veids un tās pārvaldības funkcija. Arī šajā gadījumā inicializētā struktūra ir jāreģistrē, lai ierīce kļūtu aktīva.
3.2 Izskalot
Skalošanas funkcija izmanto AEK-LCD-DT028V1 komponenta pamata grafisko bibliotēku, lai uz LCD uzzīmētu attēlu, kas atrodas atmiņas buferī, kas inicializēts saskaņā ar iepriekšējo rindkopu.
Skalošanas funkcijas karkasu nodrošina LVGL funkcija, un tas ir pielāgots izmantotajam LCD ekrāna draiverim (ti, aek_ili9341_drawPixel — pikseļu zīmējums). Ievades parametri ir:
- sauss: rādītājs uz Atspēkot
- apgabals: buferis, kas satur konkrēto apgabalu, kas ir jāatjaunina
- krāsa: buferis, kas satur drukājamās krāsas.
3.3 monitors_cb
Funkcija monitor_cb ir definēta oficiālajā LVGL rokasgrāmatā, un tai nav nepieciešami pielāgojumi.
3.4 my_input_read
Funkcija my_input_read ir atbildīga par LCD ekrāna ievades pārvaldību augstā līmenī.
Funkciju skeletu nosaka LVGL bibliotēka. Ievades parametri ir:
- drv: rādītājs uz inicializēto ievades draiveri
- dati: satur skarto punktu pikseļu pārveidoto x,y koordinātu Tālāk esošajā attēlā parādīta funkcijas my_input_read ieviešana:
3.5 Ekrāna atsvaidzināšana
Funkcija aek_lcd_lvgl_refresh_screen atjaunina LVGL iekšējos taimerus.
Piezīme: Šī funkcija ir pareizi jāievieto lietojumprogrammas kodā, lai izpildītu LVGL laika ierobežojumus.
AutoDevKit ekosistēma
Lietojumprogrammu izstrāde, kas izmanto AEK-LCD-LVGL, tiek pilnībā attīstītatage no AutoDevKit ekosistēma, kuras pamatkomponenti ir:
- AutoDevKit Studio IDE instalējams no www.st.com/autodevkitsw
- SPC5-UDESTK atkļūdošanas programmatūra operētājsistēmai Windows vai Opened atkļūdotājs
- AEK-LCD-LVGL diskdzinis
4.1 AutoDevKit Studio
AutoDevKit Studio (STSW-AUTODEVKIT) ir integrēta izstrādes vide (IDE), kuras pamatā ir Eclipse, kas izstrādāta, lai palīdzētu izstrādāt iegultās lietojumprogrammas, kuru pamatā ir SPC5 Power Architecture 32 bitu mikrokontrolleri.
Paketē ir iekļauts lietojumprogrammas vednis, lai uzsāktu projektus ar visiem attiecīgajiem komponentiem un galvenajiem elementiem, kas nepieciešami galīgā lietojumprogrammas pirmkoda ģenerēšanai. AutoDevKit Studio piedāvā arī:
- iespēja integrēt citus programmatūras produktus no standarta Eclipse tirgus
- bezmaksas licences GCC GNU C kompilatora komponents
- atbalsts nozares standarta kompilatoriem
- atbalsts daudzkodolu mikrokontrolleriem
- PinMap redaktors, lai atvieglotu MCU tapas konfigurāciju
- integrēti aparatūras un programmatūras komponenti, komponentu saderības pārbaude un MCU un perifērijas konfigurācijas rīki
- iespēja izveidot jaunus sistēmu risinājumus no esošajiem, pievienojot vai noņemot saderīgas funkciju plates
- jaunu kodu var ģenerēt nekavējoties jebkuram saderīgam MCU
- augsta līmeņa lietojumprogrammu API, lai kontrolētu katru funkcionālo komponentu, tostarp AEK-LCDLVGL komponenta.
Papildinformācijuq skatiet UM2623 (jo īpaši 6. un 7. sadaļa) vai skatieties video pamācības.
4.2 AEK_LCD_LVGL komponents
AEK-LVGL draiveri ir nodrošināti ar STSW-AUTODEVKIT (no versijas 2.0.0) instalāciju, lai atvieglotu programmēšanas posmu.
Atjauniniet AutoDevKit instalāciju, lai iegūtu jaunāko versiju. Kad tas ir pareizi instalēts, atlasiet komponentu ar nosaukumu AEK_LVGL komponents RLA.
4.2.1. AEK_LCD_LVGL komponentu konfigurācija
Lai konfigurētu komponentu, veiciet tālāk norādīto procedūru.
1. darbība. Iestatiet Refr_Period laiku. Šis ir ekrāna atsvaidzināšanas periods (ieteicamā vērtība ir 30).
2. darbība. Iestatiet Read_Period laiku. Šis ir minimālais laiks starp divām sekojošām pieskārienu noteikšanām (ieteicamā vērtība ir 30).
3. darbība. Atzīmējiet izvēles rūtiņu Draw Complex, lai iespējotu papildu logrīkus, piemēram, ēnas, gradientus, noapaļotus stūrus, apļus, lokus, šķības līnijas un attēlu transformācijas.
4. darbība. Atlasiet fontus, kurus vēlaties izmantot. Ņemiet vērā, ka katram fontam ir nepieciešama papildu zibatmiņa ģenerētajam lietojumprogrammas kodam.
Kā izveidot AutoDevKit projektu ar AEK-LCD-LVGL komponentu, pamatojoties uz SPC58EC
Darbības ir šādas:
1. darbība. Izveidojiet jaunu AutoDevKit Studio lietojumprogrammu sērijas mikrokontrolleram SPC58EC un pievienojiet šādas sastāvdaļas:
– SPC58ECxx sākotnējās pakotnes komponents RLA
– SPC58ECxx zema līmeņa draiveru komponents RLA
Piezīme:
Pievienojiet šīs sastāvdaļas sākumā, pretējā gadījumā atlikušās sastāvdaļas nav redzamas.
2. darbība. Pievienojiet šādus papildu komponentus:
2.a darbība. AutoDevKit Init pakotnes komponents
2.b darbība. SPC58ECxx platformas komponents RLA
2.c darbība. AEK-LCD-DT028V1 komponents RLA (sk UM2939 konfigurācijai)
2. d darbība. AEK-LCD-LVGL komponents RLA
3. darbība. AEK-LCD-LVGL konfigurācijas logā noklikšķiniet uz pogas [Piešķiršana]. Šī darbība deleģē AEK-LCD-LVGL konfigurāciju AutoDevKit.
4. darbība. Piešķiršana ir iespējojusi PIT taimera perifērijas ierīci. To var pārbaudīt zema līmeņa draivera komponentā.
5. darbība. Ģenerējiet un izveidojiet lietojumprogrammu, izmantojot atbilstošās ikonas programmā AutoDevKit Studio. Pēc tam projekta mape tiek aizpildīta ar jaunu files, ieskaitot galveno.c. Komponentu mape tiek aizpildīta ar AEKLCD-DT028V1 un
AEK-LCD-LVGL draiveri.
6. darbība. Atveriet maniku file un ietver AEK-LCD-DT028V1.h un AEK_LCD_LVGL.h files.
7. solis. Manikā file, pēc funkcijas irqIsrEnable() ievietojiet šādas obligātās funkcijas:
8. darbība. Main.c kopējiet un ielīmējiet example no LVGL bibliotēkas, kas ņemta no oficiālā ceļveža, un ievietojiet to galvenajā ().
9. darbība. Saglabājiet, ģenerējiet un kompilējiet lietojumprogrammu.
10. solis. Atveriet dēli view redaktors, ko nodrošina AutoDevKit Tas nodrošina grafisku ceļvedi no punkta līdz punktam par to, kā savienot plates.
11. darbība. Pievienojiet AEK-LCD-DT028V1 datora USB portam, izmantojot mini-USB–USB kabeli.
12. darbība. Palaidiet programmu SPC5-UDESTK-SW un atveriet atkļūdošanas programmu file mapē AEK-LCD-LVGL– Application /UDE.
13. darbība. Palaidiet un atkļūdojiet kodu.
Pieejamās demonstrācijas versijai AEK-LVGL
Ar komponentu AEK-LCD-LVGL ir pieejamas vairākas demonstrācijas:
- SPC582Bxx_RLA AEK_LCD_LVGL testa lietojumprogramma
- SPC58ECxx_RLA AEK-LCD_LVGL testa lietojumprogramma
- divu ekrānu AVAS demonstrācija — SPC58ECxx_RLA_MainEcuForIntegratAVASControl — testa lietojumprogramma
Piezīme: Ar jaunajiem AutoDevKit laidieniem, iespējams, būs pieejams vairāk demonstrāciju.
Papildu lietojumprogramma, piemample – divu ekrānu AVAS demonstrācija
Izmantojot LVGL, ir ieviesta uzlabota lietojumprogramma. Šī lietojumprogramma displejā zīmē automašīnas mērierīci dzinēja apgriezieniem un pārvalda saistītās gabarīta animācijas.
Ieviestā AVAS aplikācija ir balstīta uz AEK-AUD-C1D9031 plati un simulē automašīnas dzinēja skaņu pie maziem ātrumiem, lai brīdinātu gājējus par tuvojošos elektromobili.
Demonstrācijā mēs simulējam automašīnas dzinēja paātrinājumu un palēninājumu (ti, apgriezienu palielināšanos/samazināšanos) un tā tilpumu, izmantojot vadības paneli, kas ieviests AEK-LCD-DT028V1 LCD ekrānā.
Mēs esam paplašinājuši demonstrāciju, pievienojot otru AEK-LCD-DT028V1 LCD un izmantojot LVGL bibliotēku, lai izveidotu spidometru dzinēja apgriezienu skaita noteikšanai.
Izmantoti 7.1 LVGL logrīki
Lai izstrādātu divu ekrānu AVAS demonstrāciju, mēs esam izmantojuši šādus LVGL logrīkus:
- Attēls, ko izmanto kā tahometra fonu
- Loka, ko izmanto kā tahometra indikatoru
- Animācija, kas atjaunina loka vērtību atbilstoši dzinēja apgriezieniem minūtē
7.1.1. LVGL attēla logrīks
Lai izmantotu attēlu ar LVGL bibliotēku, pārveidojiet to par C masīvu, izmantojot bezmaksas tiešsaistes rīku pārveidotājs.
Piezīme:
Pārveidojot attēlu, neaizmirstiet atzīmēt Big-Endian formāta izvēles rūtiņu.
Divu ekrānu AVAS demonstrācijā C masīvs, kas attēlo tahometra attēlu, ir nosaukts par mērītāju. Attēla logrīks ir pielāgots kā šādi:
Kur:
- lv_img_declare: izmanto, lai deklarētu attēlu ar nosaukumu Gauge.
- lv_img_create: izmanto, lai izveidotu attēla objektu un pievienotu to pašreizējam ekrānam.
- lv_img_set_src: šis ir iepriekš parādītais attēls, kas iegūts no LVGL pārveidotāja (ieteicams izmantot jpg formātu).
- lv_obj_align: tiek izmantots, lai līdzinātu attēlu centrā ar noteiktu nobīdi.
- lv_obj_set_size: tiek izmantots, lai iestatītu attēla izmēru.
Piezīme:
Plašāku informāciju par attēla pārvaldību, izmantojot LVGL bibliotēku, skatiet oficiālajā dokumentācijā.
7.1.2. LVGL loka logrīks
Ir izveidots daudzkrāsains loks, kas parāda dzinēja momentānos apgriezienus. Daudzkrāsains loks sastāv no divām blakus esošām krāsām, attiecīgi sarkanas un zilas.
Šis kods parāda, kā izveidot loka:
Kur:
- lv_arc_create: izveido loka objektu.
- lv_arc_set_rotation: iestata loka rotāciju.
- lv_arc_set_bg_anges: iestata maksimālo un minimālo loka vērtību grādos.
- lv_arc_set_value: iestata loka sākotnējo vērtību uz nulli.
- lv_obj_set_size: iestata loka izmērus.
- lv_obj_remove_style: noņem loka pēdējo rādītāju.
- lv_obj_clear_flag: iestata loku kā neklikšķināmu.
- lv_obj_align: izlīdzina loku centrā ar noteiktu nobīdi.
7.1.3. Ar logrīku saistīta animācija
Tiek izveidota īpaša loka animācijas funkcija, kas tiek nodota LVGL dzinējam, lai parādītu apgriezienu izmaiņas. Funkcijas kods ir sekojoši:
Kur:
- loka: ir rādītājs uz pašreizējo loka logrīku
- aizkave: ir aizkaves laiks pirms animācijas sākuma
- sākums: ir sākotnējā loka pozīcija
- beigas: ir pēdējā loka pozīcija
- ātrums: ir animācijas ātrums vienībās/s.
Piezīme: Plašāku informāciju par izmantotajām animācijas funkcijām skatiet LVGL dokumentācijā. Ņemot vērā, ka visa loka sastāv no divām blakus esošām arkām, mums bija pareizi jāpārvalda animācijas funkcija. Šim nolūkam analizēsim divus dažādus scenārijus:
- Gadījums: animācija ietver vienu loku Šajā vienkāršajā gadījumā lokam tiek piešķirta viena animācija.

- Gadījums: animācija ietver divas arkas Šajā gadījumā otrā loka animācija sākas pirmās arkas animācijas beigās.

Konkrēta LVGL funkcija (lv_anim_speed_to_time) aprēķina animācijas laiku. Šis izpildes laiks tiek izmantots, lai aprēķinātu otrās loka animācijas aizkavi.
7.2. Divkodolu ieviešana
Divu ekrānu AVAS demonstrācijā displeja un audio atskaņošanas uzdevumi vienlaikus tiek izpildīti reāllaika iegultajā sistēmā. Lai novērstu iespējamu sistēmas reakcijas zudumu, esam nolēmuši izmantot divus dažādus kodolus: vienu displejam un otru audio atskaņošanai.
AEK-MCU-C4MLIT1 platē ir SPC58EC80E5 mikrokontrolleris ar divkodolu procesoru, kas vislabāk atbilst iepriekš aprakstītajam gadījumam.
Sīkāk:
- 2. kodols: tas ir pirmais, kas startē, inicializē bibliotēku un pēc tam izpilda lietojumprogrammas kodu.
- 0. kodols: tas izsauc funkciju aek_lcd_lvgl_refresh_screen() galvenajā cilpā, lai nepārtraukti atjauninātu displeju un nolasītu skārienjutīgo ievadi.
PIT funkcijas un aek_lcd_lvgl_refresh_screen() ir jāievieto vienā kodolā.
Pārskatīšanas vēsture
1. tabula. Dokumentu pārskatīšanas vēsture
| Datums | Pārskatīšana | Izmaiņas |
| 4. gada 23. oktobris | 1 | Sākotnējā izlaišana. |
SVARĪGS PAZIŅOJUMS – UZMANĪGI IZLASIET
STMicroelectronics NV un tā meitasuzņēmumi (“ST”) patur tiesības jebkurā laikā bez brīdinājuma veikt izmaiņas, labojumus, uzlabojumus, modifikācijas un uzlabojumus ST izstrādājumos un/vai šajā dokumentā. Pirms pasūtījuma veikšanas pircējiem jāiegūst jaunākā atbilstošā informācija par ST produktiem. ST produkti tiek pārdoti saskaņā ar ST pārdošanas noteikumiem un nosacījumiem, kas ir spēkā pasūtījuma apstiprināšanas brīdī. Pircēji ir pilnībā atbildīgi par ST produktu izvēli, izvēli un lietošanu, un ST neuzņemas nekādu atbildību par palīdzību pielietošanā vai pircēja produktu dizainu.
ST šeit nepiešķir nekādas tiešas vai netiešas licences jebkādām intelektuālā īpašuma tiesībām.
ST produktu tālākpārdošana ar noteikumiem, kas atšķiras no šeit norādītās informācijas, anulē jebkādu ST piešķirto garantiju šādam produktam.
ST un ST logotips ir ST preču zīmes. Papildinformāciju par ST preču zīmēm skatiet www.st.com/trademarks. Visi pārējie produktu vai pakalpojumu nosaukumi ir to attiecīgo īpašnieku īpašums.
Informācija šajā dokumentā aizstāj un aizstāj informāciju, kas iepriekš sniegta jebkurās iepriekšējās šī dokumenta versijās. © 2023 STMicroelectronics – visas tiesības paturētas
UM3236 — 1. rev. — 2023. gada oktobris
Lai iegūtu papildinformāciju, sazinieties ar vietējo STMicroelectronics pārdevēju
Dokumenti / Resursi
![]() |
STMicroelectronics UM3236 LVGL bibliotēkas LCD displejiem [pdfLietotāja rokasgrāmata AEK-LCD-DT028V1, UM3236, UM3236 LVGL bibliotēkas LCD displejiem, LVGL bibliotēkas LCD displejiem, bibliotēkas LCD displejiem, LCD displeji |
