0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用GUI Guider工具開發(fā)嵌入式GUI應(yīng)用(2)

冬至子 ? 來源:安德魯?shù)脑O(shè)計筆記本 ? 作者:安德魯蘇 ? 2023-08-16 14:36 ? 次閱讀

引言

GUI Guider本質(zhì)上是一個方便嵌入式開發(fā)者基于LVGL開發(fā)GUI應(yīng)用的源碼生成器工具,其作用是幫助開發(fā)者生成LVGL的應(yīng)用源碼,GUI Guider最終生成的源碼將要被部署到具體的嵌入式硬件平臺上才能發(fā)揮作用。因此,包含了GUI Guider生成源碼的嵌入式工程的源碼,大體分成兩部分:

  • 支撐LVGL源碼的基本MCU工程框架,其中包含MCU芯片的驅(qū)動程序,液晶屏顯示模塊的驅(qū)動程序,LVGL組件的源碼,以及對LVGL組件基于液晶屏顯示模塊的移植源碼
  • LVGL應(yīng)用部分的源碼,這主要就是GUI Guider生成的源碼了。

本節(jié)將分別介紹如何獲取和使用這兩部分源碼,最終創(chuàng)建一個可以聯(lián)動GUI Guider軟件將LVGL應(yīng)用部署到MCU平臺上的工程。

創(chuàng)建LVGL基本MCU工程

獲取移植LVGL的源碼工程

當開發(fā)者準備開發(fā)GUI應(yīng)用時,可以從各種渠道獲取手頭上正在使用的開發(fā)板上的移植了LVGL的源碼工程。通常微控制器芯片原廠會的SDK軟件庫中會提供這樣的樣例工程,當然,有時也會需要開發(fā)者對直接拿到的源碼工程進行微調(diào),比如根據(jù)手頭板子的實際電路,改改時鐘,調(diào)整引腳等等。靈動官方的MindSDK中,為PLUS-F5270開發(fā)板創(chuàng)建了適配了LVGL的源碼工程,軟件和硬件都兼容BIRD-F5開發(fā)板,可以直接拿來用。

如果開發(fā)者實在沒找到適用于自己手頭上開發(fā)板上現(xiàn)成的移植好LVGL的工程,需要自行適配,大體的思路是:

  • 適配顯示屏模塊驅(qū)動
  • 將顯示屏模塊填充到LVGL的軟件框架中,完成對LVGL的適配

實際上,在lvgl-gui-guider-dev項目中,還包含了一個使用SPI接口對接1.8寸小顯示屏模塊的工程lvgl_v8_basic_spi,就是基于原本使用FSMC接口接顯示屏模塊的工程,換用SPI接口的顯示屏模塊驅(qū)動改出來的。

通過bootloader使用外擴qspiflash存儲大尺寸固件程序

在實際編譯包含LVGL的工程時,最終生成的固件文件可能會比較大,例如本例中使用的微控制器芯片MM32F5270片內(nèi)的256KB Flash堪堪能用,再稍微增加一些頁面元素,F(xiàn)lash存儲空間就不夠用了。例如,在一個僅僅在屏幕上顯示“Hello World”的工程,在不開優(yōu)化的情況下,對Flash的占用就已經(jīng)達到了370KB,這已是不可能寫入到片內(nèi)Flash。

image.png

直接的解法,可以通過啟用編譯器優(yōu)化,壓縮代碼大小,如圖x所示。

image.png

圖x 調(diào)整LVGL工程的編譯選項

啟用-Oz編譯選項后,可以將代碼大小壓縮至210KB左右。

image.png

但如果以后需要使用更多的組件,例如添加一張圖片等等,仍會碰到片內(nèi)Flash容量不夠的限制。為此,結(jié)合MM32F5270微控制器具有QSPI和XIP的特性,一個更有效的解法,是將程序放在外擴的spiflash存儲器上執(zhí)行。具體做法,是實現(xiàn)一個bootloader,引導(dǎo)程序到外擴的qspiflash存儲設(shè)備中并運行。例如,基于MM32F5270的合封的qspiflash存儲芯片的MM32F5280芯片,就額外擴展了2MB的容量,這對于一些小型的嵌入式GUI應(yīng)用已經(jīng)足夠用了。

lvgl-gui-guider-dev項目中,包含了一個bootloader_qspi_qpi_mode的工程,實現(xiàn)了微控制器芯片上電啟動后,先進入片內(nèi)Flash執(zhí)行的bootloader程序,包括初始化QSPI接口并配置qspiflash存儲芯片的工作模式,使用QPI模式(運行程序的速度快些,但不能使用默認的下載算法文件成功下載)或者是普通4線模式(可以在默認使用默認的下載算法文件正常下載,但運行程序的速度慢些)。

關(guān)于qspiflash存儲芯片的QPI模式,這里做一些補充說明。qspiflash存儲芯片每次上電啟動,默認進入1/2/4線模式,每次都需要主機發(fā)送特殊的QPI命令,才能激活qspiflash存儲芯片的QPI模式。當通過“解鎖”操作(在外擴spiflash存儲芯片上啟用4線模式)將外擴的qspiflash芯片配置為4線模式后,MCU可以通過普通的4線模式和QPI模式訪問qspiflash存儲芯片中的數(shù)據(jù),但通過普通4線模式訪問qspiflash芯片時,需要48個時鐘(8個時鐘送指令,24個時鐘送地址,8個時鐘空等待,8個時鐘送數(shù)據(jù))才能傳送4個字節(jié)的數(shù)據(jù),使用QPI模式訪問qspiflash存儲芯片時,僅需要18個時鐘(2個時鐘送指令,6個時鐘送地址,2個時鐘空等待,8個時鐘傳數(shù)據(jù))就能傳4個數(shù)據(jù)。

如果想讓存放在qspiflash存儲芯片中的程序運行得快一些,就需要在bootloader中啟用QPI模式,但使用Keil下載程序到qspiflash存芯片時需要確保停用QPI模式,僅能在普通4線模式下下載程序,這意味著在qspiflash存儲芯片復(fù)位后不能運行bootloader。

spiflash存儲芯片的4線模式是非易失的,但QPI模式的配置不是非易失的,需要每次在bootloader啟用qspiflash程序之前發(fā)送相應(yīng)的命令激活spiflash以啟用QPI模式。復(fù)位微控制器芯片后,spiflash芯片本身不復(fù)位,會繼續(xù)保持在QPI模式。因此,為了讓Keil的下載算法在bootloader之前接管對未啟用QPI模式的qspiflash存儲芯片的訪問權(quán),需要在整塊板子的上電復(fù)位時,讓微控制器芯片進入到內(nèi)部bootrom中的程序(按住boot0按鍵),此時,spiflash芯片上電復(fù)位到常規(guī)4線模式,因MCU被拐到內(nèi)部的bootrom中,未被bootloader中啟動QPI模式,此時,是可以通過Keil的下載算法向spiflash芯片下載程序的。

本例設(shè)計的bootloader,可以通過一個指定的按鍵(PA0),選擇啟動至普通4線模式或者QPI模式:

  • 默認情況下,不按按鍵,啟動到QPI模式。不可以通過Keil下載程序到qspiflash芯片(下載失?。?。
  • 按鍵線下,啟動到普通4線模式??梢酝ㄟ^Keil下載算法將程序下載到qspiflash存儲芯片。

關(guān)于下載算法和QPI模式的沖突,還可以通過調(diào)整下載算法的實現(xiàn)解決:在下載算法中執(zhí)行下載操作之前,先通過QSPI外設(shè)模塊暫時停用QPI模式,切換到普通4線模式(只有進入QSPI接口的“間接模式”才能發(fā)送寫數(shù)據(jù)的命令,“直接模式”是純粹的讀數(shù)模式),然后才能逐個數(shù)據(jù)包地向qspiflash擦除數(shù)據(jù)、寫數(shù)據(jù)。當寫完了全部可執(zhí)行程序文件的數(shù)據(jù)后,再配置QSPI外設(shè)為直接模式,恢復(fù)對使用地址映射的方式訪問qspiflash設(shè)備。最后,切換程序指針PC,跳轉(zhuǎn)到qspiflash的存儲空間執(zhí)行程序。

相對于bootloader工程,開發(fā)者編寫包含液晶驅(qū)動程序和LVGL組件的應(yīng)用工程中,就需要調(diào)整linker文件,將編譯生成的指令語句和對象實體,安置在qspiflash映射的地址空間中。

OK,無論如何,此時通過外擴qspiflash,解決了Flash存儲空間不夠的問題。

創(chuàng)建LVGL應(yīng)用源碼

在GUI Guider中創(chuàng)建新項目

GUI Guider可以將圖形開發(fā)界面中創(chuàng)建的UI素材,自動生成對應(yīng)的LVGL函數(shù)調(diào)用序列源碼,并存放成C語言文件,可被應(yīng)用工程直接編譯。

啟動GUI Guider軟件后,選擇“創(chuàng)建新項目”,選擇使用LVGL v8。如圖x所示。

image.png

圖x 在GUI Guider中為新建項目選擇LVGL v8

下一步,可以選擇GUI Guider已經(jīng)適配的開發(fā)板,這里能看到的都是NXP的板子,包括IMXRT、LPC、MCX系列微控制器的開發(fā)板。本例中使用的是清單之外的板子,可以用“Simulator”虛擬的一塊板子。如上圖x所示。

下一步,可以選擇一個應(yīng)用的模板,例如,可以選擇帶按鈕和計數(shù)器的“ButtonCounter”,或者一個儀表盤的樣子,這里包含了很多可以直接使用的樣例工程,供開發(fā)者選擇合適的模板,微調(diào)后用于自己的項目中。本例選擇使用一個空的工程模板“EmptyUI”,先搭建一個最簡單的工程框架。如上圖x所示。

下一步,可以配置工程的屬性。這里指定新項目的名稱為“gui”,這個名字將用于新項目新建源文件目錄的目錄名;然后配置新項目存放的路徑為應(yīng)用工程路徑下,以方便加入到應(yīng)用工程中;配置色彩模式為16位,這個是LVGL緩存數(shù)據(jù)的格式;配置屏幕尺寸,這個同在具體開發(fā)板上適配的屏幕尺寸有關(guān),對應(yīng)在GUI Guider項目中創(chuàng)建相同尺寸的畫板。如上圖x所示。

最后創(chuàng)建工程,即可在GUI Guider中看到新建項目的編輯界面。如圖x所示。

image.png

圖x GUI Guider新建項目的編輯界面

切記,要關(guān)閉“是否顯示鍵盤”選項,如果不需要這個功能,關(guān)掉它可以顯著節(jié)約大量Flash存儲占用。然后,點擊生成源碼的圖標,就可以生成當前編輯界面下顯示內(nèi)容對應(yīng)的LVGL代碼源文件了。如圖x所示。

image.png

圖x 在GUI Guider中生成LVGL源碼

將GUI Guider生成的源碼添加到MCU的源碼工程

GUI Guider生成的項目目錄位于MCU的源碼工程目錄下,其中生成的與GUI Guider編輯界面對應(yīng)的C語言源碼可以直接加入到MCU源碼工程中參與編譯。如圖x所示。

image.png

figure-gui-guider-source-files-1

圖x 在MCU工程目錄下包含GUI Guider生成的源碼

其中,generatedcustom目錄下的源文件都可以被加入到Keil工程中,generated目錄下存放的文件在GUI Guider中每次生成代碼更新的源文件,custom目錄下是用戶自定義的、但與UI界面相關(guān)的代碼。將這些源文件加入到Keil工程中。如圖x所示。

image.png

在Keil工程中加入GUI Guider生成的源文件

不要忘記,還要添加這些源文件的引用路徑。如圖x所示。

image.png

圖x 在Keil工程中加入GUI Guider生成源文件的引用路徑

最后,試著調(diào)通Keil工程,清理掉編譯錯誤。

image.png

從編譯輸出的消息來看,當前這次編譯產(chǎn)生的代碼已經(jīng)為381732字節(jié)(Code + RO Data + RW Data),已經(jīng)遠遠超出了MM32F5270片內(nèi)Flash的256KB限制。此時,如果仍想使用片內(nèi)Flash存放程序,可以試著調(diào)整Keil工程的編譯選項。如前文所述,或者可使用本文中設(shè)計的Bootloader開發(fā)方式,調(diào)整Linker文件,將程序文件的內(nèi)容映射到片外擴展的qspiflash上。在本例后續(xù)展示的開發(fā)用例,為了避免編譯生成代碼大小的限制,均使用使用Bootloader開發(fā)方式。

將程序下載到開發(fā)板上,可以看到連接到開發(fā)板上的TFT顯示屏上已經(jīng)顯示了GUI Guider上繪制出的同款“Hello World”了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7552

    瀏覽量

    151417
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3593

    瀏覽量

    129466
  • Flash存儲器
    +關(guān)注

    關(guān)注

    3

    文章

    104

    瀏覽量

    25762
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    660

    瀏覽量

    39673
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    252

    瀏覽量

    11452
收藏 人收藏

    評論

    相關(guān)推薦

    使用GUI Guider工具在MCU上開發(fā)嵌入式GUI應(yīng)用 (1)

    LVGL是一個開源免費(MIT許可)的嵌入式GUI組件,支持觸摸屏操作,移植簡單方便,開發(fā)者一直在不斷完善更新。
    的頭像 發(fā)表于 08-16 14:29 ?3146次閱讀
    使用<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b><b class='flag-5'>工具</b>在MCU上<b class='flag-5'>開發(fā)</b><b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>應(yīng)用 (1)

    使用GUI Guider工具開發(fā)嵌入式GUI應(yīng)用(3)

    本節(jié)講述在GUI Guider中,應(yīng)用各種UI的基本元素,并順利部署到MCU的過程。在GUI Guider中使用各LVGL的組件時,將會涉及到GUI
    的頭像 發(fā)表于 08-16 14:39 ?2658次閱讀
    使用<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b><b class='flag-5'>工具</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>應(yīng)用(3)

    圖形界面開發(fā)工具GUI Guider的使用教程

    GUI Guider是NXP推出的一款功能強大且對用戶非常友好的圖形界面開發(fā)工具。目前最新版本是1.6.1。
    的頭像 發(fā)表于 12-20 09:49 ?1.9w次閱讀
    圖形界面<b class='flag-5'>開發(fā)工具</b><b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>的使用教程

    基于ARM-Linux的嵌入式系統(tǒng)GUI開發(fā)研究

    目前嵌入式系統(tǒng)中的GUI開發(fā)已經(jīng)成為研究的熱點,本文以Intel 公司Xscale PXA255 為內(nèi)核的XSBase255嵌入式平臺,以ARM-Linux 為操作系統(tǒng),接著介紹對
    發(fā)表于 06-29 09:37 ?15次下載

    基于Linux的嵌入式GUI設(shè)計研究

    本文介紹了嵌入式圖形用戶界面(Embedded Graphics User Interface,EmbeddedGUI)的結(jié)構(gòu)和設(shè)計思想,詳細說明了嵌入式GUI 的三層結(jié)構(gòu):GAL 和IAL 層、
    發(fā)表于 08-12 08:49 ?21次下載

    嵌入式圖形系統(tǒng)μc/GUI的移植和開發(fā)

    嵌入式圖形系統(tǒng)μc/GUI的移植和開發(fā) 摘要  嵌入式系統(tǒng)的開發(fā)已成為新的行業(yè)熱點,而嵌入式
    發(fā)表于 12-25 17:55 ?1150次閱讀
    <b class='flag-5'>嵌入式</b>圖形系統(tǒng)μc/<b class='flag-5'>GUI</b>的移植和<b class='flag-5'>開發(fā)</b>

    Linux GUI嵌入式開發(fā)有什么新的研究方向

    對比嵌入式 Linux 常見 GUI 方案,以及其它嵌入式 GUI 方案,AWTK 在嵌入式 Linux 系統(tǒng)上也極具優(yōu)勢,也能能很好的解決
    發(fā)表于 11-06 11:28 ?1195次閱讀
    Linux <b class='flag-5'>GUI</b><b class='flag-5'>嵌入式開發(fā)</b>有什么新的研究方向

    免費的GUI Guider又出新版本!看看它為嵌入式圖形開發(fā),帶來哪些新玩法~

    GUI Guider是恩智浦推出的一款用戶友好的嵌入式圖形應(yīng)用開發(fā)工具。它使用開源LVGL圖形庫作為底層圖形引擎,提供可視化所見即所得的拖放UI編輯器,能夠快速、輕松地為
    的頭像 發(fā)表于 11-25 08:15 ?7259次閱讀

    GUI-Guider生成工程移植MCU

    GUI Guider 是恩智浦為 LVGL 開發(fā)了一個上位機GUI 設(shè)計工具,可以通過拖放控件的方式設(shè)計 LVGL
    發(fā)表于 02-22 16:18 ?2次下載

    GUI Guider v1.5.0正式發(fā)布!它為嵌入式圖形開發(fā)又帶來哪些新功能,一起來探索吧~

    GUI Guider是恩智浦研發(fā)的一款用戶友好、跨平臺、支持多語言的嵌入式圖形應(yīng)用開發(fā)工具。它是基于開源的LVGL圖形庫,提供可視化所見即所得的拖放UI設(shè)計器,能夠快速輕松地為
    的頭像 發(fā)表于 02-24 08:10 ?3313次閱讀

    GUI Guider v1.6.0正式發(fā)布:更多嵌入式HMI開發(fā)新功能,等你來探索!

    新版GUI Guider發(fā)布 GUI Guider 是恩智浦研發(fā)的一款用戶友好、跨平臺、支持多語言的嵌入式人機交互應(yīng)用
    的頭像 發(fā)表于 08-04 08:05 ?1797次閱讀

    免費又簡單!新版本GUI Guider發(fā)布,速來體驗不一樣的嵌入式HMI開發(fā)

    新版本GUI Guider發(fā)布 作為恩智浦研發(fā)的一款用戶友好、跨平臺、支持多語言的嵌入式人機交互應(yīng)用開發(fā)工具,GUI
    的頭像 發(fā)表于 10-13 08:10 ?2762次閱讀
    免費又簡單!新版本<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>發(fā)布,速來體驗不一樣的<b class='flag-5'>嵌入式</b>HMI<b class='flag-5'>開發(fā)</b>

    嵌入式GUI特訓(xùn)營』開營啦!是學(xué)霸就有獎拿,快來挑戰(zhàn)一下!

    ! ↓↓↓ 點擊這里,馬上入營! 精品課程 在“嵌入式GUI特訓(xùn)營”中,通過NXP資深工程師主講的7堂精品技術(shù)課程,你將會—— 了解GUI熱點技術(shù)和開發(fā)技巧 結(jié)識免費的
    的頭像 發(fā)表于 12-01 09:15 ?460次閱讀
    『<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>特訓(xùn)營』開營啦!是學(xué)霸就有獎拿,快來挑戰(zhàn)一下!

    GUI Guider新版本發(fā)布,嵌入式GUI開發(fā)體驗升級

    作為恩智浦著力打造的一款嵌入式人機交互應(yīng)用開發(fā)工具,GUI Guider又迎來了一個新版本!最新發(fā)布的GUI
    發(fā)表于 03-29 09:47 ?1686次閱讀
    <b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>新版本發(fā)布,<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b><b class='flag-5'>開發(fā)</b>體驗升級

    GUI Guider全新版本上線

    GUI Guider v1.8.1上線啦!這一版本為嵌入式HMI開發(fā)帶來了多項新功能和改進,旨在為您提供更加高效、便捷的嵌入式HMI
    的頭像 發(fā)表于 10-14 11:37 ?1364次閱讀