本帖最后由 sujingliang 于 2024-9-6 19:41 编辑
首先,感谢21IC和ST提供这次评测机会。
STM32H7S78-DK是一个非常不错的产品,刚拿到开发板就被精美的开机DEMO惊艳了,真不忍心用自己写的粗鄙的程序将DEMO覆盖。STM32H7S78-DK应该是一个聚集了各种技术的集合体,对开发者的技术要求还是挺高的,所以后面的评测本质也可以说是一个学习的过程。
如果不是有这样一个便利的集成化大屏的开发板,很难想象我会误入TouchGFX领域并产生兴趣,因为TouchGFX开发好像将传统的MCU引向了另一个领域。
好吧,开始了:
一、先简单地搭建开发环境
少走弯路,建议安装以下工具:
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新建工程
Examples->Select Board Setup,然后搜STM32H7S78-DK
例子中选择最简单的Blank UI,然后生成新的工程。
放置一些部件
增加一个Interaction1,其中Action 选择 Call new virtual function,将function Name命名为ledToggle
ledToggle函数将由Screen1ViewBase的成员函数实现。
然后F4生成代码,可以用STM32CubeIDE或其他工具编辑,也可用STM32CubeMX继续做其他资源配置。
2、手工修改部分
打开appli/touchgfx/generated/gui_generated/src/screen1_screen/screen1viewbase.cpp,可以看到其中buttonCallbackHandler已经有了对ledToggle()的调用。在Screen1ViewBase中ledToggle()是个虚函数。
void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
if (&src == &toggleButton1)
{
//Interaction1
//When toggleButton1 clicked call virtual function
//Call ledToggle
ledToggle();
}
}
在gui/screen1view.cpp中增加:
#include "main.h"
void Screen1View::ledToggle()
{
HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
}
并在gui/screen1view.hpp中增加void ledToggle()成员函数的定义,这个函数继承自Screen1ViewBase。
#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
void ledToggle();
protected:
};
#endif // SCREEN1VIEW_HPP
3、当然还需要用STM32CubeMX对LD1(PO1)进行配置
这部分略。
三、效果
四、总结
1、TouchGFX 部分的程序用的是C++。
2、TouchGFX 生成的程序中,主要可以修改的部分在gui下。为了简单本文没有严格按照MVP架构编写。
|