stm32 TouchGFX基础教程(二)移植TouchGFX

Touchgfx现在最新的版本是4.13,CubeMX是5.6,随着版本的迭代,CubeMX与Touchgfx集成度越来越高,用户入门成本也越来越低。Touchgfx可以在所有stm32芯片上运行,但是官方推荐的配置是带有图形专用加速器DMA2D的芯片,很多同学体验过官方炫酷的Demo,肯定激动不已,但是对于如何移植却不太明白。这节将介绍如何从零完整地移植Touchgfx
本教程使用的硬件平台:芯视界stm32f429 3.5寸开发板,欢迎大家光临我的淘宝店铺:芯视界touchgfx

硬件 参数
CPU STM32F429ZIT6
SDRAM IS42S16400J 64Mbit
external Flash 32Mbit
触控芯片 STMPE811QTR
屏幕 3.5寸 480×320

一、Cubemx图形配置
1、选择stm32f429zit6芯片,在RCC中置时钟为外部晶振,在SYS中打开串口调试:
stm32 TouchGFX基础教程(二)移植TouchGFX_第1张图片
2、因为Freertos推荐使用通用定时器为时钟源,所以我们设置定时器7为时钟源:
stm32 TouchGFX基础教程(二)移植TouchGFX_第2张图片
3、配置SDRAM控制器,SDRAM的参数可以先不用填:
stm32 TouchGFX基础教程(二)移植TouchGFX_第3张图片
3、触控芯片STMPE811QTR用到了I2C3和外部中断,所以开启I2C3,频率默认100K:
stm32 TouchGFX基础教程(二)移植TouchGFX_第4张图片
开启外部中断,配置引脚PG2为下降沿中断:
stm32 TouchGFX基础教程(二)移植TouchGFX_第5张图片
在NVIC里打开外部中断:
在这里插入图片描述

4、液晶屏幕使用的芯片是ILI9488,这款芯片在使用前需要初始化寄存器参数,用到了SPI通讯协议,但是这块板子上的屏幕引脚没有引出命令/数据选择的引脚,而是通过控制片选CS引脚和数据引脚DI的电平来切换,所以我们采用IO口模拟SPI的方式,配置IO引脚如下:
stm32 TouchGFX基础教程(二)移植TouchGFX_第6张图片
LCD_BL用来控制屏幕背光
LCD_CS屏幕片选信号,主要是初始化的时候会使用

5、开启DMA2D,颜色模式选RGB565,其余参数默认不变:
stm32 TouchGFX基础教程(二)移植TouchGFX_第7张图片
另外,DMA2D的中断也要开启,Touchgfx内部用此中断协调缓存与LTDC的工作顺序,不开启图像会卡死:
在这里插入图片描述
6、开启LTDC,选择RGB666或RGB565都是可以的,显示设置参数按照ILI9488手册来,:
stm32 TouchGFX基础教程(二)移植TouchGFX_第8张图片
Layer参数设置,只使用一层:
stm32 TouchGFX基础教程(二)移植TouchGFX_第9张图片
Color Frame Buffer Start Address填0xd0000000,是SDRAM映射的起始地址,STM32F429的内存空间映射图可在数据手册上查到。
LTDC的全局中断需要打开,Touchgfx用中断信号来判断每一帧刷新是否完成:
stm32 TouchGFX基础教程(二)移植TouchGFX_第10张图片

7、开启CRC,这是Freertos要求的:
stm32 TouchGFX基础教程(二)移植TouchGFX_第11张图片
8、开启freertos,两个版本都可以,这里我用的V1,并把堆栈调大一些,太小程序可能运行可能不正常:
stm32 TouchGFX基础教程(二)移植TouchGFX_第12张图片
9、点击Additional Software,开启Touchgfx:stm32 TouchGFX基础教程(二)移植TouchGFX_第13张图片stm32 TouchGFX基础教程(二)移植TouchGFX_第14张图片
然后配置Touchgfx:
stm32 TouchGFX基础教程(二)移植TouchGFX_第15张图片
这里使用了双缓存,第一帧的地址设置为SDRAM的起始地址即可,第二帧的起始地址与第一帧之间的字节数大于一帧所需的内存就行。注意:如果动画频率高,只开启单缓冲画面可能会撕裂或者闪烁。
10、配置时钟树,LTDC的时钟频率可以自己试试,只要屏幕能正常显示就行,这里我们选的16M:
stm32 TouchGFX基础教程(二)移植TouchGFX_第16张图片
11、填写工程名字,生成代码:
stm32 TouchGFX基础教程(二)移植TouchGFX_第17张图片
CubeMX配置部分到这里就结束了,接下来就是Touchgfx Designer和keil MDK的事了。
二、
1、在生成的工程文件夹的子文件夹Src里找到ApplicationTemplate.touchgfx.part用Touchgfx designer打开,选择空模板:
stm32 TouchGFX基础教程(二)移植TouchGFX_第18张图片
2、随便添加几个控件到屏幕上,这里我们添加了一个box填充成黄色作为背景,和一个Toggle Button,最后点击生成代码:
stm32 TouchGFX基础教程(二)移植TouchGFX_第19张图片
先生成代码是因为MDK编译的时候会用到生成的源代码,否则编译会报错。
三、驱动移植
1、在MDK-ARM文件夹中打开MDK工程文件:
stm32 TouchGFX基础教程(二)移植TouchGFX_第20张图片
可以看到所有配置的硬件都初始化完成了,但是需要添加3个东西:(1)SDRAM芯片初始化代码,以前的Cubemx版本会自动生成,但是现在的版本取消了这部分内容,所以要手动实现,具体可以参考STM32CbueMX之SDRAM。(2)ILI9488液晶屏初始化,ILI9488芯片是需要先初始化内部寄存器才能正常工作的,比如配置工作模式、颜色格式、前后肩等,初始化参数不对会出很多奇怪的问题。(3)触摸屏与TouchGFX的接口函数需要我们手动实现。
SDRAM和液晶屏初始化代码都直接提供了,添加进项目并调用即可:
stm32 TouchGFX基础教程(二)移植TouchGFX_第21张图片
stm32 TouchGFX基础教程(二)移植TouchGFX_第22张图片
2、在freertos的任务调用touchgfx处理函数:
stm32 TouchGFX基础教程(二)移植TouchGFX_第23张图片
3、触摸屏与Touchgfx的接口函数在STM32TouchController.cpp里面,一共有两个:init()和sampleTouch(int32_t& x, int32_t& y),init()会被自动调用进行初始化,与触摸屏相关的初始化代码都可以放在这里面;sampleTouc()默认以60Hz频率对触控进行采样,我们只需要喂给它坐标值就行了。每一款触摸芯片的初始化程序和获取坐标的程序都不同,需要根据实际情况编写代码,这里我用的是STMPE811QTR,驱动文件也是提供了的,触控也校正完了。两个接口函数实现如下:stm32 TouchGFX基础教程(二)移植TouchGFX_第24张图片
4、编译下载到开发板:

根据上面的步骤可以建立一个工程模板,不用每次都这么麻烦的从头配置所有硬件和修改代码,模板
工程下载地址在我的铺子里面,欢迎有需求的同学下载。

-------------------------------下面是我的小广告----------------------------------------------
在这里插入图片描述
淘宝小店:芯视界touchgfx

你可能感兴趣的:(stm32,touchgfx)