使用STM32F429单片机运行TouchGFX

        本文记录下如何使用STM32F429单片机运行TouchGFX,同时记录下使用STM32CUBEMX和STM32CUBEIDE开发工具进行TouchGFX开发的具体过程。

        STM32F429是ST公司推出的基于ARM Cortex-M4核的微控制器,主频最高180MHz,运行嵌入式GUI性能足够,带有LTDC、DMA2D等专用图形应用硬件,使得开发嵌入式GUI更方便。

        TouchGFX是ST推出的一款现代嵌入式GUI,只能运行在STM32系列单片机上,作为STM32开发库之一,同时具有完善的设计开发工具,免费给用户使用,没有任何限制。

1.版本选择

        我使用的软件版本为:STM32CubeIDE 1.11.2、STM32CubeMX 6.7.0、TouchGFX 4.21.1 Designer。直接从ST官网下载这些软件即可,也可以下载最新版本。

2.新建项目(使用STM32CubeMX配置STM32CubeIDE项目)

        打开STM32CubeMX,选择“Start My project from MCU”。

bbdc081e163f432b94ea8d78feb31789.png        通过单片机型号搜索单片机,我使用的单片机是STM32F429IIT6,选择单片机型号后,点击“Start Project”。

6ef0b5cadc9e4d0f99e37a0acff8dce8.png

         出现如下界面,该界面是MX的硬件配置界面,在这里我们可以配置单片机的时钟、引脚功能、外设以及软件包。这里我先不配置硬件,硬件配置等之后再配置。

06af0f87cd5a4eecaaa46f22bbff5264.png

        切换到Project Manager选项卡, 在这里设置项目名、路径以及一些必要的设置。配置项目名及路径。

4dbd97209ff54013b96d43b950148c4e.png

        切换到Code Generator,根据下图配置,一个是选择“仅复制必要的库文件”,一个是勾选“配置外设生成的初始化代码放在单独的.c/.h中”。点击右上角的“GENERATE CODE”,生成项目文件。

67738414df33456380847b341d097306.png        生成的项目目录如下,等后面加入软件包,这里会相应多出其它文件夹,点击.project即可打开STM32CubeIDE项目。

 

8a1c1dac8320476fb0db3c4e9ebd1010.png

        打开STM32CubeIDE后,项目界面如下,main.c在Core->Src中,这里是存放单片机的应用代码。在这里直接双击MX图标,能直接打开该项目的MX进行硬件及软件包配置,以后再次打开该项目时,直接点击上图中的.project即可,MX在IDE中直接打开即可,包括之后用到的TouchGFX Designer也可以直接在IDE中启动,这样开发项目就会变得更快速、简洁。使用STM32CubeIDE开发STM32的一大好处也是STM32CubeIDE集成度高,集成了很多第三方软件。

5aab86b1cb674b5c8c205e1ef8b2becd.png

b58c39e1eca24d0da12ddea13d3d6b5c.jpeg

        到此,使用STM32CubeMX配置STM32CubeIDE项目已经完成,接下来通过MX配置单片机的硬件及软件包。双击IDE中是.ioc,打开MX进行相关配置。

3.运行TouchGFX需要的相关的配置

3.1 时钟配置

        先配置时钟,这里我使用芯片内部16M RC振荡,然后输入168M,MX会自动计算其它时钟频率,这里使用MX计算的频率。

ef8b8a6bb5474d448fff984248c36bc6.png

        不过有一点需要注意,因为我们驱动TouchGFX使用LTDC外设,就要注意LCD-TFT的时钟,如果你使用LTDC驱动液晶屏有问题,屏幕花屏或是显示错位,则注意调整一下这边的时钟,将LCD-TFT时钟降低试试。

caf2ec860c0b43d993ce44eeeae4733c.png

3.2 安装TouchGFX软件包

        我这里目的是使用单片机驱动TouchGFX,那这里只记录下驱动TouchGFX需要的一些配置。之前我照着网上的一些教程配置,为了驱动起TouchGFX,很多说需要使用freeRTOS操作系统。但驱动TouchGFX,操作系统并不是必须的,裸机一样跑起来,放在定时器中断定时运行或直接放在主函数里都可以,只要运行TouchGFX的代码,就能跑起来。

        首先我们先安装TouchGFX软件包,打开软件包安装界面如下:

043089fe3070491981aa46336d1b180f.png

        打开Manage Software Packs后,弹出软件包管理界面,在这里包含着STM32所有能够使用的软件包,而且这些软件包是官方的,是在STM32上优化过的软件包。这些软件包能够直接使用,IDE会·生成直接能够调用的代码,大大省去开发者的移植过程。

         在这里直接选择版本安装就行,注意版本不要太老了。我这里选择4.21.1版本。由于我安装过了,这里是安装过后的截图。

14d8b8cd76284a2e8872ed7fb23c69a4.png98b7ea629d63481a8c5e2cf84f94b157.png

        安装了 TouchGFX后,在MX的配置栏会出现TouchGFX的配置项,具体配置下面再讲。

6a0ba911db6d470d9db03bf0b694f5e5.png

3.3 TouchGFX配置

        接下来是具体的配置过程,按照配置栏从上往下一项项说。

3.3.1 System Core->Sys

        这里Debug配置为Serial Wire,因为我使用的是SWD下载器。Timebase Source选择TIM6,用作HAL库的时基,HAL库里有延时函数一类的需要用到定时器,我这里随便给了个TIM6,选择其它的都行,只要确保不和其它应用冲突。这里配置定时器和TouchGFX无关。

cba964acb624480eb66985d289201b6e.png

3.3.2 Connectivity->FMC

       ‌FMC(Flexible Memory Controller)‌是一种内存控制器,主要用于管理不同类型的存储设备,包括SRAM、DRAM、NAND Flash和NOR Flash等。这里我用来控制外部SRAM芯片,扩展内存。为什么要扩展内存呢,当然是单片机内部内存不够用了。STM32F429型号的单片机内部RAM是256KB,我使用的液晶屏的分辨率是480*272=130560‬,大概130KB,而每个点需要2个字节存储颜色信息(RGB565,下面会讲到),这样就需要480*272*2=261120=255KB,内存肯定是不够的,况且你肯定多多少少还要运行其它任务,不可能驱动个屏幕就完事了,其它任务可能也会消耗很多内存。所以,使用外部RAM芯片扩展内存是必要的。

        我参考的是正点原子的开发板,内存扩展芯片和屏幕接口和正点原子的一样。内存扩展芯片是W9825G6KH-6。FMC具体的配置见下图:

8600a06256cc4190ab29a191f633f1ea.png

f15e48819699419d8899932fc17f4492.png

d5ea8237a0f44950bd1b4b50d3d72e8e.png

29d5d16f54db43b7b911ade491ccdbb2.png

f56384734ae54516b074eb70698f7731.png3e41e0b5e7fc429898641ff81f886b00.png6fb94f45c71c41e5a839cdcd950364fd.png

3.3.3 Multimedia->DMA2D

        STM32F429单片机具有专用的 Chrom-ART Accelerator和用于增强的图形内容创建硬件加速DMA2D,说白了, DMA2D是为了加速2维图像(当然它也没有3维图形加速器)而设计的硬件,主要用于图片的处理与传输。DMA2D能够将内存中的图像数据直接搬运到输出接口,不占用CPU资源,大大增加了图像处理效率。TouchGFX是需要DMA2D来加速图形处理。

        正点原子液晶屏是RGB接口,而且是RGB565接口,也就是说,Red用了5根线,Green用了6根线,Blue用了5根线。为什么使用RGB565而不用RGB666、RGB888,因为对于一般显示而言,RGB565颜色个数足够(2^16=65536种),而且硬件接线也减少。DMA2D具体配置如下:

15dbc5e6605847258711bedfa7effef7.png

 d983903f766c402e9882782587985f40.png

3.3.4  Multimedia->LTDC

‌        LTDC(LCD-TFT Display Controller)是一种显示接口,主要用于连接TFT屏幕。LTDC是并行接口,主要用于驱动RGB接口屏幕。我使用的是RGB565接口的液晶屏,和正点原子RGB液晶屏接口一样。具体配置如下图所示,这些参数都是液晶屏驱动芯片决定的,驱动芯片手册上都有具体数据,感兴趣可以深入研究。

9d14ee5f819c474b9352d4b76c1134e4.png

7e0cc67b6590452bb7929c84154cd74f.png

        层配置: 

a0578aaf586f440ab2e6b79fca159f44.png7daa9badf8ec4c63ad3c6896ac3e9be2.png

        我不需要过多的图像运算,这里选择1 layer。 内存地址设置为0xC0000000,这个地址是FMC存储区域5,外部RAM芯片的寻址地址。

63216cb895cb486f9a202f2bb3b1725e.png

        中断配置与IO配置: 

fd32a212c3564e26b811880ac8d33ba4.png

9476b2ddfbe54228a6530773a18a54b1.png

1764289d995e4aaeb7e6c1e3ae504dfe.png

3.3.5 Computing->CRC

        使用TouchGFX必须要开启CRC,实测不开启CRC的话TouchGFX不运行。关于这个CRC为什么一定要开启才能使用TouchGFX,有可能TouchGFX内核确实用到CRC校验,网上也有人说是为了防止其它家芯片移植TouchGFX而用CRC识别芯片。具体作用我不清楚,反正就是要开启CRC。

f9d92daa62a94fd78247c0f161351b05.png

3.3.6 Software Packs

        最后配置TouchGFX软件包,我使用双缓存,Start Address设置为0xC0000000,和之前的LTDC地址设置一样。

b291890d5bd54700a76666a1973da023.pngc98e99bea07d4ea2bde4038e614612a2.png

        至此,TouchGFX的MX配置已经到此结束,配置参数还是比较多的。直接Ctrl+s保存,MX会自动生成IDE代码,代码能够直接编译,但想要让液晶屏显示图形,还需要一些工作。

4.液晶屏背光驱动

       液晶屏需要背光才能显示,我使用的液晶屏内置背光驱动电路,只需给背光驱动电路一个高电平,背光就可点亮。背光IO口使用PB5,直接配置PB5高电平即可。如果想调节背光亮度,就要使用PWM(硬件或软件)控制,这个我就不多说了。

5.设计TouchGFX界面

        TouchGFX官方提供了UI设计工具TouchGFX Designer,使用UI设计工具能够大大提高UI开发效率。我们回到STM32CubeIDE的主界面,会发现目录里多了个TouchGFX的文件夹,这个就是MX生成的TouchGFX软件包,里面放着TouchGFX所需用到的应用代码,是开放给用户使用的。使用MX第一次生成TouchGFX代码后,你只会看到TouchGFX文件夹下只有一个ApplicationTemplate.touchgfx.part的文件,直接双击这个文件,就能打开TouchGFX Designer。等保存了TouchGFX的界面后,就会出现control.touchgfx这个文件,之后打开这个文件编辑界面即可(我是这样操作的)。

3174583a115e460c9fbd02d5dd3d2ab8.png

        双击打开后的 TouchGFX Designer界面记不清了,反正可以选择例程或者新建空白UI,记得配置下分辨率,我配置的是W480、H272,创建界面后如下:

80bfbefc6a954c1e87e98b2a3dab412b.png

        TouchGFX Designer和大多数的UI设计工具一样,都是由这几个部分组成:控件、画布、属性、对象,设计方法也大致相同,都是先拖拽控件,然后修改控件属性,最后布局。在这里我放置一个带标签的按钮并居中:

2f8bd47cdcea4a6f9b5b30afbc29c564.png

       先保存,然后点击编译按钮,TouchGFX Designer会直接生成代码,STM32CubeIDE会同步更新代码。这也是使用STM32CubeIDE的一大优点,和其它应用软件配合度更高。

        此时如果你有硬件,烧录后发现液晶屏毫无反应,那就对了,因为只配置了FMC,还没有外部SRAM芯片的驱动代码,内存地址寻不到,没有内存存储图形数据,液晶屏自然显示不了。

        到这里,TouchGFX的硬件已经完成了,剩下的就是加入SRAM芯片驱动代码和触摸驱动代码,以及TouchGFX如何编程、如何设计界面、如何触发事件、如何与硬件交互以及如何实现你的任务,这些下节再写吧。

 

 

 

 

作者:控制铺子

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32F429单片机运行TouchGFX

发表回复