欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

程序员文章站 2022-04-01 16:48:43
...

目录

一、移植环境

二、应用框架

三、TouchGFX移植

1、步骤

2、所需组件

3、STM3CubeMX配置

(1)配置RCC系统时钟

(2)配置SYS

(3)配置FMC(SDRAM)

(4)配置DMA2D,打开DMA2D中断

(5)配置LTDC,打开LTDC中断

(6)开启CRC

(7)配置freeRTOS,创建2个任务

(8)配置TouchGFX

(9)生成工程

4、执行TouchGFX Designer

(1)TouchGFX Designer界面

(2)添加GUI应用

(3)生成代码

5、触摸驱动移植


一、移植环境

硬件:

  • STM32F429IGT6,1MB FLASH,256KB SRAM
  • 800x480 7寸的RGB液晶屏
  • 外扩256MB的SDRAM(MT48LC16M16A2)
  • 触摸屏,驱动芯片为I2C接口的TSC2046

软件:

  • STM32CubeMX 6.0.1
  • TouchGFX Designer 4.14.0
  • IAR 8.11.2

说明:

STM32CubeMX 5.0至5.4的版本(含5.4) 跟 STM32CubeMX 5.4之后的版本对TouchGFX 的支持方式不太一样,生成的工程目录结构也不一样。不能混用!!!

在STM32CubeMX 5.0至5.4的版本中,是在中间件中选择GRAPHICS组件来配置TouchGFX的,还可以在CubeMX中直接打开TouchGFX Designer来设计UI部分

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

在STM32CubeMX 5.0之后的版本中,是通过添加第三方软件包的形式来配置TouchGFX,中间件中不再有GRAPHICS组件,也不可以直接在CubeMX中代开TouchGFX Designer了

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

二、应用框架

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

三、TouchGFX移植

有两种方式可以创建出TouchGFX的工程。这里使用的是第一种

  1. 根据目标板卡,使用STM32CubeMX从零开始创建
  2. 使用Touch Designer提供的模板,快速构建出一个跟目标板卡相似的Demo工程

1、步骤

STM32CubeMX 覆盖了红色框中部分

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

2、所需组件

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

3、STM3CubeMX配置

(1)配置RCC系统时钟

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

像素时钟大小:1056 * 705 * 60/1024/1024=42M,像素时钟最大值为42M,我这里设置为25M

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(2)配置SYS

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(3)配置FMC(SDRAM)

一定要注意配置的GPIO要跟自己的硬件要一致!!!因为SDRAM有的引脚可以在多个GPIO上复用。还有就是生成的工程中有没有SDRAM的初始化程序

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(4)配置DMA2D,打开DMA2D中断

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(5)配置LTDC,打开LTDC中断

一定要注意配置的GPIO要跟自己的硬件要一致!!!

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(6)开启CRC

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(7)配置freeRTOS,创建2个任务

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

GUITask用于TouchGFX的处理

void StartGUITask(void const * argument)
{
	/* USER CODE BEGIN StartGUITask */
	MX_TouchGFX_Process();
	/* Infinite loop */
	for(;;)
	{
		osDelay(1000);
	}
	/* USER CODE END StartGUITask */
}

LEDTask用于心跳灯的闪烁

void StartLEDTask(void const * argument)
{
	/* USER CODE BEGIN StartLEDTask */
	/* Infinite loop */
	for(;;)
	{
		HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
		osDelay(1000);
	}
	/* USER CODE END StartLEDTask */
}

(8)配置TouchGFX

打开TouchGFX软件包

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

配置TouchGFX

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(9)生成工程

使用CubeMX生成工程后,先不要打开IAR工程,还需要执行Touch Designer来设计UI部分,完善工程

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

4、执行TouchGFX Designer

使用CubeMX配置只是完成了红框中的部分,接下来就使用TouchGFX Designer来完善工程

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

生成工程后,在Src目录下有个 ApplicationTemplate.touchgfx.part,点击这个链接就可以打开TouchGFX Designer

(1)TouchGFX Designer界面

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(2)添加GUI应用

第一步:创建screen1,放置一个Box控件和Button控件,设置Box的坐标为(0,0)大小为800x480,设置Button的坐标和按下释放时的背景图片,图片可以从阿里巴巴矢量图标库下载,然后放到…\Src\assets\images目录下;添加Interaction,实现通过点击按钮切换到screen2的功能

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

第二步:创建screen2,步骤跟第一步类似,只是多了7个Line控件用来显示7中颜色,同样点击按钮可以切换到screen3

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

第三步:创建screen3,主要添加了Animated Image控件,用于动态的定时切换图片,点击按钮又回到screen1

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

(3)生成代码

点击Generate Code就可以生成代码了,此时再用IAR打开工程,TouchGFX相关的代码就会自动添加进工程中了;同时在Src目录下也会多出一个”xxxx.touchgfx“的文件,以后直接打开这个文件就可以继续使用TouchGFX Designer设计UI了

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)

5、触摸驱动移植

在完成以上配置后,LCD液晶屏就可以点亮了,但是触摸屏还不能使用,还需要添加触摸驱动;触摸驱动的添加也比较简单,首先根据自己板卡的触摸芯片添加驱动代码,然后完善 STM32TouchController.cpp 中的两个函数就可以了

TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)