【CubeMX-HAL库】 STM32H743—手把手教你GUI-Guider

目录

一、简介

二、工程创建

三、GUI设计

四、模拟测试

五、系统设置

六、代码移植

1.GUI Guider文件移植

2.Keil设置

3.Keil代码修改

①在代码引用临界区添加Gui Guider生成的头文件

②定义guider_ui结构体全局变量

③添加Guider的注册函数

七、演示效果

八、问题解决

1.路径改变


一、简介

GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。

GUI Guider | NXP安装包下载官网

GUI Guider 1.8.1支持LVGL 8.3.10版本

GUI Guider 1.4.0支持LVGL 7.10.1和LVGL 8.2.0版本

二、工程创建

使用GUI Guider创建新项目,选择默认模拟器,使用空模板,因为本次使用的是1024*600的7寸RGB屏幕所以我们需要创建一个自定义的面板类型,点击创建即可使用。

三、GUI设计

通过可视化窗口左上角菜单栏可以选择部件并创建。

建议:①图层页面命名规范。

          ②创建部件命名规范(依照位置规定部件序号),之后编写逻辑代码时会更方便。

          ③在设置字体时建议都是用一种字体并减少字号的种类,缩小代码体积。

通过右键或者下方菜单栏可以增加部件的事件,可以先简单设置每个界面之间的逻辑。

四、模拟测试

通过点击上方菜单栏的生成代码、模拟器运行等,可以模拟仿真当前设计的LVGL。

五、系统设置

在顶侧工程选项卡中可以进行系统设置,可以与实际硬件相结合修改键盘是否显示,和模拟器内存大小等。

六、代码移植

1.GUI Guider文件移植

GUI Guider生成的文件结构如下,我们移植到单片机中的LVGL文件只需要customgenerated文件夹。将两个文件夹复制到单片机文件中的LVGL/GUI_APP目录中。

2.Keil设置

在我们的Keil工程中创建存放LVGL_GUI的工程分组,然后添加我们导入的文件路径。

在新建的GUI_APP分组中将复制过来的.c文件全部添加进来。

3.Keil代码修改

①在代码引用临界区添加Gui Guider生成的头文件

#include "../generated/gui_guider.h"//引用GUI头文件
#include "../generated/events_init.h"//引用GUI事件头文件
#include "custom.h"//GUI客户代码文件

②定义guider_ui结构体全局变量

lv_ui guider_ui;//GUI结构体定义

③添加Guider的注册函数

  /*LV_SPRINTF_USE_FLOAT开启打印浮点数*/
  custom_init(&guider_ui);//变量初始化
  setup_ui(&guider_ui);//GUI初始化
  events_init(&guider_ui);//GUI事件初始化

七、演示效果

八、问题解决

1.路径改变

复制别人的工程时,无法编译关联运行,显示如下报错。

错误原因:makefile里面的文件依赖关系有问题,导致头文件找不到。

解决办法:打开编译相关模块的makefile文件,找到.o文件的依赖关系,找到.h文件的路径,查看是否出错并改正。(直接找到build文件夹将其删除掉,然后重新编译构建工程即可)

原因分析:这种情况有时候是因为工程所在的目录改变,例如原来在C盘,现在移到了D盘,而makefile里面的.h文件路径没有改变。

make: *** No rule to make target 错误原因、分析和解决办法

<think>好的,用户需要寻找与GUI相关的触摸按键设计或实现方法。首先,我需要理解他们的需求。他们可能正在开发一个带有触摸屏的嵌入式系统,需要设计触摸按键并实现相应的功能。根据提供的引用资料,用户可能已经接触过LVGL、GUI GuiderSTM32触摸屏开发等相关工具和平台。 首先,我需要整理已有的信息。引用[1]提到使用LVGL和GUI Guider生成工程,引用[2]讨论了嵌入式开发中的触摸屏模拟按键,包括GUI绘制和状态切换。引用[3]和[4]则涉及STM32的触摸屏应用和按键控制LCD显示。这些资料都指向基于嵌入式系统的触摸按键实现,可能涉及硬件和软件的结合。 接下来,我应该按照用户的要求,结构清晰地分步骤回答。用户可能需要从设计到实现的整个流程,包括GUI绘制、触摸检测、状态管理、事件处理等。同时,可能需要考虑硬件选型、软件框架选择,以及具体的代码示例。 需要注意的是,用户提到的触摸按键需要实现按下一次开启,再次按下关闭,并且最多同时开启三个。这可能涉及状态机的设计,以及触摸事件的处理逻辑。此外,引用中提到的LVGL和GUI Guider工具,可能用户更倾向于使用现有的GUI框架来简化开发流程。 可能的问题点包括如何检测触摸事件、如何将触摸坐标映射到按键区域、如何处理多按键状态以及如何与硬件交互(如控制蜂鸣器或LED)。此外,性能优化和用户体验也是需要考虑的因素,比如防抖动处理、视觉反馈等。 在回答时,需要结合引用中的资料,比如引用[2]提到按键按下一次开启,再次关闭,这可以通过状态变量来实现。引用[4]中的示例展示了如何用触摸按键控制外设,这可能涉及到回调函数或中断处理。 最后,用户可能需要具体的步骤指导和示例代码,尤其是基于他们提到的工具如GUI Guider。因此,提供分步骤的实现方法,并引用相关资源,能够帮助他们更好地理解和应用。</think>以下是关于GUI触摸按键设计与实现的分步指南,整合了嵌入式开发中常用的方法和技术: 1. **硬件选型与驱动配置** - 选择支持电容/电阻触摸的LCD显示屏(如STM32F4/F7系列开发板) - 配置触摸屏控制器接口(I2C/SPI),校准触摸坐标 $$ \text{校准公式:}x_{real} = k_x \cdot x_{raw} + b_x$$ 引用示例:LVGL的触摸校准需要至少5个校准点[^1] 2. **GUI框架选择** - 推荐使用LVGL、emWin或Qt for Embedded: ```c // LVGL触摸事件回调示例 lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, NULL); ``` 3. **按键元素设计流程** **步骤1:创建按键对象** ```c lv_obj_t * btn = lv_btn_create(lv_scr_act()); // 创建基础按钮 ``` **步骤2:设置样式状态** ```python # GUI Guider样式配置示例 style_btn_default = Style() style_btn_pressed = Style(bg_color=0xFF0000) ``` **步骤3:布局定位** ```c lv_obj_set_size(btn, 80, 40); // W=80,H=40 lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0); ``` 4. **触摸检测实现** - 使用状态机处理触摸事件: ```c void touch_handler(){ if(touch_detected()){ uint16_t x,y; get_touch_coordinates(&x,&y); if(check_in_button_area(x,y,btn1)){ toggle_button_state(btn1); } } } ``` [^2]中实现的状态切换逻辑需要包含防抖动处理(建议10-20ms延时) 5. **高级功能实现** - **多按键管理**:创建按钮对象数组,使用循环检测 ```c #define MAX_BUTTONS 4 lv_obj_t *btns[MAX_BUTTONS] = {btn1, btn2, btn3, btn4}; ``` - **可视化反馈**: ```python # 按钮按下动画示例 lv_anim_t a; lv_anim_init(&a); lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_y); lv_anim_set_values(&a, 0, 5); ``` 6. **外设控制集成** 如[^4]所述,通过回调函数控制硬件: ```c void btn_event_cb(lv_event_t * e){ lv_obj_t * btn = lv_event_get_target(e); if(btn == btnBeep){ HAL_GPIO_TogglePin(GPIOB, BUZZER_Pin); } } ``` 7. **性能优化技巧** - 使用脏矩形更新技术:$更新区域面积 = \sum_{i=1}^{n} (w_i \times h_i)$ - 启用双帧缓冲(FrameBuffer) - 触摸采样率设置为50-100Hz[^3]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值