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

目录

  • 1 前言
  • 2 使用CubeMX创建TouchGFX工程
    • 2.1 准备工作
    • 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文件
    • 2.18 编译下载运行
    • 2.19 将图片文字等数据放到QSPI FLASH
  • 3 合理利用中间件提高开发效率
    • 3.1 原理简述
    • 3.2 实现方法
  • 4 如何将别人的 TouchGFX 工程复制到自己的工程中
  • 5 TouchGFX 工程移植到 RT-Thread
    • 5.1 准备工作
    • 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 复制系统时钟初始化函数
    • 5.12 修改链接文件
    • 5.13 修改 main.h
    • 5.14 配置 Menuconfig
    • 5.15 开启 TouchGFX
    • 5.16 开启 QSPI
    • 5.17 生成工程
    • 5.18 编译并下载运行
  • 6 对刚开始接触touchgfx的新人的建议
  • 7 后记及一些注意事项
  • 8 工程下载链接

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的组件:
    TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第1张图片
    TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第2张图片

2.2 创建CubeMX工程

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第3张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第4张图片

2.3 配置时钟源

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

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

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第6张图片

2.5 配置FMC->SDRAM

2.6 配置QSPI->W25Q

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第7张图片

2.7 配置串口

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第8张图片

2.8 配置DMA2D

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第9张图片

2.9 配置LTDC

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第10张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第11张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第12张图片

2.10 配置CRC

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

2.11 配置FreeRTOS

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第14张图片

2.12 配置时钟

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第15张图片

2.13 配置其它IO

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第16张图片

2.14 添加与配置TouchGFX

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第17张图片

2.15 生成工程

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第18张图片

2.16 使用TouchGFX Designer创建基础界面

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第19张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第20张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第21张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第22张图片

2.17 修改main.c文件


TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第23张图片
注:我这里是拷贝以前版本生成的代码。因为在以前版本SDRAM必须开启才能使用touchgfx,但现在版本不是必要的了,屏幕小点使用片内RAM都可以,所以cubemx就不给你生成了。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第24张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第25张图片

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的代码改成适用自己硬件的代码,工程一大就很难去寻找修改。
中间件实现很简单,示意图如下:
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第26张图片
创建两个.c文件一个.h文件做为中间件,.h文件中touchgfx与系统的交互接口,再根据平台的不同在对应.c文件中实现接口的功能。
这样做有几个好处:

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

3.2 实现方法

我以贪吃蛇的工程为例
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第27张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第28张图片

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第29张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第30张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第31张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第32张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第33张图片
总结一下,在 MDK 编写的程序我只是把.c 文件修改好,而 touchgfx 的程序都没有去
动,这样就可以少了很多编译下载调试的时间,也方便移植到不同硬件平台上去。

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

贪吃蛇的程序其实是用 TouchGFX Designer 建的 PC 工程,调好后再移到 cubemx 创的MDK 工程中的。这里介绍下如何移植他人的 touchgfx 工程到自己创建的工程下的方法与注意事项。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第34张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第35张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第36张图片

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第37张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第38张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第39张图片

5 TouchGFX 工程移植到 RT-Thread

5.1 准备工作

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

5.2 新建 BSP

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第40张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第41张图片

5.3 修改工程模板

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第42张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第43张图片

5.4 拷贝 CubeMX 工程

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第44张图片

5.5 新建 board/port 文件夹

在这里插入图片描述
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第45张图片

5.6 创建操作系统接口文件

在这里插入图片描述
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第46张图片

5.7 新建 touchgfx_entry.cpp 文件

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第47张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第48张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第49张图片

5.8 编辑 board/KConfig

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第50张图片

5.9 编辑 board/SConscript

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第51张图片

5.10 创建 board/CubeMX_Config/SConscript

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第52张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第53张图片

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

将 /board/CubeMX_Config/Src/main.cpp 中的 SystemClock_Config 函数复制并替换
/board/board.c 中的同名函数。
修改/board/board.h 中的参数为实际值。

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第54张图片

5.12 修改链接文件

/board/linker_scripts/link.sct 修改如下。根据不同单片机的 flash 和 ram 大小进行正确
配置。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第55张图片

5.13 修改 main.h

Board/CubeMX_Config/Inc/main.h中,void Error_Handler(void)函数的定义与RT-Thread
中同名函数定义有冲突,做如下修改。
注意:在使用 CubeMX 修改配置并重新生成代码后,该文件需要重新修改。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第56张图片

5.14 配置 Menuconfig

RT-Thread Kernel -> Memory Management 进行如下配置。这两个配置会将 SDRAM 通
过 RT-Thread 管理起来,可动态分配 SDRAM 中的内存。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第57张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第58张图片

5.15 开启 TouchGFX

在 Hardware Dervers Config 中 开 启 TouchGFX 。 开 启 后 Onboard Peripheral
Dervers->Enable SDRAM 将自动开启。
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第59张图片

5.16 开启 QSPI

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第60张图片

5.17 生成工程

在 ENV 中通过 scons --target=mdk5 命令生成工程,并打开。编译下载即可正常运行。
注意:在 TouchGFX Designer 修改界面后,最好是重新生成一次工程。(增删了界面,
使用和修改了图片都会生成新文件或删除旧文件,这时候就需要重新生成工程,其他时
候不需要。为保险起见,建议修改了界面后重新生成一次。)
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第61张图片
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第62张图片

5.18 编译并下载运行

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植_第63张图片
注:如果编译报上百个错,里面有“_assert”,请把优化等级调成 L3。

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

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

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 液晶屏

你可能感兴趣的:(TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植)