[STM32H7] 【STM32H7S78-DK测评】1、TouchGFX控制板载LED

[复制链接]
 楼主| sujingliang 发表于 2024-9-5 21:07 | 显示全部楼层 |阅读模式
<
本帖最后由 sujingliang 于 2024-9-6 19:41 编辑

首先,感谢21IC和ST提供这次评测机会。

STM32H7S78-DK是一个非常不错的产品,刚拿到开发板就被精美的开机DEMO惊艳了,真不忍心用自己写的粗鄙的程序将DEMO覆盖。STM32H7S78-DK应该是一个聚集了各种技术的集合体,对开发者的技术要求还是挺高的,所以后面的评测本质也可以说是一个学习的过程。
如果不是有这样一个便利的集成化大屏的开发板,很难想象我会误入TouchGFX领域并产生兴趣,因为TouchGFX开发好像将传统的MCU引向了另一个领域。

好吧,开始了:
微信图片_20240905203816.jpg    微信图片_20240905203843.jpg

一、先简单地搭建开发环境
少走弯路,建议安装以下工具:
1、STM32CubeIDE 1.16.0
2、STM32CubeMX 6.12.0
3、TouchGFX Designer 4.24.0

CubeMX 用于搭建配置,TouchGFX Designer 用于屏幕驱动,CubeIDE用于编写程序,编译烧写。
这方面资料还是比较多,具体步骤略。

不推荐用KEIL编译,可能是对KEIL支持的不好吧,也可能自己理解不到位,个人遇到两个问题:
1、TouchGFX Designer生成的code中缺失两个静态库:nemagfx_core_release-wchar16.lib、touchgfxnema_release-wchar16.lib。编译会出错。
2、从TouchGFX Designer目录中找到这两个lib放入工程中,也编译成功了,但烧写后不工作。

所以建议用CubeIDE,也可以用ToucGFX Designer编译烧录,本质都是arm gcc交叉编译。

关于TouchGFX Designer的安装:

1、通过CubeMX安装X-CUBE-TOUCHGFX
路径:help->Embedded Software Packages Manager->X-CUBE-TOUCHGFX->4.24.0
安装后,在C:/Users/xxxx/STM32Cube/Repository/Packs/STMicroelectronics会多出一个X-CUBE-TOUCHGFX目录

2、进入X-CUBE-TOUCHGFX/4.24.0/Utilities/PC_Software/TouchGFXDesigner
运行其中的ToucGFX Designer安装程序:TouchGFX-4.24.0.msi

二、TouchGFX控制硬件LED闪烁

1、TouchGFX新建工程
GFX1.png
Examples->Select Board Setup,然后搜STM32H7S78-DK

GFX2.png
例子中选择最简单的Blank UI,然后生成新的工程。
GFX3.png
放置一些部件

GFX4.png
增加一个Interaction1,其中Action 选择 Call new virtual function,将function Name命名为ledToggle

ledToggle函数将由Screen1ViewBase的成员函数实现。

然后F4生成代码,可以用STM32CubeIDE或其他工具编辑,也可用STM32CubeMX继续做其他资源配置。
prj1.png
2、手工修改部分

打开appli/touchgfx/generated/gui_generated/src/screen1_screen/screen1viewbase.cpp,可以看到其中buttonCallbackHandler已经有了对ledToggle()的调用。在Screen1ViewBase中ledToggle()是个虚函数。
  1. void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
  2. {
  3.     if (&src == &toggleButton1)
  4.     {
  5.         //Interaction1
  6.         //When toggleButton1 clicked call virtual function
  7.         //Call ledToggle
  8.         ledToggle();
  9.     }
  10. }


在gui/screen1view.cpp中增加:
  1. #include "main.h"

  2. void Screen1View::ledToggle()
  3. {
  4.         HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);

  5. }
并在gui/screen1view.hpp中增加void ledToggle()成员函数的定义,这个函数继承自Screen1ViewBase。
  1. #ifndef SCREEN1VIEW_HPP
  2. #define SCREEN1VIEW_HPP

  3. #include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
  4. #include <gui/screen1_screen/Screen1Presenter.hpp>

  5. class Screen1View : public Screen1ViewBase
  6. {
  7. public:
  8.     Screen1View();
  9.     virtual ~Screen1View() {}
  10.     virtual void setupScreen();
  11.     virtual void tearDownScreen();
  12.                 void ledToggle();
  13. protected:
  14. };

  15. #endif // SCREEN1VIEW_HPP
3、当然还需要用STM32CubeMX对LD1(PO1)进行配置

这部分略。

三、效果
微信图片_20240905205339.jpg

tutieshi_480x270_4s.gif

四、总结
1、TouchGFX 部分的程序用的是C++。
2、TouchGFX 生成的程序中,主要可以修改的部分在gui下。为了简单本文没有严格按照MVP架构编写。

prj2.png




chenjun89 发表于 2024-9-6 08:09 来自手机 | 显示全部楼层
ST的型号不得不说真多,又出了个H7S系列。
Amazingxixixi 发表于 2024-10-31 16:03 | 显示全部楼层
非常详细的教程,
suncat0504 发表于 2024-10-31 17:07 | 显示全部楼层
画面靓丽,反应也挺快。
地瓜patch 发表于 2024-10-31 18:02 来自手机 | 显示全部楼层
Demo图形真漂亮,一看就是专业gui做到的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

146

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部