你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢

[复制链接]
网络孤客 发布时间:2025-3-1 12:34

一、生成代码

在TouchGFX Designer按F4可以生成代码

目录.png

从代码目录中可以看出,生成的目录已经直接支持多个常用平台,如:IAR,Keil,stm32cubeide等。我用的是stm32cubeide。

为方便以下讲解先把需要的源码位置先标示出来

源码.png

二、照葫芦画瓢,自建example

重建一个基于STM32H745I-DISCO空白工程,按照example,布局按键和显示,各控件的命名与原来一直。只做了些微调和增加一个复位按钮。

界面.png

设置按键单击事件

按钮.jpg

生成代码后,会在MainViewBase.hpp中建一个MainViewBase类,类中定义了按键的虚函数(上图:Action中设置)。

定义.png

在MainViewBase.cpp中设置了回调

callback.png

具体实现:

首先在MainView.hpp中创建MainView类,继承自MainViewBase类

子类.png

然后在MainView.cpp中编写各按键具体操作函数和刷新显示函数


void MainView::increaseValue()
{
    count = (count++ > UPPER_LIMIT) ? UPPER_LIMIT : count;
    updateGFXElements();
}

void MainView::decreaseValue()
{
    count = (count-- <= LOWER_LIMIT) ? LOWER_LIMIT : count;
    updateGFXElements();
}

void MainView::resetValue()
{
        count = 0;
        updateGFXElements();
}

void MainView::updateGFXElements()
{
    //Counter text area GFX uptade.
    Unicode::snprintf(countTxtBuffer, 3, "%d", count);
    //Button GFX update and touchable.
    if (count < UPPER_LIMIT)
    {
        buttonUp.setBitmaps(Bitmap(BITMAP_UP_BTN_ID), Bitmap(BITMAP_UP_BTN_PRESSED_ID));
        buttonUp.setTouchable(true);
    }
    else
    {
        buttonUp.setBitmaps(Bitmap(BITMAP_UP_BTN_DISABLED_ID), Bitmap(BITMAP_UP_BTN_DISABLED_ID));
        buttonUp.setTouchable(false);
    }
    if (count > LOWER_LIMIT)
    {
        buttonDown.setBitmaps(Bitmap(BITMAP_DOWN_BTN_ID), Bitmap(BITMAP_DOWN_BTN_PRESSED_ID));
        buttonDown.setTouchable(true);
    }
    else
    {
        buttonDown.setBitmaps(Bitmap(BITMAP_DOWN_BTN_DISABLED_ID), Bitmap(BITMAP_DOWN_BTN_DISABLED_ID));
        buttonDown.setTouchable(false);
    }
    // Invalidate all GFX area, which will result in it being redrawn in next tick.
    countTxt.invalidate();
    buttonUp.invalidate();
    buttonDown.invalidate();
}
钩.png
效果.gif
效果.gif
钩.png
赞 收藏 评论1 发布时间:2025-3-1 12:34

举报

1个回答
网络孤客 回答时间:2025-3-1 12:59:06
如何与显示关联起来/ V9 w* K+ E; m6 f5 B: o% G! A9 w5 v2 o

9 y- z) @5 S- F! B& R: x6 C
4 K( C3 b+ Y5 h1 Q, m# K5 A
: M1 d- n# @0 m" `! r在把钩打上,就会在MainViewBase.hpp的MainViewBase类内,建立一个buffer。* S/ V! C) w3 _3 }/ t5 o7 ]( u
4 e9 V. |  I& T4 H& a, l
```
8 ?5 d8 C" ]* U# T0 V/ d    /*3 \4 {8 d3 K; ~
     * Wildcard Buffers
- t" s% m# ?1 v( h6 j! |     */
, u7 U$ y5 A, ]- L- i  D# J* p    static const uint16_t COUNTTXT_SIZE = 3;
- U% N8 y5 Q3 k( d    touchgfx::Unicode::UnicodeChar countTxtBuffer[COUNTTXT_SIZE];
2 ?; C, S; z: |* E2 v. R8 [```
4 E, \: ~' G+ I4 c! e9 Z6 K# U
9 X7 j; z- w, g! l在MainView.cpp的刷新显示函数里,往这个buffer里填入count值就行了# Y5 Q. {. q& R8 j* j- o; o
5 ]* [# ^, l* N2 v% I9 Z
```
% t' X6 d& b6 z: q- m  ]void MainView::updateGFXElements()5 o4 q# A7 s: T9 V4 k) |8 ^/ @
{. a# H- q) f) O. E' S' a
    //Counter text area GFX uptade.' ]$ o/ j3 M4 f: j' {
    Unicode::snprintf(countTxtBuffer, 3, "%d", count);$ p1 o8 J! R- Y! ]7 \, P! p. N
    //Button GFX update and touchable.) h" {" F: r  o
```0 \7 r, q$ J# G; ^& ], P5 a

5 Z3 l, F/ A3 U$ P3 R+ ]三、效果
! C1 h  P( q  L2 N- B
+ ]4 e4 u$ T6 I9 D4 O1 U

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版