初试 TouchGFX
1.总览
1.1 学习 TouchGFX 的原因
一开始我们学习过接在开发板之上的 LCD 屏幕,使用起来比较方便,用于调试非常合适,不过想做一些比较美观的困难(没有更深入学习图形库,因为电赛时间比较紧,学习的必要性比较低)
之后我们接触到了串口屏,串口屏开发简单,控件全面,学习成本比较低,非常适合当时我们时间比较紧的情况下学习。
但是串口屏的界面比较局限,被限制得很死,很难做出动画效果。所以在时间充裕的情况下我想尝试尝试 TouchGFX
初衷:想要借助 TouchGFX 做出更好的界面效果,要让开发更加舒畅!
1.2 涉及到的内容的参考
1.3 开发环境
STM32CubeIDE : 1.7.0
STM32Cube_FW_H7 : 1.9.0
X-CUBE-TOUCHGFX : 4.17.0
TouchGFX Designer : 4.18.0
2. BSP 的驱动
买了一块非常轻量的 H7 板子,封装十分不错
型号:STM32H732IIT6
2.1 RCC
首先先配置外部时钟.
2.2 Cache & MPU
H7 相比 F4,最核心的差别就是增加了 I&D Cache,掌握好能极大加速读写速度.
2.3 LED
作为嵌入式开发可少不了点灯.
2.4 DEBUG
设置 DEBUG 为 串行 模式.
2.5 USART
设置一个用于调试用的串口.
2.6 QSPI
外部 FLASH,芯片型号为 W25Q64,有 8M byte 的空间,驱动后可挂载到总线上,直接通过地址访问,用于之后储存较大的图片或者文字使用.(在引脚配置的界面,配置配置好 QSPI 对应的引脚后一点一点要右键 PIN(锁定)一下引脚,后面配置也是一样,不然可能会出现引脚莫名转移到其他位置的情况!)
2.7 SDRAM
外部 SDRAM,芯片类型为 W9825G6-6I,有 32M byte 的空间,用于之后作为显存使用。当然也可以用来“空间换时间”.
2.8 LDTC
通过 LDTC 配置 RGB接口.
这里还是推荐使用 RGB555,帧数更高,而且相较 RGB888 颜色差别也不太大.
RGB接口支持 RGB888,由此出多的建议也配置上,防止以后误用.
**重要:**配置 LDTC 的全局中断,因为 TouchGFX 的刷新依赖于 LDTC 的中断,所以这里必须要开启.
最后还有一个背光控制的引脚需配置.
2.9 DMA2D
2.10 触摸芯片的驱动
触摸芯片通过 IIC 来与 MCU 通信,这里使用 GPIO 模拟 IIC 的方法来实现通讯。
2.11 时钟树
2.12 项目配置
2.13 相关驱动代码
2.13.1 QSPI
MX_QUADSPI_Init() 执行后要进入内存映射模式
1 | /* USER CODE BEGIN QUADSPI_Init 2 */ |
2.13.2 SDRAM
MX_FMC_Init() 执行后有相关配置
1 | /* USER CODE BEGIN FMC_Init 2 */ |
2.13.3 LDTC
MX_LTDC_Init() 执行后打开消抖和背光
1 | /* USER CODE BEGIN LTDC_Init 2 */ |
3 TouchGFX
3.1 FreeRTOS
选择 FreeRTOS CMSIS_V2,并开启 FPU(先开着吧,也不知道会不会用上)
因为 TouchGFX 处理的函数将要执行在 defaultTask 任务上,而且需要较多堆栈空间,因此需要调整堆栈空间。
首先给 FreeRTOS 分配 256K byte 空间,再设置defaultTask 堆栈为 4096
Cube不推荐直接用滴答定时器作为系统时钟,所以这里我用基础定时器TIM7作为系统时钟
3.2 CRC
开启 CRC
3.3 TouchGFX
首先要安装 Cube 的 TouchGFX 工具包(用于代码生成)
再配置 TouchGFX
配置完成后就可以生成代码了!
3.4 忽略 TouchGFX 的 video 组件
Cube使用的是 4.17 的版本,而TouchGFX 使用的是 4.18的版本,编译的时候会出现以下报错。
可配置项目忽略此文件
3.5 生成 TouchGFX 代码
打开 TouchGFX 文件夹下的 ApplicationTemplate.touchgfx.part, 创建一个 Demo 例程。
然后点击 </> 生成代码
3.6 添加 TouchGFX 处理任务
在 Src/freertos.c 文件下添加头文件
1 | /* USER CODE BEGIN Includes */ |
并在 StartDefaultTask 函数添加对应内容
1 | void StartDefaultTask(void *argument) |
3.7 添加 触摸扫描 到TouchGFX
打开 TouchGFX/target/STM32TouchController.cpp 文件,添加触摸芯片初始化和扫描.
1 | /* USER CODE BEGIN STM32TouchController */ |
添加完成后再上机烧录,实测没有问题,非常丝滑!
4.总结
这次由商家给的例程移植到用 CubeIDE 开发,花了不少功夫,走了不少弯路(驱动不出来是真滴难受),但是我也接触到了 RTOS 已经 图形库 的内容,视野开扩了不少。
下一步需要学习的方向:
- FreeRTOS 内核
- TouchGFX 常用组件的使用