[STM32U5]

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

[复制链接]
747|5
手机看帖
扫描二维码
随时随地手机跟帖
HonestQiao|  楼主 | 2024-2-27 15:29 | 显示全部楼层 |阅读模式
在STM32U599J-DK开发板上,有两个用户可以控制的LED:
8864365dd89d1a0a14.png

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

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

并选择对应的开发板:
8429765dd8a4fccb69.png

然后,准备一张背景图片:
8295165dd8a64bd911.png
图片大小为480x480的,对应屏幕大小。


在TouchGFX中,进入到Images管理,添加图片:
7361265dd8ae93e11b.png

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

再添加两个按钮,用于控制两个LED:
946565dd8b3cbf25c.png

再给两个按钮,都设置好点击调用:
5567665dd8b5f6b5bc.png 2586465dd8b7084454.png


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


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

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

项目目录如下:
5793765dd8bd76b2c8.png

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

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

TouchGFX采用了类似MVC的MVP开发模式:
5246865dd8cdc5dd44.png

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

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

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

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

toggleButton_green.setAction(buttonCallback);


点击后,调用该文件中定义的回调:
void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
    if (&src == &toggleButton_green)
    {
        //Interaction_green
        //When toggleButton_green clicked call virtual function
        //Call ToggleLED_green
        ToggleLED_green();
    }
    if (&src == &toggleButton_red)
    {
        //Interaction_red
        //When toggleButton_red clicked call virtual function
        //Call ToggleLED_red
        ToggleLED_red();
    }
}
在该回调中,通过判断点击来源,确定调用具体的处理逻辑函数。

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

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

Screen1View::Screen1View()
{

}

void Screen1View::setupScreen()
{
    Screen1ViewBase::setupScreen();
}

void Screen1View::tearDownScreen()
{
    Screen1ViewBase::tearDownScreen();
}

void Screen1View::ToggleLED_green()
{
#ifndef SIMULATOR
    if(toggleButton_green.getState())
    {
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, GPIO_PIN_RESET);//LD2蓝灯亮


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

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

6395265dd8f694dcd2.png
6433465dd89b86c428.png
5800665dd8a3751b37.png
887365dd8ad33501f.png

使用特权

评论回复
vivilyly| | 2024-2-27 23:39 | 显示全部楼层
使用的是touchgfx吗?         

使用特权

评论回复
vivilyly| | 2024-2-28 23:36 | 显示全部楼层
是否可以移植lvgl做gui设计?   

使用特权

评论回复
狄克爱老虎油| | 2024-2-29 18:35 | 显示全部楼层
这个屏幕很帅

使用特权

评论回复
HonestQiao|  楼主 | 2024-2-29 18:54 | 显示全部楼层
vivilyly 发表于 2024-2-28 23:36
是否可以移植lvgl做gui设计?

使用的是TouchGFX.


LVGL好像不一定行,没试过。

使用特权

评论回复
Henryko| | 2024-2-29 22:09 | 显示全部楼层
应该可以移植lvgl的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

90

帖子

2

粉丝