本帖最后由 yuyy1989 于 2024-5-18 17:16 编辑
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。
本帖先介绍如何移植GUI Guider内置的模板界面到小安派SCP4.3,暂时不介绍如何使用GUI Guider设计界面
使用时需要注意GUI Guider的版本和支持的LVGL版本绑定,小安派的LVGL版本是8.3.7,GUI Guider 1.6.1的LVGL版本是8.3.5,而1.7.0的LVGL版本是8.3.10,这里使用1.6.1的版本为小安派SCP4.3移植界面
GUI Guider 下载地址,下载需要注册账号
https://www.nxp.com.cn/design/de ... i-guider:GUI-GUIDER
安装后打开
选择创建新项目进入LVGL版本选择
选择v8.3.5,后点击下一步
小安派没有在官方设备模板里,这里选择模拟器,然后点击下一步
这里随便选个界面模板,点击下一步
输入工程名称,屏幕默认分辨率是480x272和小安派SCP4.3的屏幕分辨率一致不用修改,点击创建
之后会打开工程姐界面
如果是第一次使用到这里时页面都是英文的,可以点击右上角切换为中文
点击右上角的三角,选择C之后会自动生成这个界面的LVGL代码
最后会弹出一个模拟器界面用来预览
打开工程文件夹,这里的custom和generated是移植需要用到的
打开SCP4.3的工程文件夹,删掉原来的UI文件夹,新建一个文件夹用来放刚才那两个文件夹
把刚才那两个文件夹复制到新建的文件夹中,修改SCP4.3工程根目录下的CMakeLists.txt
- include(proj.conf)
- find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})
- file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/guider_ui/*.c")
- file(GLOB_RECURSE app "${CMAKE_CURRENT_SOURCE_DIR}/app/*.c")
- # User
- # sdk_add_compile_definitions(-DCONFIG_CLI_CMD_ENABLE)
- sdk_add_compile_definitions(-DLV_LVGL_H_INCLUDE_SIMPLE)
- sdk_add_include_directories(.)
- sdk_add_include_directories(guider_ui)
- sdk_add_include_directories(guider_ui/custom)
- sdk_add_include_directories(guider_ui/generated)
- sdk_add_include_directories(guider_ui/generated/guider_customer_fonts)
- sdk_add_include_directories(guider_ui/generated/guider_fonts)
- sdk_add_include_directories(guider_ui/generated/images)
- sdk_add_include_directories(app)
- target_sources(app PRIVATE ${sources} ${app})
- sdk_set_main_file(main.c)
- get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
- project(${PROJECT_NAME})
复制代码
修改lv_conf.h,增加2个宏定义
修改main.c,添加头文件并注释掉WAKE_UP_ENABLE这个宏定义
修改main函数
- lv_ui guider_ui;
- int main(void)
- {
- board_init();
- // printf("HeapSize:%d\r\n",xPortGetFreeHeapSize());
- tcpip_init(NULL, NULL);
- //wifi_start_firmware_task();
- lwip_sntp_init();
- bflb_mtd_init();
- easyflash_init();
- /* lvgl init */
- lv_log_register_print_cb(lv_log_print_g_cb);
- lv_init();
- lv_port_disp_init();
- //ui_init();
- setup_ui(&guider_ui);
- events_init(&guider_ui);
- printf("lv_task_handler\r\n");
- printf("lvgl success\r\n");
- xTaskCreate(lvgl_task, (char*)"lvgl", LVGL_STACK_SIZE, NULL, LVGL_TASK_PRIORITY, &lvgl_TaskHandle);
- xTaskCreate(button_process_task, (char*)"button_proc_task", button_PROCESS_STACK_SIZE, NULL, button_PROCESS_PRIORITY, &button_process_task_hd);
- // printf("HeapSize:%d\r\n",xPortGetFreeHeapSize());
- #ifdef WAKE_UP_ENABLE
- xTaskCreate(app_ble_task, (char*)"app_ble_task", APPBLE_PROCESS_STACK_SIZE, NULL, APPBLE_PROCESS_PRIORITY, &app_ble_process_task_hd);
- #endif
- vTaskStartScheduler();
- // while (1) {
- // lv_task_handler();
- // bflb_mtimer_delay_ms(1);
- // }
- while (1) {
- }
- }
复制代码 我这里不注释掉wifi_start_firmware_task()就无法运行,原版工程也一样
编译并烧录,运行效果如图
|