本文主要分享在开鸿智谷NiobeU4开发板移植lvgl经验,并实现按键按下sw4显示SW4 Pressed松开显示SW4 Release,整理踩坑经验分享如下。
1.移植准备
开鸿智谷NiobeU4开发板Openharmony开发环境搭建参考:
https://gitee.com/fangye945a/device_board_openvalley/blob/master/niobeu4/README_zh.md
1.1.lvgl源码获取
源码我选择从Gitee的littlevGL 镜像标签页面中下载v8.3.1 链接 https://gitee.com/mirrors/lvgl/tags ,

下载完成将会有lvgl-v8.3.1.zip(如附件),将lvgl-v8.3.1.zip放到Ubuntu的家目录下,使用以下指令解压
1.2.新建demo目录并拷贝相关文件
在vendor/openvalley/niobeu4/demo/下新建目录302_lvgl,并将下载的lvgl-v8.3.1.zip解压后拷贝到目录下,
参考指令:
1.3.拷贝LCD驱动
拷贝vendor/openvalley/niobeu4/demo/107_hdf_spi下的所有文件到vendor/openvalley/niobeu4/demo/302_lvgl下,并拷贝显示模版驱动
参考指令:
1.3.拷贝配置文件
复制vendor/openvalley/niobeu4/demo/302_lvgl/lv_conf_template.h为vendor/openvalley/niobeu4/demo/302_lvgl//lv_conf.h
参考指令:
完成以上目录结构如图:

2.源码修改
2.1 配置make menuconfig相关信息
在vendor/openvalley/niobeu4/demo/Kconfig.liteos_m.applications最后添加
修改vendor/openvalley/niobeu4/demo/302_lvgl/.application_config如下
2.2 显示相关lv_port_disp文件修改
vendor/openvalley/niobeu4/demo/302_lvgl/lv_port_disp.h中
将
改为
DEFINES下添加lv_conf.h所在路径配置和分辨率配置
vendor/openvalley/niobeu4/demo/302_lvgl/lv_port_disp.c中
将
改为
添加
修改disp_init(void)加入LcdInit();
修改 lv_port_disp_init(void) 注释掉Example for 2)和 Example for 3) also set disp_drv.full_refresh = 1 below对应的代码
修改disp_flush()函数加入lcd_draw_point();和LcdPush();
2.3 修改lv_tick_inc
此处修改方式与参考文件不同,此处修改如下
在vendor/openvalley/niobeu4/demo/302_lvgl/src/hal/lv_hal_tick.c中加入LOS_Msleep(tick_period);如下
2.4 修改 lv_conf.h
在vendor/openvalley/niobeu4/demo/302_lvgl/lv_conf.h中
将
改为
另外因为以下编译error

暂时将
改为
2.5 编写测代码lvgl_example.c
可以将spi_example.c改成lvgl_example.c,也可直接新建一个lvgl_example.c文件,
lvgl_example.c内容如下
2.6 编写BUILD.gn
vendor/openvalley/niobeu4/demo/302_lvgl/BUILD.gn
import("//kernel/liteos_m/liteos.gni")
assert(defined(LOSCFG_DRIVERS_HDF_CONFIG_MACRO), "Must Config LOSCFG_DRIVERS_HDF_CONFIG_MACRO in kernel/liteos_m menuconfig!")
assert(defined(LOSCFG_DRIVERS_HDF_PLATFORM_SPI), "Must Config LOSCFG_DRIVERS_HDF_PLATFORM_SPI in kernel/liteos_m menuconfig!")
module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name){
sources = [
"lvgl_example.c",
"st7735s.c",
"lv_port_disp.c",
"src/core/lv_disp.c",
"src/core/lv_event.c",
"src/core/lv_group.c",
"src/core/lv_indev_scroll.c",
"src/core/lv_indev.c",
"src/core/lv_obj_class.c",
"src/core/lv_obj_draw.c",
"src/core/lv_obj_pos.c",
"src/core/lv_obj_scroll.c",
"src/core/lv_obj_style_gen.c",
"src/core/lv_obj_style.c",
"src/core/lv_obj_tree.c",
"src/core/lv_obj.c",
"src/core/lv_refr.c",
"src/core/lv_theme.c",
"src/draw/sw/lv_draw_sw_arc.c",
"src/draw/sw/lv_draw_sw_blend.c",
"src/draw/sw/lv_draw_sw_dither.c",
"src/draw/sw/lv_draw_sw_gradient.c",
"src/draw/sw/lv_draw_sw_img.c",
"src/draw/sw/lv_draw_sw_layer.c",
"src/draw/sw/lv_draw_sw_letter.c",
"src/draw/sw/lv_draw_sw_line.c",
"src/draw/sw/lv_draw_sw_polygon.c",
"src/draw/sw/lv_draw_sw_rect.c",
"src/draw/sw/lv_draw_sw_transform.c",
"src/draw/sw/lv_draw_sw.c",
"src/draw/lv_draw_arc.c",
"src/draw/lv_draw_img.c",
"src/draw/lv_draw_label.c",
"src/draw/lv_draw_layer.c",
"src/draw/lv_draw_line.c",
"src/draw/lv_draw_mask.c",
"src/draw/lv_draw_rect.c",
"src/draw/lv_draw_transform.c",
"src/draw/lv_draw_triangle.c",
"src/draw/lv_draw.c",
"src/draw/lv_img_buf.c",
"src/draw/lv_img_cache.c",
"src/draw/lv_img_decoder.c",
"src/font/lv_font_fmt_txt.c",
"src/font/lv_font.c",
"src/font/lv_font_montserrat_12.c",
"src/font/lv_font_montserrat_14.c",
"src/font/lv_font_montserrat_16.c",
"src/hal/lv_hal_disp.c",
"src/hal/lv_hal_indev.c",
"src/hal/lv_hal_tick.c",
"src/misc/lv_anim_timeline.c",
"src/misc/lv_anim.c",
"src/misc/lv_area.c",
"src/misc/lv_async.c",
"src/misc/lv_bidi.c",
"src/misc/lv_color.c",
"src/misc/lv_fs.c",
"src/misc/lv_gc.c",
"src/misc/lv_ll.c",
"src/misc/lv_log.c",
"src/misc/lv_lru.c",
"src/misc/lv_math.c",
"src/misc/lv_mem.c",
"src/misc/lv_printf.c",
"src/misc/lv_style_gen.c",
"src/misc/lv_style.c",
"src/misc/lv_templ.c",
"src/misc/lv_timer.c",
"src/misc/lv_tlsf.c",
"src/misc/lv_txt_ap.c",
"src/misc/lv_txt.c",
"src/misc/lv_utils.c",
"src/widgets/lv_arc.c",
"src/widgets/lv_bar.c",
"src/widgets/lv_btn.c",
"src/widgets/lv_btnmatrix.c",
"src/widgets/lv_canvas.c",
"src/widgets/lv_checkbox.c",
"src/widgets/lv_dropdown.c",
"src/widgets/lv_img.c",
"src/widgets/lv_label.c",
"src/widgets/lv_line.c",
"src/widgets/lv_objx_templ.c",
"src/widgets/lv_roller.c",
"src/widgets/lv_slider.c",
"src/widgets/lv_switch.c",
"src/widgets/lv_table.c",
"src/widgets/lv_textarea.c",
"src/extra/themes/basic/lv_theme_basic.c",
"src/extra/themes/default/lv_theme_default.c",
"src/extra/themes/mono/lv_theme_mono.c",
"src/extra/widgets/animimg/lv_animimg.c",
"src/extra/widgets/calendar/lv_calendar_header_arrow.c",
"src/extra/widgets/calendar/lv_calendar_header_dropdown.c",
"src/extra/widgets/calendar/lv_calendar.c",
"src/extra/widgets/chart/lv_chart.c",
"src/extra/widgets/colorwheel/lv_colorwheel.c",
"src/extra/widgets/imgbtn/lv_imgbtn.c",
"src/extra/widgets/keyboard/lv_keyboard.c",
"src/extra/widgets/led/lv_led.c",
"src/extra/widgets/list/lv_list.c",
"src/extra/widgets/menu/lv_menu.c",
"src/extra/widgets/meter/lv_meter.c",
"src/extra/widgets/msgbox/lv_msgbox.c",
"src/extra/widgets/span/lv_span.c",
"src/extra/widgets/spinbox/lv_spinbox.c",
"src/extra/widgets/spinner/lv_spinner.c",
"src/extra/widgets/tabview/lv_tabview.c",
"src/extra/widgets/tileview/lv_tileview.c",
"src/extra/widgets/win/lv_win.c",
"src/extra/layouts/flex/lv_flex.c",
"src/extra/layouts/grid/lv_grid.c",
"src/extra/lv_extra.c",
"src/extra/libs/png/lodepng.c",
"src/extra/libs/png/lv_png.c",
"demos/stress/lv_demo_stress.c",
]
include_dirs = [
"//drivers/hdf_core/framework/include/platform/",
"//drivers/hdf_core/framework/include/utils/",
"//drivers/hdf_core/framework/support/platform/include/adc",
"//drivers/hdf_core/framework/support/platform/include/spi",
"//drivers/hdf_core/adapter/khdf/liteos_m/osal/include/",
"//drivers/hdf_core/framework/include/core/",
"//drivers/hdf_core/framework/include/osal/",
"//device/soc/esp/esp32/components/esp_adc_cal/include/",
"//device/soc/esp/esp32/components/driver/esp32/include/",
"/src",
"."
]
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
3 编译测试
3.1 编译
进入//kernel/liteos_m目录, 执行指令
在menuconfig配置中进入如下选项:
(Top) → Platform → Board Selection → select board niobeu4 → use openvalley niobeu4 application → niobeu4 application choose
选择 302_lvgl

回到sdk根目录,执行hb build -f
脚本进行编译。
编译成功如下
3.2 测试
烧录后正常开机后显示

按下SW4按键

按下SW5按键

移植后主要代码如附件302_lvgl.zip
新的板子经验分享,必须支持一波
移植效果看起来不错
屏幕是不是有点糊
感觉是拍照的问题,板子应该没问题
大佬这每天一更也太高效了,膜