MM32F5260 簡介
MM32F5260 是一款搭載了基于 Arm v8-M 架構 32 位 Star-MC1 內核(兼容 Cortex-M33)的 MCU 產品,其工作頻率可達 120MHz,配置浮點運算單元(Floating Point Unit, FPU)、數字信號處理單元(Digital Signal Processing,DSP)、信號間互聯矩陣 MindSwitch、可配置邏輯單元 CLU、三角函數加速單元 CORDIC 等算法加速單元,并集成了豐富的外設模塊和充足的 I/O 端口。
圖1 MM32F5260示意圖
LVGL 介紹
LVGL(Light and Versatile Graphics Library)是一個專為嵌入式系統設計的開源圖形用戶界面(GUI)庫。它使用C語言編寫,具有輕量級、可移植、靈活和易于使用的特點。LVGL提供了豐富的圖形界面元素和靈活的布局方式,使開發者能夠輕松為嵌入式設備創建交互式用戶界面。
LVGL軟硬件需求
基本上,每個能夠驅動顯示器的現代控制器都適合運行LVGL。最低要求是:
Flash/ROM: > 基本要求:64 kB (> 推薦:180 kB )
RAM:
靜態RAM使用率:~2 kB,具體取決于使用的功能和對象類型
Stack: > 2kB (> 8 kB is recommended)
Dynamic data (heap): > 4 KB (> 32 kB is recommended if using several objects)
C99 或更新的編譯器
源碼獲取
獲取MM32的LibSamples和LVGL的源代碼:
從靈動官網獲取LibSamples_MM32F5260樣例工程, https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_performance/mm32f5260/選擇打開頁面中的工具和軟件標簽欄,點擊下載MM32F5260 庫函數與例程。
圖2 LVGL協議棧源碼
獲取LVGL源代碼,這里我們使用到的是v8.1.0版本的協議棧:
https://github.com/lvgl/lvgl/archive/refs/tags/v8.1.0.zip
lvgl-v8.1.0 協議棧如下圖2所示:
圖3 LVGL協議棧源碼
移植簡介
拷貝 LVGL 源碼到工程目錄
基于LibSamples_MM32F5260樣例工程,在其根目錄文件夾下創建~3rdPartySoftwarePortingLVGL 路徑及文件夾,將 lvgl-v8.1.0 軟件包解壓后直接復制到該路徑下,并在該路徑下創建 Demos文件夾。接下來,我們將在 Demos 文件夾下創建示例工程。
在 Demos 文件夾下中新建LVGL_Basic樣例工程目錄。將 lv_conf_template.h 復制到 LVGL_Basic 工程目錄下,并將其重命名為 lv_conf.h。
將軟件包中 examples/porting 下的 lv_port_disp_template.c&.h 文件,復制到 LVGL_Basic 工程目錄下,并進行重命名去掉 __template。
FSMC 及LCD初始化配置
在 platform.c &.h 文件中進行進行FSMC相關初始化配置,包括時鐘、引腳、初始化。
新建 lcd.c/.h 文件,實現 LCD 驅動初始化和基本的運行參數序列配置以及基本的的繪圖操作,如清除窗口操作、填充窗口操作和畫像素點操作函數。
新建 lcd_port.c 文件,實現基于 FSMC 的 LCD 驅動配置接口,并實現對 LCD 的寫命令和寫數據的操作接口。
LVGL_Basic樣例工程完整目錄如下圖4所示:
圖4 LVGL_Basic樣例工程
添加到 Keil 工程中
添加lvgl到工程的文件索引路徑中,如下圖5所示:
圖5 配置lvgl索引路徑
如圖6所示,將 lvgl_v8 文件夾下的 src 目錄下的所有 .c 格式文件添加到工程中。
圖6 添加lvgl源文件
代碼適配
添加移植接口相關文件到工程中:
修改 lv_conf.h 文件,使能配置文件內容,開啟幀率顯示和內存占用情況顯示。
修改 lv_port_disp.c 文件,使能LVGL配置。
修改 lv_port_disp_init() 函數,選擇定義圖像緩存的方式,并設置屏幕像素尺寸。
修改 disp_init() 函數,適配屏幕初始化,調用屏幕初始化函數。
修改 disp_flush() 函數,適配屏幕填充函數接口。
編寫 lvgl_basic.c 文件,包含頭文件,調用 lvgl 初始化函數,實現Systick中斷服務函數為lvgl提供時間基準,并在 main.c 文件中調用 LVGL_Basic_Sample() 函數。
#include "platform.h" #include "main.h" #include "lvgl.h" #include "lv_port_disp.h" static const char * btnm_map[] = {"0", "1", "2", "3", "4", " ","5", "6", "7", "8", "9", " ","Action1", "Action2",""}; void lv_example(void); void LVGL_Basic_Sample(void) { lv_init(); lv_port_disp_init(); lv_example(); while (1) { lv_task_handler(); } } void lv_example(void) { /* create a label. */ lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_obj_set_width(label, 150); lv_obj_set_pos(label, 10, 10); lv_label_set_text(label, "MindMotion MindMotion"); /* create a btn matrix. */ lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); lv_btnmatrix_set_map(btnm1, btnm_map); lv_btnmatrix_set_btn_width(btnm1, 10, 2); /*Make "Action1" twice as wide as "Action2"*/ lv_obj_align(btnm1, LV_ALIGN_CENTER, 0, 0); }
LVGL_Basic 樣例展示
這個樣例展示了最基本的GUI元素,如按鈕、標簽和文本框。它演示了如何在屏幕上創建和操作這些基本元素。
圖7 LVGL_Basic示意圖
參考樣例展示
LVGL_Benchmark
這個樣例用于測試和評估MM32F5260的性能。它通過快速創建和刪除大量的對象來展示開發板的渲染能力。
圖8 LVGL_Benchmark示意圖
LVGL_Stress
這個樣例通過同時使用多種不同的GUI元素和復雜的布局來對系統進行壓力測試,確保在高負載情況下系統的穩定性。
圖9 LVGL_Stress 示意圖
LVGL_Widgets
這個樣例展示了LVGL支持的所有小部件(Widgets),包括但不限于圖表、滑塊、復選框和下拉列表。它幫助開發者了解如何使用這些小部件來構建復雜的用戶界面。
總結
本文簡單介紹了MM32F5260及LVGL的使用,開發者可以通過使用LibSamples在MM32F5260上快速開始LVGL的學習和開發工作。
關于靈動
上海靈動微電子股份有限公司成立于 2011 年,是中國本土領先的通用 32 位 MCU 產品及解決方案供應商。靈動微電子的 MCU 產品以 MM32 為標識,基于 Arm Cortex-M 系列內核,自主研發軟硬件和生態系統。目前已量產近 300 款型號,在本土通用 32 位 MCU 公司中位居前列。
客戶涵蓋消費電子、電機與電源、家電、汽車、計算機與通信、工業控制等應用領域。靈動是中國為數不多的且同時獲得了 Arm-KEIL、IAR、SEGGER 官方支持的本土 MCU 公司,并建立了獨立、完整的通用 MCU 生態體系。靈動始終秉承著“誠信、承諾、創新、合作”的精神,為客戶提供從硬件芯片到軟件算法、從參考方案到系統設計的全方位支持。
-
mcu
+關注
關注
146文章
17148瀏覽量
351195 -
嵌入式系統
+關注
關注
41文章
3593瀏覽量
129473 -
內核
+關注
關注
3文章
1372瀏覽量
40289 -
LVGL
+關注
關注
1文章
83瀏覽量
2969
原文標題:靈動微課堂 (第285講)|基于MM32F5260的LVGL應用筆記
文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論