TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植

1 前言

在前两个礼拜TouchGFX更新了4.13版,版本的改动比较大,网上的教程都还只是停留在早期的版本,早期的移植教程已经不适应于现在版本,这给晚入门的朋友们在移植上带来很大的不便,所以在第二章介绍了新版本的移植。
几个月使用touchgfx开发的过程中,遇到了使用keil编译与下载太慢,HAL库的德行就这样,加上大量图片文字资源放在W25Q中,进一步减慢了下载速度,所以在此提出一种开发思路:使用前后端分离的思想,建立中间件连接UI与系统,这样UI相关的程序用VS开发并在电脑仿真,MCU端只要把接口实现,就可以直接运行做好的UI了,如果你有不一样的开发思路,欢迎一起探讨。
RT-Thread在调试上具有一定的优势,所以最后介绍下如何把现有的工程移植到RT-Thread系统中,此部分参考了@天狼八部 的教程,针对新版本的改变略加修改。

2 使用CubeMX创建TouchGFX工程

2.1 准备工作

2.1.1 安装好CubeMX与TouchGFX Designer

  • CubeMX下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
  • Touchgfx Designer下载地址:https://www.st.com/en/embedded-software/x-cube-touchgfx.html,解压后软件安装包的路径在…\Utilities\PC_Software\TouchGFXDesigner\TouchGFX-4.13.0.msi里。
  • CubeMX里安装touchgfx的组件:
    在这里插入图片描述
    在这里插入图片描述

2.2 创建CubeMX工程

在这里插入图片描述
在这里插入图片描述

2.3 配置时钟源

在这里插入图片描述

2.4 配置仿真与系统时间基准

在这里插入图片描述

2.5 配置FMC->SDRAM

在这里插入图片描述

2.6 配置QSPI->W25Q

在这里插入图片描述

2.7 配置串口

在这里插入图片描述

2.8 配置DMA2D

在这里插入图片描述

2.9 配置LTDC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.10 配置CRC

在这里插入图片描述

2.11 配置FreeRTOS

在这里插入图片描述

2.12 配置时钟

在这里插入图片描述

2.13 配置其它IO

在这里插入图片描述

2.14 添加与配置TouchGFX

在这里插入图片描述
在这里插入图片描述

2.15 生成工程

在这里插入图片描述

2.16 使用TouchGFX Designer创建基础界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.17 修改main.c文件

在这里插入图片描述
在这里插入图片描述
注:我这里是拷贝以前版本生成的代码。因为在以前版本SDRAM必须开启才能使用touchgfx,但现在版本不是必要的了,屏幕小点使用片内RAM都可以,所以cubemx就不给你生成了。
在这里插入图片描述
在这里插入图片描述

2.18 编译下载运行

在这里插入图片描述

2.19 将图片文字等数据放到QSPI FLASH

这个网上的教程很多,在此就不重复说明
参考网址:https://blog.csdn.net/Ningjianwen/article/details/100151158

3 合理利用中间件提高开发效率

3.1 原理简述

虽然touchgfx的代码与系统的耦合度不是很高,但随着程序的开发,如果不用中间件来解耦合,会使touchgfx的可移植性大大降低,也不利于代码的分享。
举个例子,很多人开发touchgfx的界面时,直接调用的MCU的一些代码,比如HAL库的代码,这样在使用VS仿真的时候就会报错,只能下载到单片机上调试,这样的效率是很低的,而且将这样的代码分享给别人,别人得把你在touchgfx调用的MCU的代码改成适用自己硬件的代码,工程一大就很难去寻找修改。
中间件实现很简单,示意图如下:
在这里插入图片描述
创建两个.c文件一个.h文件做为中间件,.h文件中touchgfx与系统的交互接口,再根据平台的不同在对应.c文件中实现接口的功能。
这样做有几个好处:

  • 开发过程中可以完全使用VS来编写与仿真界面,提高界面的开发效率;
  • 可以让没有MCU开发经验的前端人员来写touchgfx程序,MCU的开发人员可以轻松的移植程序到硬件;
  • 只需要把修改.c文件就可以直接移植到其它硬件、平台,有利于移植、分享;

3.2 实现方法

我以贪吃蛇的工程为例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结一下,在 MDK 编写的程序我只是把.c 文件修改好,而 touchgfx 的程序都没有去
动,这样就可以少了很多编译下载调试的时间,也方便移植到不同硬件平台上去。

4 如何将别人的 TouchGFX 工程复制到自己的工程中

贪吃蛇的程序其实是用 TouchGFX Designer 建的 PC 工程,调好后再移到 cubemx 创的MDK 工程中的。这里介绍下如何移植他人的 touchgfx 工程到自己创建的工程下的方法与注意事项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 TouchGFX 工程移植到 RT-Thread

5.1 准备工作

  • 下载 RT-Thread 和 ENV。
  • 会使用 ENV。
  • 参考 https://www.rt-thread.org/document/site/#

5.2 新建 BSP

在这里插入图片描述
在这里插入图片描述

5.3 修改工程模板

在这里插入图片描述
在这里插入图片描述

5.4 拷贝 CubeMX 工程

在这里插入图片描述

5.5 新建 board/port 文件夹

在这里插入图片描述
在这里插入图片描述

5.6 创建操作系统接口文件

在这里插入图片描述
在这里插入图片描述

5.7 新建 touchgfx_entry.cpp 文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.8 编辑 board/KConfig

在这里插入图片描述

5.9 编辑 board/SConscript

在这里插入图片描述

5.10 创建 board/CubeMX_Config/SConscript

在这里插入图片描述
在这里插入图片描述

5.11 复制系统时钟初始化函数

将 /board/CubeMX_Config/Src/main.cpp 中的 SystemClock_Config 函数复制并替换
/board/board.c 中的同名函数。
修改/board/board.h 中的参数为实际值。
在这里插入图片描述
在这里插入图片描述

5.12 修改链接文件

/board/linker_scripts/link.sct 修改如下。根据不同单片机的 flash 和 ram 大小进行正确
配置。
在这里插入图片描述

5.13 修改 main.h

Board/CubeMX_Config/Inc/main.h中,void Error_Handler(void)函数的定义与RT-Thread
中同名函数定义有冲突,做如下修改。
注意:在使用 CubeMX 修改配置并重新生成代码后,该文件需要重新修改。
在这里插入图片描述

5.14 配置 Menuconfig

RT-Thread Kernel -> Memory Management 进行如下配置。这两个配置会将 SDRAM 通
过 RT-Thread 管理起来,可动态分配 SDRAM 中的内存。
在这里插入图片描述
在这里插入图片描述

5.15 开启 TouchGFX

在 Hardware Dervers Config 中 开 启 TouchGFX 。 开 启 后 Onboard Peripheral
Dervers->Enable SDRAM 将自动开启。
在这里插入图片描述

5.16 开启 QSPI

在这里插入图片描述

5.17 生成工程

在 ENV 中通过 scons --target=mdk5 命令生成工程,并打开。编译下载即可正常运行。
注意:在 TouchGFX Designer 修改界面后,最好是重新生成一次工程。(增删了界面,
使用和修改了图片都会生成新文件或删除旧文件,这时候就需要重新生成工程,其他时
候不需要。为保险起见,建议修改了界面后重新生成一次。)
在这里插入图片描述
在这里插入图片描述

5.18 编译并下载运行

在这里插入图片描述
注:如果编译报上百个错,里面有“_assert”,请把优化等级调成 L3。

6 对刚开始接触touchgfx的新人的建议

  • touchgfx正确的官网为https://touchgfx.zendesk.com/hc/en-us
  • 看不懂英文有浏览器自带的翻译
    在这里插入图片描述
  • 先把入门里面的教程敲一遍,直接建个pc的空白工程,用vs去调试就行了;
  • 在练习完入门里的教程后,把知识库里的文章看一下,加深对touchgfx整体的理解;
  • 在平常的开发中,“API参考”是很重要的;
  • RT-Thread系统是看个人喜好而使用的,我是觉得生成代码有点麻烦,对于RT-Thread不熟悉的人容易遇到很多问题,所以还是以freertos为主。
  • 在官网上的内容都大体看了后,还可以看设计器里的例程进一步加深学习
    在这里插入图片描述

7 后记及一些注意事项

赶在春节放假前完成了这篇教程的原稿,可能会有所欠缺,如果你在操作过程中遇到 bug,请在 Q群中讨论 625183657
因为疫情的原因,电脑扔公司,所以拖到现在才发到博客上。
在用 vs 编写界面时遇到一些坑
1、vs 的结构体赋值可以直接={值 1,值 2};,但 keil 不行,所以需要申明带具体名称的结构体变量才能用。
2、touchgfx 不支持任何动态内存分配,现有版本是这样,所以我调用 c++的 vecto 在电脑仿真时没问题,一到单片机上就不行了。

8 工程下载链接

链接: https://pan.baidu.com/s/11tq84gHar0j1srMYzNYccQ
提取码: 37wc
工程对应的硬件是正点原子的阿波罗 767 开发板+7 寸 800*480RGB 液晶屏

发布了2 篇原创文章 · 获赞 1 · 访问量 1482

猜你喜欢

转载自blog.csdn.net/baidu_33429980/article/details/104248352
今日推荐