引言
GUI Guider本質上是一個方便嵌入式開發者基于LVGL開發GUI應用的源碼生成器工具,其作用是幫助開發者生成LVGL的應用源碼,GUI Guider最終生成的源碼將要被部署到具體的嵌入式硬件平臺上才能發揮作用。因此,包含了GUI Guider生成源碼的嵌入式工程的源碼,大體分成兩部分:
- 支撐LVGL源碼的基本MCU工程框架,其中包含MCU芯片的驅動程序,液晶屏顯示模塊的驅動程序,LVGL組件的源碼,以及對LVGL組件基于液晶屏顯示模塊的移植源碼
- LVGL應用部分的源碼,這主要就是GUI Guider生成的源碼了。
本節將分別介紹如何獲取和使用這兩部分源碼,最終創建一個可以聯動GUI Guider軟件將LVGL應用部署到MCU平臺上的工程。
創建LVGL基本MCU工程
獲取移植LVGL的源碼工程
當開發者準備開發GUI應用時,可以從各種渠道獲取手頭上正在使用的開發板上的移植了LVGL
的源碼工程。通常微控制器芯片原廠會的SDK軟件庫中會提供這樣的樣例工程,當然,有時也會需要開發者對直接拿到的源碼工程進行微調,比如根據手頭板子的實際電路,改改時鐘,調整引腳等等。靈動官方的MindSDK中,為PLUS-F5270
開發板創建了適配了LVGL
的源碼工程,軟件和硬件都兼容BIRD-F5
開發板,可以直接拿來用。
如果開發者實在沒找到適用于自己手頭上開發板上現成的移植好LVGL的工程,需要自行適配,大體的思路是:
- 適配顯示屏模塊驅動
- 將顯示屏模塊填充到LVGL的軟件框架中,完成對LVGL的適配
實際上,在lvgl-gui-guider-dev
項目中,還包含了一個使用SPI接口對接1.8寸小顯示屏模塊的工程lvgl_v8_basic_spi
,就是基于原本使用FSMC接口接顯示屏模塊的工程,換用SPI接口的顯示屏模塊驅動改出來的。
通過bootloader使用外擴qspiflash存儲大尺寸固件程序
在實際編譯包含LVGL的工程時,最終生成的固件文件可能會比較大,例如本例中使用的微控制器芯片MM32F5270
片內的256KB Flash堪堪能用,再稍微增加一些頁面元素,Flash存儲空間就不夠用了。例如,在一個僅僅在屏幕上顯示“Hello World”的工程,在不開優化的情況下,對Flash的占用就已經達到了370KB,這已是不可能寫入到片內Flash。
直接的解法,可以通過啟用編譯器優化,壓縮代碼大小,如圖x所示。
圖x 調整LVGL工程的編譯選項
啟用-Oz
編譯選項后,可以將代碼大小壓縮至210KB左右。
但如果以后需要使用更多的組件,例如添加一張圖片等等,仍會碰到片內Flash容量不夠的限制。為此,結合MM32F5270微控制器具有QSPI和XIP的特性,一個更有效的解法,是將程序放在外擴的spiflash存儲器上執行。具體做法,是實現一個bootloader,引導程序到外擴的qspiflash存儲設備中并運行。例如,基于MM32F5270的合封的qspiflash存儲芯片的MM32F5280芯片,就額外擴展了2MB的容量,這對于一些小型的嵌入式GUI應用已經足夠用了。
lvgl-gui-guider-dev
項目中,包含了一個bootloader_qspi_qpi_mode
的工程,實現了微控制器芯片上電啟動后,先進入片內Flash執行的bootloader程序,包括初始化QSPI接口并配置qspiflash存儲芯片的工作模式,使用QPI模式(運行程序的速度快些,但不能使用默認的下載算法文件成功下載)或者是普通4線模式(可以在默認使用默認的下載算法文件正常下載,但運行程序的速度慢些)。
關于qspiflash存儲芯片的QPI模式,這里做一些補充說明。qspiflash存儲芯片每次上電啟動,默認進入1/2/4線模式,每次都需要主機發送特殊的QPI命令,才能激活qspiflash存儲芯片的QPI模式。當通過“解鎖”操作(在外擴spiflash存儲芯片上啟用4線模式)將外擴的qspiflash芯片配置為4線模式后,MCU可以通過普通的4線模式和QPI模式訪問qspiflash存儲芯片中的數據,但通過普通4線模式訪問qspiflash芯片時,需要48個時鐘(8個時鐘送指令,24個時鐘送地址,8個時鐘空等待,8個時鐘送數據)才能傳送4個字節的數據,使用QPI模式訪問qspiflash存儲芯片時,僅需要18個時鐘(2個時鐘送指令,6個時鐘送地址,2個時鐘空等待,8個時鐘傳數據)就能傳4個數據。
如果想讓存放在qspiflash存儲芯片中的程序運行得快一些,就需要在bootloader中啟用QPI模式,但使用Keil下載程序到qspiflash存芯片時需要確保停用QPI模式,僅能在普通4線模式下下載程序,這意味著在qspiflash存儲芯片復位后不能運行bootloader。
spiflash存儲芯片的4線模式是非易失的,但QPI模式的配置不是非易失的,需要每次在bootloader啟用qspiflash程序之前發送相應的命令激活spiflash以啟用QPI模式。復位微控制器芯片后,spiflash芯片本身不復位,會繼續保持在QPI模式。因此,為了讓Keil的下載算法在bootloader之前接管對未啟用QPI模式的qspiflash存儲芯片的訪問權,需要在整塊板子的上電復位時,讓微控制器芯片進入到內部bootrom中的程序(按住boot0按鍵),此時,spiflash芯片上電復位到常規4線模式,因MCU被拐到內部的bootrom中,未被bootloader中啟動QPI模式,此時,是可以通過Keil的下載算法向spiflash芯片下載程序的。
本例設計的bootloader,可以通過一個指定的按鍵(PA0),選擇啟動至普通4線模式或者QPI模式:
- 默認情況下,不按按鍵,啟動到QPI模式。不可以通過Keil下載程序到qspiflash芯片(下載失敗)。
- 按鍵線下,啟動到普通4線模式。可以通過Keil下載算法將程序下載到qspiflash存儲芯片。
關于下載算法和QPI模式的沖突,還可以通過調整下載算法的實現解決:在下載算法中執行下載操作之前,先通過QSPI外設模塊暫時停用QPI模式,切換到普通4線模式(只有進入QSPI接口的“間接模式”才能發送寫數據的命令,“直接模式”是純粹的讀數模式),然后才能逐個數據包地向qspiflash擦除數據、寫數據。當寫完了全部可執行程序文件的數據后,再配置QSPI外設為直接模式,恢復對使用地址映射的方式訪問qspiflash設備。最后,切換程序指針PC,跳轉到qspiflash的存儲空間執行程序。
相對于bootloader工程,開發者編寫包含液晶驅動程序和LVGL組件的應用工程中,就需要調整linker文件,將編譯生成的指令語句和對象實體,安置在qspiflash映射的地址空間中。
OK,無論如何,此時通過外擴qspiflash,解決了Flash存儲空間不夠的問題。
創建LVGL應用源碼
在GUI Guider中創建新項目
GUI Guider可以將圖形開發界面中創建的UI素材,自動生成對應的LVGL函數調用序列源碼,并存放成C語言文件,可被應用工程直接編譯。
啟動GUI Guider軟件后,選擇“創建新項目”,選擇使用LVGL v8。如圖x所示。
圖x 在GUI Guider中為新建項目選擇LVGL v8
下一步,可以選擇GUI Guider已經適配的開發板,這里能看到的都是NXP的板子,包括IMXRT、LPC、MCX系列微控制器的開發板。本例中使用的是清單之外的板子,可以用“Simulator”虛擬的一塊板子。如上圖x所示。
下一步,可以選擇一個應用的模板,例如,可以選擇帶按鈕和計數器的“ButtonCounter”,或者一個儀表盤的樣子,這里包含了很多可以直接使用的樣例工程,供開發者選擇合適的模板,微調后用于自己的項目中。本例選擇使用一個空的工程模板“EmptyUI”,先搭建一個最簡單的工程框架。如上圖x所示。
下一步,可以配置工程的屬性。這里指定新項目的名稱為“gui”,這個名字將用于新項目新建源文件目錄的目錄名;然后配置新項目存放的路徑為應用工程路徑下,以方便加入到應用工程中;配置色彩模式為16位,這個是LVGL緩存數據的格式;配置屏幕尺寸,這個同在具體開發板上適配的屏幕尺寸有關,對應在GUI Guider項目中創建相同尺寸的畫板。如上圖x所示。
最后創建工程,即可在GUI Guider中看到新建項目的編輯界面。如圖x所示。
圖x GUI Guider新建項目的編輯界面
切記,要關閉“是否顯示鍵盤”選項,如果不需要這個功能,關掉它可以顯著節約大量Flash存儲占用。然后,點擊生成源碼的圖標,就可以生成當前編輯界面下顯示內容對應的LVGL代碼源文件了。如圖x所示。
圖x 在GUI Guider中生成LVGL源碼
將GUI Guider生成的源碼添加到MCU的源碼工程
GUI Guider生成的項目目錄位于MCU的源碼工程目錄下,其中生成的與GUI Guider編輯界面對應的C語言源碼可以直接加入到MCU源碼工程中參與編譯。如圖x所示。
figure-gui-guider-source-files-1
圖x 在MCU工程目錄下包含GUI Guider生成的源碼
其中,generated
和custom
目錄下的源文件都可以被加入到Keil工程中,generated
目錄下存放的文件在GUI Guider中每次生成代碼更新的源文件,custom
目錄下是用戶自定義的、但與UI界面相關的代碼。將這些源文件加入到Keil工程中。如圖x所示。
在Keil工程中加入GUI Guider生成的源文件
不要忘記,還要添加這些源文件的引用路徑。如圖x所示。
圖x 在Keil工程中加入GUI Guider生成源文件的引用路徑
最后,試著調通Keil工程,清理掉編譯錯誤。
從編譯輸出的消息來看,當前這次編譯產生的代碼已經為381732字節(Code + RO Data + RW Data),已經遠遠超出了MM32F5270片內Flash的256KB限制。此時,如果仍想使用片內Flash存放程序,可以試著調整Keil工程的編譯選項。如前文所述,或者可使用本文中設計的Bootloader開發方式,調整Linker文件,將程序文件的內容映射到片外擴展的qspiflash上。在本例后續展示的開發用例,為了避免編譯生成代碼大小的限制,均使用使用Bootloader開發方式。
將程序下載到開發板上,可以看到連接到開發板上的TFT顯示屏上已經顯示了GUI Guider上繪制出的同款“Hello World”了。
-
微控制器
+關注
關注
48文章
7649瀏覽量
152106 -
嵌入式系統
+關注
關注
41文章
3624瀏覽量
129749 -
Flash存儲器
+關注
關注
3文章
105瀏覽量
25850 -
GUI
+關注
關注
3文章
662瀏覽量
39890 -
MCU芯片
+關注
關注
3文章
253瀏覽量
11627
發布評論請先 登錄
相關推薦
使用GUI Guider工具開發嵌入式GUI應用(3)
![使用<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b><b class='flag-5'>工具</b><b class='flag-5'>開發</b><b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>應用(3)](https://file1.elecfans.com/web2/M00/90/BB/wKgaomTcbwKAGl1zAAN9F-9Rv3s315.jpg)
基于ARM-Linux的嵌入式系統GUI開發研究
基于Linux的嵌入式GUI設計研究
Linux GUI嵌入式開發有什么新的研究方向
![Linux <b class='flag-5'>GUI</b><b class='flag-5'>嵌入式開發</b>有什么新的研究方向](https://file.elecfans.com/web1/M00/AC/29/o4YBAF3CPOGARq8GAACEjxwUnBc758.png)
免費的GUI Guider又出新版本!看看它為嵌入式圖形開發,帶來哪些新玩法~
GUI Guider v1.5.0正式發布!它為嵌入式圖形開發又帶來哪些新功能,一起來探索吧~
GUI Guider v1.6.0正式發布:更多嵌入式HMI開發新功能,等你來探索!
『嵌入式GUI特訓營』開營啦!是學霸就有獎拿,快來挑戰一下!
GUI Guider新版本發布,嵌入式GUI開發體驗升級
![<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>新版本發布,<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b><b class='flag-5'>開發</b>體驗升級](https://file1.elecfans.com/web2/M00/C6/2B/wKgZomYGHkiAERxAAAA3D_d3PLo909.png)
評論