LCD дисплейлеріне арналған UM3236 LVGL кітапханалары
Пайдаланушы нұсқаулығы
Кіріспе
Автокөлік өнеркәсібінің заманауи контекстінде, тіпті шағын СКД дисплейлер үшін де барған сайын күрделі графикалық интерфейстерді жасау әдеттегідей. Бұл қажеттілікті қанағаттандыру үшін жаңа құрамдас AEK-LCD-LVGL жасалып, AutoDevKit экожүйесіне қосылды.
Бұл жаңа құрамдас LVGL графикалық кітапханасын импорттайды және ол күрделі графикалық интерфейстерді тезірек әзірлеу үшін AEK-LCD-DT028V1 компонентімен бірге пайдаланылады.
LVGL (жеңіл және әмбебап графикалық кітапхана) - бұл C тілінде жазылған, қолдануға оңай графикамен, жақсы көрнекі әсерлерімен және жад көлемі аз жұмыс істейтін графикалық интерфейстерді жасау құралдарын ұсынатын, тегін, ашық бастапқы графикалық кітапхана.
LVGL is very powerful as it contains predefined elements, such as buttons, charts, lists, sliders, and images. Creating graphics with animations, anti-aliasing, opacity, and smooth scrolling is simplified with LVGL. The library is compatible with many types of input devices, such as touchpads, mouses, keyboards, and encoders. The aim of this user manual is to show how to create an LCD GUI easily, using AutoDevKit.
Ескерту: LVGL туралы қосымша мәліметтер алу үшін ресми құжаттаманы қараңыз. Бастапқы кодты GitHub сайтынан жүктеп алуға болады.
AEK-LVGL архитектурасы
Жоғарыдағы суретте AutoDevKit бағдарламасына біріктірілген LVGL бағдарламалық құралының архитектурасы көрсетілген.
Бағдарламалық жасақтаманың архитектурасы мыналармен сипатталады:
- LVGL кітапханасы: ол AEK-LCD-DT028V1 негізгі графикалық кітапханасына негізделген кеңейтілген графикалық функцияларды жүзеге асырады:
– aek_ili9341_drawPixel: ол AEK-LCD-DT028V1 СКД экранында пикселдерді басып шығарады;
– aek_lcd_get_touchFeedback:ол AEK-LCD-DT028V1 СКД сенсорлық экранында жанасуды анықтайды;
– aek_lcd_read_touchPos: ол түртілген нүктенің координаталарын алады;
– aek_lcd_set_touch Кері байланыс: ол түрту әрекетінің аяқталғанын белгілейді. - Негізгі графикалық кітапхана: ол негізгі графикалық функцияларды жүзеге асырады және төмен деңгейлі драйвер примитивтерін шақырады.
- Төмен деңгейлі драйвер: ол MCU перифериялық құрылғыларын жүзеге асырады. Бұл жағдайда SPI протоколы қолданылады.
- AEK-LCD-DT028V1: СКД бағалау тақтасы.
LVGL негіздері
LVGL кітапханасы AEK-LCD-DT028V1 компонентімен төмендегі суретте көрсетілгендей Disprove және IndevDriver екі драйвері арқылы әрекеттеседі.
Мақұлдамау буферлік кескінді дайындауға және оны СКД экранында көрсету үшін төменгі қабатқа жіберуге жауапты. Ол келесі lv_disp_drv_t терілген құрылымды пайдаланады:
- draw_buf: ол LVGL сызатын жад буферінің құрылымын көрсетеді.
- жалдаушылар: дисплейдің пиксельдегі көлденең ажыратымдылығы.
- Verres: дисплейдің пиксельдегі тік ажыратымдылығы.
- flush_cb: ол СКД дисплейіне жад буферін басып шығару үшін пайдаланылатын функцияны көрсетеді.
- monitor_cb: ол пикселдер санын және деректерді көрсетуге қажетті уақытты бақылайды.
Екінші жағынан, IndevDriver төменгі қабаттан келетін СКД сенсорлық ақпаратын шығарады. Ол келесі lv_indev_drv_t терілген құрылымды пайдаланады:
түрі: бұл өріс енгізу құрылғысының түрін қамтиды. Алдын ала анықталған қолжетімді макростар мыналарды қамтиды:
– LV_INDEV_TYPE_POINTER (біздің жағдайда қолданылады)
– LV_INDEV_TYPE_KEYPAD
– LV_INDEV_TYPE_ENCODER
– LV_INDEV_TYPE_BUTTON
redact: ол сенсорлық ақпаратты алу үшін пайдаланылатын функцияны көрсетеді.
flush_cb және redact: пайдаланушы анықтайтын экранды жаңарту кезеңінде және түртуді жаңарту енгізуінде сәйкесінше мерзімді негізде шақырылады. LVGL кітапханасы жаңарту уақыттарын ішкі сағат арқылы басқарады. Уақытты басқару үшін екі негізгі LVGL функциясы қолданылады: - lv_tick_inc(uint32_t x): бұл функцияның мақсаты LVGL уақытын MCU физикалық уақытымен синхрондау болып табылады. Белгі жаңартуын LVGL спецификациясына сәйкес 1-10 миллисекунд аралығында орнату керек. жылы
біздің жағдайда біз оны 5 миллисекундқа орнаттық. - lv_timer_handler (жарамсыз): ол өткен уақытқа негізделген ішкі LVGL нысандарын жаңартады. Физикалық уақыт MCU перифериялық бағдарламаланатын үзу таймері (PIT) арқылы бақыланады.
LVGL және AEK-LCD-DT028V1 компоненті арасындағы интерфейс
AEK-LCD-LVGL және AEK-LCD-DT028V1 компоненті арасындағы интерфейс file «aek_lcd_lvgl_component_rla» қалтасының астында орналасқан lcd_lvgl.c деп аталады. Бұл file функцияларын қамтиды:
- LVGL кітапханасын инициализациялау,
- LVGL ішкі таймерін басқару,
- LVGL кітапханасын AEK-LCD-DT028V1 компонентімен жүзеге асырылған негізгі графикалық кітапханамен интерфейс.
Бес негізгі функция келесі параграфтарда түсіндіріледі.
3.1 Бастауды көрсету
aek_lcd_lvgl_display_init функциясы екі LVGL кілт құрылымын инициализациялайды, жоққа шығару және IndevDriver.
3.1.1 Негіздеме
Disprove құрылымының негізгі мақсаты LVGL үшін сызба буферін ұстау болып табылады. Растау draw_buf өрісі екі түрлі жад буферіне дейін қамтуы мүмкін жад буферінің құрылымын көрсетеді. draw_buf өрісі lv_disp_draw_buf_init() функциясымен инициализацияланған.
Жоғарыдағы кодта DISP_HOR_RES және DISP_VER_RES параметрлері СКД өлшемін көрсетеді.
Ескерту:
Буфер өлшемі жүйенің қол жетімді жадына сәйкес реттелуі керек. Ресми LVGL нұсқаулығы сызба буферлерінің өлшемін экран өлшемінен кемінде 1/10 таңдауды ұсынады. Екінші қосымша буфер пайдаланылса, басқа буфердің деректері фондық режимде көрсету үшін жіберілген кезде LVGL бір буферді түрте алады.
Құрылымның басқа параметрлері экран өлшемдері, екі функция, flush және monitor_cb, біз кейінірек талдаймыз. Толтырылғаннан кейін құрылым белсенді дисплейді орнату үшін арнайы lv_disp_drv_register() функциясымен тіркелуі керек.
3.1.2 IndevDriver
IndevDriver келесідей инициализацияланған:
Негізгі анықталған өрістер пайдаланылатын құрылғы түрі және оны басқару функциясы болып табылады. Сондай-ақ бұл жағдайда құрылғыны белсенді ету үшін инициализацияланған құрылымды тіркеу қажет.
3.2 Флеш
Жуу функциясы алдыңғы абзацқа сәйкес инициализацияланған жад буферінде бар кескінді СКД экранында салу үшін AEK-LCD-DT028V1 компонентінің негізгі графикалық кітапханасын пайдаланады.
Жуу функциясының қаңқасы LVGL функциясы арқылы қамтамасыз етілген және пайдаланылып жатқан СКД экран драйвері үшін теңшелген (яғни, aek_ili9341_drawPixel – пиксель сызбасы). Енгізу параметрлері:
- құрғақ: Мақұлдамау үшін көрсеткіш
- аймақ: жаңартуды қажет ететін нақты аумақты қамтитын буфер
- түс: басып шығарылатын түстерді қамтитын буфер.
3.3 monitor_cb
monitor_cb функциясы ресми LVGL нұсқаулығында анықталған және теңшеуді қажет етпейді.
3.4 менің_енгізілген_оқылымым
my_input_read функциясы СКД экранынан келетін кірісті жоғары деңгейде басқаруға жауапты.
Функцияның қаңқасы LVGL кітапханасы арқылы анықталады. Енгізу параметрлері:
- drv: инициализацияланған енгізу драйверіне көрсеткіш
- деректер: түртілген нүктелердің пиксельге түрлендірілген x,y координатасын қамтиды Төмендегі сурет my_input_read функциясының орындалуын көрсетеді:
3.5 Экранды жаңарту
aek_lcd_lvgl_refresh_screen функциясы LVGL ішкі таймерлерін жаңартады.
Ескерту: LVGL уақыт шектеулерін орындау үшін бұл функция қолданба кодында дұрыс орналастырылуы керек.
AutoDevKit экожүйесі
AEK-LCD-LVGL қолданатын қолданбаларды әзірлеу толық алдын ала аладыtagе AutoDevKit экожүйе, оның негізгі компоненттері:
- AutoDevKit Studio IDE мына жерден орнатуға болады www.st.com/autodevkitsw
- Windows жүйесіне арналған SPC5-UDESTK жөндеу бағдарламалық құралы немесе Ашық отладчик
- AEK-LCD-LVGL жетегі
4.1AutoDevKit Studio
AutoDevKit Studio (STSW-AUTODEVKIT) — SPC5 Power Architecture 32 биттік микроконтроллерлер негізінде енгізілген қолданбаларды әзірлеуге көмектесу үшін жасалған Eclipse негізіндегі біріктірілген әзірлеу ортасы (IDE).
Бума соңғы қолданбаның бастапқы кодын жасау үшін қажетті барлық тиісті құрамдастары мен негізгі элементтері бар жобаларды бастауға арналған қолданба шеберін қамтиды. AutoDevKit Studio сонымен қатар:
- стандартты Eclipse нарығынан басқа бағдарламалық өнімдерді біріктіру мүмкіндігі
- тегін лицензия GCC GNU C Compiler компоненті
- салалық стандартты құрастырушыларды қолдау
- көп ядролы микроконтроллерлерді қолдау
- MCU пин конфигурациясын жеңілдету үшін PinMap редакторы
- біріктірілген аппараттық және бағдарламалық құрал құрамдастары, құрамдастардың үйлесімділігін тексеру және MCU және перифериялық конфигурация құралдары
- үйлесімді функционалдық тақталарды қосу немесе жою арқылы бар шешімдерден жаңа жүйелік шешімдерді жасау мүмкіндігі
- жаңа кодты кез келген үйлесімді MCU үшін бірден жасауға болады
- AEK-LCDLVGL құрамдас бөліктерін қоса алғанда, әрбір функционалды құрамдас бөлікті басқаруға арналған жоғары деңгейлі қолданбалы API интерфейстері.
Қосымша ақпарат алу үшін q қараңыз UM2623 (атап айтқанда, 6-бөлім және 7-бөлім) немесе бейне оқулықтарды қараңыз.
4.2 AEK_LCD_LVGL компоненті
AEK-LVGL драйверлері бағдарламалау кезеңін жеңілдету үшін STSW-AUTODEVKIT (2.0.0 нұсқасынан бастап) орнатуымен қамтамасыз етілген.
Соңғы нұсқаны алу үшін AutoDevKit орнатуыңызды жаңартыңыз. Дұрыс орнатылғаннан кейін AEK_LVGL Component RLA деп аталатын компонентті таңдаңыз.
4.2.1 AEK_LCD_LVGL құрамдас конфигурациясы
Құрамдас бөлікті конфигурациялау үшін төмендегі процедураны орындаңыз.
1-қадам. Refr_Period уақытын орнатыңыз. Бұл экранды жаңарту кезеңі (ұсынылған мән – 30).
2-қадам. Оқу_кезеңі уақытын орнатыңыз. Бұл келесі екі түртуді анықтау арасындағы ең аз уақыт (ұсынылған мән – 30).
3-қадам. Көлеңкелер, градиенттер, дөңгелектелген бұрыштар, шеңберлер, доғалар, қиғаш сызықтар және кескін түрлендірулері сияқты кеңейтілген виджетті қосу үшін «Кешенді салу» жолағын белгілеңіз.
4-қадам. Пайдаланғыңыз келетін қаріптерді таңдаңыз. Әрбір қаріп жасалған қолданба коды үшін қосымша флэш-жадты қажет ететінін ескеріңіз.
SPC58EC негізіндегі AEK-LCD-LVGL компонентімен AutoDevKit жобасын қалай жасауға болады
Қадамдар:
1-қадам. SPC58EC сериялы микроконтроллері үшін жаңа AutoDevKit Studio қолданбасын жасаңыз және келесі құрамдастарды қосыңыз:
– SPC58ECxx Init Package Component RLA
– SPC58ECxx төмен деңгейлі драйверлер RLA компоненті
Ескерту:
Бұл компоненттерді басында қосыңыз, әйтпесе қалған компоненттер көрінбейді.
2-қадам. Келесі қосымша құрамдастарды қосыңыз:
2а қадам. AutoDevKit Init пакетінің құрамдас бөлігі
2b-қадам. SPC58ECxx платформа компоненті RLA
2c қадам. AEK-LCD-DT028V1 RLA компоненті (қараңыз UM2939 конфигурациялау үшін)
2d қадам. AEK-LCD-LVGL Құрамдас бөлігі RLA
3-қадам. AEK-LCD-LVGL конфигурация терезесіндегі [Бөлу] түймесін басыңыз. Бұл операция AEK-LCD-LVGL конфигурациясын AutoDevKit-ке береді.
4-қадам. Бөлу перифериялық PIT таймерін қосты. Оны Төмен деңгейлі драйвер компонентінде тексеруге болады.
5-қадам. AutoDevKit Studio бағдарламасындағы сәйкес белгішелерді пайдаланып қолданбаны жасаңыз және жасаңыз. Жоба қалтасы содан кейін жаңамен толтырылады fileс, соның ішінде негізгі.c. Құрамдас қалта содан кейін AEKLCD-DT028V1 және толтырылады
AEK-LCD-LVGL драйверлері.
6-қадам. Маниканы ашыңыз file және AEK-LCD-DT028V1.h және AEK_LCD_LVGL.h қамтиды files.
7-қадам. Маникада file, irqIsrEnable() функциясынан кейін келесі міндетті функцияларды енгізіңіз:
8-қадам. main.c ішінде бұрынғы файлды көшіріп, қойыңызample ресми нұсқаулықтан алынған LVGL кітапханасынан алыңыз және оны main() ішіне енгізіңіз.
9-қадам. Қолданбаны сақтаңыз, жасаңыз және құрастырыңыз.
10-қадам. Тақтаны ашыңыз view AutoDevKit ұсынған редактор Бұл тақталарды сымға салу жолы бойынша нүктеден нүктеге графикалық нұсқаулықты береді.
11-қадам. AEK-LCD-DT028V1 құрылғысын шағын USB - USB кабелі арқылы компьютердегі USB портына қосыңыз.
12-қадам. SPC5-UDESTK-SW іске қосыңыз және жөндеуді ашыңыз file AEK-LCD-LVGL– Application /UDE қалтасында.
13-қадам. Кодты іске қосыңыз және жөндеу.
AEK-LVGL үшін қолжетімді демонстрациялар
AEK-LCD-LVGL компонентімен қамтамасыз етілген бірнеше демонстрациялар бар:
- SPC582Bxx_RLA AEK_LCD_LVGL сынақ қолданбасы
- SPC58ECxx_RLA AEK-LCD_LVGL сынақ қолданбасы
- қос экранды AVAS демонстрациясы – SPC58ECxx_RLA_MainEcuForIntegratAVASControl – Сынақ қолданбасы
Ескерту: Жаңа AutoDevKit шығарылымдарымен қосымша демонстрациялар қолжетімді болуы мүмкін.
Жетілдірілген қолданба, мысалыample – қос экранды AVAS демонстрациясы
LVGL көмегімен кеңейтілген қолданба іске асырылды. Бұл қолданба дисплейде қозғалтқыштың айналу жылдамдығына арналған автомобиль өлшегішін салады және сәйкес өлшеуіш анимацияларын басқарады.
Енгізілген AVAS қолданбасы AEK-AUD-C1D9031 тақтасына негізделген және жаяу жүргіншілерге электр көлігінің жақындағанын ескерту үшін төмен жылдамдықта автомобиль қозғалтқышының дыбысын имитациялайды.
Демонстрацияда біз AEK-LCD-DT028V1 СКД экранында іске асырылған басқару панелі арқылы автомобиль қозғалтқышының үдеуін және баяулауын (яғни, айналу жылдамдығының жоғарылауын/азаюын) және оның көлемін имитациялаймыз.
Біз екінші AEK-LCD-DT028V1 СКД қосу және қозғалтқыштың айналу/мин мәндерін өлшеу үшін спидометр жасау үшін LVGL кітапханасын пайдалану арқылы демонстрацияны кеңейттік.
7.1 LVGL виджеттері пайдаланылады
Қос экранды AVAS демонстрациясын әзірлеу үшін біз келесі LVGL виджеттерін пайдаландық:
- Тахометр фоны ретінде пайдаланылатын кескін
- Тахометр индикаторы ретінде қолданылатын доға
- Қозғалтқыштың айналу жылдамдығына сәйкес доға мәнін жаңартатын анимация
7.1.1 LVGL кескін виджеті
Кескінді LVGL кітапханасымен пайдалану үшін оны тегін онлайн арқылы C массивіне түрлендіріңіз түрлендіргіш.
Ескерту:
Кескінді түрлендіру кезінде Big-Endian форматындағы құсбелгіні қоюды ұмытпаңыз.
Қос экранды AVAS демонстрациясында тахометр кескінін көрсететін C массиві Gauge деп аталды. Кескін виджеті ретінде теңшелген мынадай:
Қайда:
- lv_img_declare: Gauge деп аталатын кескінді жариялау үшін пайдаланылады.
- lv_img_create: кескін нысанын жасау және оны ағымдағы экранға бекіту үшін пайдаланылады.
- lv_img_set_src: бұл бұрын көрсетілген LVGL түрлендіргішінен алынған кескін (jpg пішімін пайдалану ұсынылады).
- lv_obj_align: кескінді берілген ығысумен ортаға туралау үшін пайдаланылады.
- lv_obj_set_size: кескін өлшемін орнату үшін пайдаланылады.
Ескерту:
LVGL кітапханасымен кескінді басқару жолы туралы қосымша мәліметтер алу үшін ресми құжаттаманы қараңыз.
7.1.2 LVGL доға виджеті
Қозғалтқыштың лезде айналу жылдамдығын көрсету үшін түрлі-түсті доға жасалды. Көп түсті доға сәйкесінше қызыл және көк екі сабақтас түстерден тұрады.
Келесі код қалай жасау керектігін көрсетеді доға:
Қайда:
- lv_arc_create: доға нысанын жасайды.
- lv_arc_set_rotation: доғаның айналуын орнатады.
- lv_arc_set_bg_angles: доғаның ең үлкен және ең төменгі мәнін градуспен орнатады.
- lv_arc_set_value: доғаның бастапқы мәнін нөлге орнатады.
- lv_obj_set_size: доға өлшемдерін орнатады.
- lv_obj_remove_style: доғаның соңғы көрсеткішін жояды.
- lv_obj_clear_flag: доғаны басу мүмкін емес етіп орнатады.
- lv_obj_align: доғаны көрсетілген ығысумен ортаға туралайды.
7.1.3 Виджетпен байланысты анимация
Айналым/мин өзгерістерін көрсету үшін арнайы доғалық анимация функциясы жасалады және LVGL қозғалтқышына жіберіледі. Функция коды болып табылады келесі:
Қайда:
- arc: ағымдағы доға виджетінің көрсеткіші
- кідіріс: анимация басталғанға дейінгі кідіріс уақыты
- бастау: доғаның бастапқы орны
- соңы: доғаның соңғы орны
- жылдамдық: бірлік/сектегі анимация жылдамдығы.
Ескерту: Пайдаланылған анимация функциялары туралы қосымша мәліметтер алу үшін LVGL құжаттамасын қараңыз. Толық доғаның екі іргелес доғадан тұратынын ескерсек, анимация функциясын дұрыс басқаруға тура келді. Осы мақсатта екі түрлі сценарийді талдап көрейік:
- Жағдай: анимация бір доғаны қамтиды Бұл қарапайым жағдайда доғаға бір анимация тағайындаймыз.

- Жағдай: анимация екі арканы қамтиды Бұл жағдайда екінші доғаның анимациясы бірінші доғаның анимациясының соңында басталады.

Арнайы LVGL функциясы (lv_anim_speed_to_time) анимация уақытын есептейді. Бұл орындалу уақыты екінші доғалық анимацияның кешігуін есептеу үшін пайдаланылады.
7.2 Екі ядролық енгізу
Қос экранды AVAS демонстрациясында дисплей және дыбысты ойнату тапсырмалары нақты уақытта енгізілген жүйеде бір уақытта орындалады. Жүйенің жауап беру қабілетінің ықтимал жоғалуын жеңу үшін біз екі түрлі ядроны пайдалануды шештік: біреуі дисплейге арналған және екіншісі аудио ойнатуға арналған.
AEK-MCU-C4MLIT1 тақтасында екі ядролы процессоры бар SPC58EC80E5 микроконтроллері бар, жоғарыда сипатталған жағдайға ең қолайлы.
Егжей-тегжейлі:
- 2-негіз: ол бірінші болып іске қосылады, ол кітапхананы инициализациялайды, содан кейін қолданба кодын орындайды.
- Негізгі 0: дисплейді үздіксіз жаңарту және сенсорлық кірісті оқу үшін негізгі цикл ішінде aek_lcd_lvgl_refresh_screen() функциясын шақырады.
PIT функциялары мен aek_lcd_lvgl_refresh_screen() бір ядроға орналастырылуы керек.
Қайта қарау тарихы
Кесте 1. Құжатты қайта қарау тарихы
| Күн | Қайта қарау | Өзгерістер |
| 4 қазан 23 ж | 1 | Бастапқы шығарылым. |
МАҢЫЗДЫ ЕСКЕРТПЕ – МҰҚИЯТ ОҚЫҢЫЗ
STMicroelectronics NV және оның еншілес компаниялары («СТ») ST өнімдеріне және/немесе осы құжатқа кез келген уақытта ескертусіз өзгерістер, түзетулер, жақсартулар, өзгертулер және жақсартулар енгізу құқығын өзіне қалдырады. Сатып алушылар тапсырыс бергенге дейін СТ өнімдері туралы соңғы ақпаратты алуы керек. СТ өнімдері тапсырысты растау кезінде қолданыстағы СТ сату шарттарына сәйкес сатылады. Сатып алушылар СТ өнімдерін таңдауға, таңдауға және пайдалануға жауапты және СТ қолданбаға көмек немесе сатып алушылардың өнімдерінің дизайны үшін жауапкершілік көтермейді.
Осы құжатта ST компаниясы зияткерлік меншік құқығына тікелей немесе жанама түрде ешқандай лицензия бермейді.
Осы құжатта баяндалған ақпараттан өзгеше ережелері бар СТ өнімдерін қайта сату СТ осындай өнімге берген кез келген кепілдікті жояды.
ST және ST логотипі ST сауда белгілері болып табылады. ST сауда белгілері туралы қосымша ақпаратты қараңыз www.st.com/trademarks. Барлық басқа өнім немесе қызмет атаулары олардың тиісті иелерінің меншігі болып табылады.
Осы құжаттағы ақпарат осы құжаттың кез келген алдыңғы нұсқаларында бұрын берілген ақпаратты ауыстырады және ауыстырады. © 2023 STMicroelectronics – Барлық құқықтар қорғалған
UM3236 – Rev 1 – қазан 2023 ж
Қосымша ақпарат алу үшін жергілікті STMicroelectronics сату бөліміне хабарласыңыз
Құжаттар / Ресурстар
![]() |
СКД дисплейлеріне арналған STMicroelectronics UM3236 LVGL кітапханалары [pdf] Пайдаланушы нұсқаулығы AEK-LCD-DT028V1, UM3236, UM3236 СКД дисплейлеріне арналған LVGL кітапханалары, СКД дисплейлеріне арналған LVGL кітапханалары, СКД дисплейлеріне арналған кітапханалар, СКД дисплейлеріне арналған кітапханалар |
