当前位置: 首页 > news >正文

万象奥科RK3506官方SDK内置LVGL移植 Gui Guider程序

参考这篇文章:https://blog.csdn.net/helizhen1993/article/details/157216781?fromshare=blogdetail&sharetype=blogdetail&sharerId=157216781&sharerefer=PC&sharesource=ztsggg&sharefrom=from_link

核心板:万象奥科 RK3506G2核心板

参考配置文件为:HD-RK3506-EVM

首先要保证Gui Guider使用的LVGL版本与SDKLVGL版本一致,RK3506官方SDK中LVGL版本为8.4.0和9.1。本项目使用Gui Guider版本为1.9.1,可以创建8.3.1和9.2的程序。创建完项目生成的代码格式如下:

一、将custom``generated两个文件夹放到SDK/app/lvgl_demo/my_demo/目录下,复制lvgl_demo/lv_demo/文件夹内的CMakeLists.txtmain.cmain.hMakefile四个文件

最终如图:

二、修改文件

1.修改my_demo/main.c如下:

/* * Copyright (c) 2021 Rockchip, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#include<lvgl/lvgl.h>#include<lvgl/lv_conf.h>#include"main.h"#include"gui_guider.h"/*新增*/#include"events_init.h"/*新增*/staticintquit=0;lv_ui guider_ui;/*新增*/#ifUSE_DEMO_WIDGETSexternvoidlv_demo_widgets(void);#elifUSE_DEMO_BENCHMARKexternvoidlv_demo_benchmark(void);#elifUSE_DEMO_MUSICexternvoidlv_demo_music(void);#endifstaticvoidsigterm_handler(intsig){fprintf(stderr,"signal %d\n",sig);quit=1;}intmain(intargc,char**argv){signal(SIGINT,sigterm_handler);lv_port_init(0,0,0);#ifUSE_DEMO_WIDGETSlv_demo_widgets();#elifUSE_DEMO_BENCHMARKlv_demo_benchmark();#elifUSE_DEMO_MUSIClv_demo_music();#endifsetup_ui(&guider_ui);/*新增*/events_init(&guider_ui);/*新增*/while(!quit){lv_task_handler();usleep(5000);lv_tick_inc(5);/*新增*/}return0;}

特别要注意的是lv_tick_inc(5)函数,由于内置LVGL8.4.0,是通过patch生成的lv_conf.h文件,一直没找到如何修改,无法定义时基导致触摸失灵,如果在lv_conf.h中开启则LV_TICK_CUSTOM不需要lv_tick_inc(5)函数。

#defineLV_TICK_CUSTOM1#ifLV_TICK_CUSTOM#defineLV_TICK_CUSTOM_INCLUDE<stdint.h>/*Header for the system time function*/#defineLV_TICK_CUSTOM_SYS_TIME_EXPR(custom_tick_get())/*Expression evaluating to current system time in ms*/#endif/*LV_TICK_CUSTOM*/

2.修改my_demo/CMakeLists.txt如下:

cmake_minimum_required(VERSION3.8)project(my_demo)#新增include_directories(${PROJECT_SOURCE_DIR}/./)include_directories(./generated/guider_customer_fonts/)#新增include_directories(./generated/)#新增include_directories(./custom/)#新增if(LVGL_DEMO_WIDGETS)add_definitions(-DUSE_DEMO_WIDGETS=1)set(LINK_LVGL_DEMOS ON)elseif(LVGL_DEMO_BENCHMARK)add_definitions(-DUSE_DEMO_BENCHMARK=1)set(LINK_LVGL_DEMOS ON)elseif(LVGL_DEMO_MUSIC)add_definitions(-DUSE_DEMO_MUSIC=1)set(LINK_LVGL_DEMOS ON)endif()aux_source_directory(. SRCS)aux_source_directory(./custom SRCS)#新增aux_source_directory(./generated SRCS)#新增aux_source_directory(./generated/images SRCS)#新增aux_source_directory(./generated/guider_fonts SRCS)#新增add_executable(${PROJECT_NAME}${SRCS})install(TARGETS${PROJECT_NAME}RUNTIME DESTINATION bin)#install(PROGRAMS S10lv_demo DESTINATION /etc/init.d)#此处是把S10lv_Demo复制到/etc/init.d中,使能自启动,如果需要,还得改一下里面的内容

3.修改lvgl_demo/CMakeLists.txt如下:

如果在buildroot中启用rk_demo,则会编译rk_demo,否则编译自己的my_demo,这个与buildroot中的逻辑对应起来。

if(LV_USE_RK_DEMO)add_subdirectory(rk_demo)# add_subdirectory(gallery)# add_subdirectory(amp_monitor)# add_subdirectory(flexbus)# add_subdirectory(motor_demo)else()add_subdirectory(my_demo)#add_subdirectory(lv_demo)endif()

三、修改Buildroot配置

万象奥科官方手册 :SDK编译

1.根据手册步骤进入到Buildroot配置界面。

注意:buildroot构建文件系统时最终是以buildroot/output/xxxx/.config配置文件为准。在Buildroot目录中第1次运行make menuconfig时会从默认的/buildroot/configs/rockchip_hd_rk3506g_evm_nand_defconfig【./build.sh lunch时选择的就是这块板子】生成.config文件,如果buildroot修改后也会保存到.config文件内,需要将修改后的.config文件替换rockchip_hd_rk3506g_evm_nand_defconfig文件,这样修改才会生效。

2.如果使用LVGL8.X,要使用lv_drivers要选择RKADK

另外LVGL configuration,可以配置颜色深度,内存大小,复杂UI时内存大小尽量配置大一点【此处受package/lvgl/config.in影响,限制了范围,可以修改】

3.修改app/lvgl_demo/lvgl8/evdev.h,对输入设备进行设置

开启use_evdev、修改分辨率

#ifndefUSE_EVDEV#defineUSE_EVDEV1#endif#ifUSE_EVDEV||USE_BSD_EVDEV#undefEVDEV_NAME#defineEVDEV_NAME"/dev/input/event0"/*You can use the "evtest" Linux tool to get the list of devices and test them*/#defineEVDEV_SWAP_AXES0/*Swap the x and y axes of the touchscreen*/#defineDEFAULT_EVDEV_HOR_MIN0#defineDEFAULT_EVDEV_HOR_MAX480#defineDEFAULT_EVDEV_VER_MIN0#defineDEFAULT_EVDEV_VER_MAX800#endif/*USE_EVDEV*/

4.修改app/lvgl_demo/lvgl8/evdev.c

注释掉这段缩放代码

/*if (evdev_calibrate) { raw_x = map(raw_x, evdev_min_x, evdev_max_x, 0, hor_res); raw_y = map(raw_y, evdev_min_y, evdev_max_y, 0, ver_res); }*/

原因是:通过evtest /dev/input/event0测试 上报的坐标是正确的,在evdev.c添加调试代码后,经过缩放坐标就不对了。

猜测根据:开机log显示分辨率为2160*1600,可能在下面代码中改变了evdev_calibrate,导致正确的坐标又经过缩放。

if((evdev_min_x!=0)||(evdev_max_x!=disp_hor)||(evdev_min_y!=0)||(evdev_max_y!=disp_ver)){constchar*buf;buf=getenv("lv_disp_crop");if(buf)touch_crop=buf[0]-'0';if(!touch_crop){evdev_calibrate=1;printf("calibrate [%d,%d]x[%d,%d] to %dx%d\n",evdev_min_x,evdev_max_x,evdev_min_y,evdev_max_y,disp_hor,disp_ver);}

注释完代码后,触摸是正常的了。

5.编译 烧录

没有开启自启动,只需要在ssh中输入my_demo即可看到屏幕正常显示和触摸了。

http://www.jsqmd.com/news/631950/

相关文章:

  • VescUart库详解:嵌入式VESC UART通信协议与实时控制实践
  • 传送带撕裂检测数据集1263张VOC+YOLO
  • kafka Epoch机制
  • 英雄联盟玩家必备:LeagueAkari工具包深度解析与实战应用指南
  • FreeRTOS 线程本地存储(TLS)实战指南:从原理到应用
  • 从钓鱼邮件到Web后门:一次完整的攻击链流量分析复盘(基于BUUCTF案例)
  • C语言入门:代码例子讲透程序结构
  • Qwen3-ASR-1.7B开源大模型教程:PyTorch 2.5.0 + CUDA 12.4环境配置
  • QKeyMapper终极指南:5步掌握Windows按键自定义,提升操作效率300%
  • 全球海洋漂流浮标数据
  • LLM评估自动化不是写脚本,而是重构MLOps基建:17个生产级Checklist,含GPT-4/LLaMA-3实测基准
  • openclaw平替之nanobot源码解析(七):Gateway与多渠道集成汹
  • 编程基础(python)
  • HagiCode Skill 系统技术解析:如何打造可扩展的 AI 技能管理平台谠
  • GlobalMapper地形对比与方量计算实战:从两期数据到填挖方区域精准提取
  • WiFiPixels:ESP32上轻量级Wi-Fi控制NeoPixel的固件框架
  • 2026山东大学软件学院项目实训(二)——用户模块
  • LVGL嵌入式GUI开发:轻量级框架原理与硬件适配实战
  • 手把手教你用Qwen-Image-Edit-2511:小白也能玩的AI换装神器
  • HPH构造 一看就懂
  • 周报4.12
  • RAG工程化实践教程(非常详细),问题优化从入门到精通,看这一篇就够了!
  • 浏览器自动化六大技术路线深度对比:从模拟点击到 Chrome 扩展注入允
  • VibeVoice ComfyUI:解锁微软语音合成在AI内容创作中的无限可能
  • 《为什么只有镜像视界能做三维空间智能体?》——空间智能时代的技术门槛与体系壁垒解析
  • 千问 LeetCode 1359.有效的快递序列数目 public int countOrders(int n)
  • 别再为找数据发愁了!手把手教你下载并预处理LandSat8-38Cloud数据集(附Python代码)
  • 终极指南:如何使用League-Toolkit提升英雄联盟游戏效率
  • DeepSeek-V4全球首发,DMXAPI聚合平台同步上线,国产AI模型迎来突破
  • STM32CubeMX实战:SPI驱动W25Q32 Flash的底层封装与数据读写