首页 > 评测 > 【STM32U599J-DK测评】屏幕触摸控制LED

【STM32U599J-DK测评】屏幕触摸控制LED

  
  • 作者:
  • 来源:
  • [导读]
  • 在STM32U599J-DK开发板上,有两个用户可以控制的LED: 8864365dd89d1a0a14.png (619.76 KB )下载附件2024-2-27 15:05 上传 这篇分享,结合屏幕,对这两个LED进行控制。 一、TouchGFX界面设计 首先,在TouchG
在STM32U599J-DK开发板上,有两个用户可以控制的LED:


这篇分享,结合屏幕,对这两个LED进行控制。

一、TouchGFX界面设计
首先,在TouchGFX中,新建一个项目:


并选择对应的开发板:


然后,准备一张背景图片:

图片大小为480x480的,对应屏幕大小。


在TouchGFX中,进入到Images管理,添加图片:


然后,在Screen界面,添加这个图片做为背景图:


再添加两个按钮,用于控制两个LED:


再给两个按钮,都设置好点击调用:



设计过程中,随时可以点击右下角中间的按钮,进行模拟测试:



设计完成后,点击右下角的左边,生成代码:


然后,点击左则的 Files,即可打开生成后的代码和项目目录:


项目目录如下:


其中包含了STM32CubeIDE和Keil等编辑器的项目文件。

二、代码编写
我使用STM32CubeIDE进行开发,直接进入下面的目录打开即可:


TouchGFX采用了类似MVC的MVP开发模式:


生成的界面处理部分代码,和我们逻辑功能部分的代码,是分离的。
通过这样的方式,界面可以继续修改,不对我们实际逻辑处理的代码产生影响。

在生成的Screen1ViewBase.cpp文件中,有界面处理的实际代码:


在这个文件的头部,提示了,不要修改这个文件。除非,后续不再使用TouchGFX进一步修改设计了。

上述代码中,包含了按键调用的设置:
  1. toggleButton_red.setAction(buttonCallback);

  2. toggleButton_green.setAction(buttonCallback);
复制代码


点击后,调用该文件中定义的回调:
  1. void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
  2. {
  3.     if (&src == &toggleButton_green)
  4.     {
  5.         //Interaction_green
  6.         //When toggleButton_green clicked call virtual function
  7.         //Call ToggleLED_green
  8.         ToggleLED_green();
  9.     }
  10.     if (&src == &toggleButton_red)
  11.     {
  12.         //Interaction_red
  13.         //When toggleButton_red clicked call virtual function
  14.         //Call ToggleLED_red
  15.         ToggleLED_red();
  16.     }
  17. }
复制代码
在该回调中,通过判断点击来源,确定调用具体的处理逻辑函数。

根据界面的设置,需要在Screen1View.hpp中生命对应的逻辑处理函数:


然后在Screen1View.cpp中,编写具体的实现:
  1. #include <gui/screen1_screen/Screen1View.hpp>
  2. #ifndef SIMULATOR
  3. #include "stm32u5xx_hal.h"
  4. #endif

  5. Screen1View::Screen1View()
  6. {

  7. }

  8. void Screen1View::setupScreen()
  9. {
  10.     Screen1ViewBase::setupScreen();
  11. }

  12. void Screen1View::tearDownScreen()
  13. {
  14.     Screen1ViewBase::tearDownScreen();
  15. }

  16. void Screen1View::ToggleLED_green()
  17. {
  18. #ifndef SIMULATOR
  19.     if(toggleButton_green.getState())
  20.     {
  21.         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, GPIO_PIN_RESET);//LD2蓝灯亮
复制代码


在上述代码中,使用了 SIMULATOR 宏定义来判断是否处于模拟器模式。如果不加处理,则使用模拟器运行,可能会出错。

三、实际效果:
编写完成后,编译下载,最终效果如下:



  • 本文系21ic原创,未经许可禁止转载!

网友评论