基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程(一)

一、相关软件包安装

1、打开cubemx包管理器

在这里插入图片描述

2、安装F4软件包

在这里插入图片描述

3、安装touchgfx软件包

在这里插入图片描述

二、工程配置

1、新建工程

在这里插入图片描述

2、sys配置

在这里插入图片描述

3、rcc配置

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

4、crc配置

在这里插入图片描述

5、添加touchgfx软件包

在这里插入图片描述

在这里插入图片描述

6、配置touchgfx软件包

在这里插入图片描述
将width和height改为自己屏幕尺寸

7、生成工程

在这里插入图片描述

三、代码修改

1、将屏幕相关驱动加载到工程

在这里插入图片描述

2、修改头文件支持c++

在头文件中加入

#ifdef __cplusplus
extern "C" {
    
    
#endif
	
,,,,,,

#ifdef __cplusplus
}
#endif

在这里插入图片描述

3、修改touchgfx源码

a、修改TouchGFXHAL.cpp文件中的void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)函数,将数据刷新到屏幕

void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
{
    
    
		volatile uint16_t* buffer = getClientFrameBuffer()+(rect.y*DISPLAY_WIDTH)+rect.x;
    uint16_t height,i;
		
		LCD_Address_Set(rect.x,rect.y,rect.x+rect.width-1,rect.y+rect.height-1);
    
		LCD_WR = 1;
    for(height=0;height<rect.height;height++)
    {
    
    
			for(i=0;i<rect.width;i++)
			{
    
    
				//LCD_Write_HalfWord(buffer[i]);
				SPI1->DR = buffer[i]>>8;	 	  		
				while((SPI1->SR&1<<1)==0);
				SPI1->DR = (u8)buffer[i];	 	  		
				while((SPI1->SR&1<<1)==0);
			}
			
			buffer += DISPLAY_WIDTH;
    }
	
}

在这里插入图片描述

a、修改TouchGFXHAL.cpp文件中的新添加touchgfxTickHandler函数,为touchgfx提供时钟。在1ms定时器中调用。提供的时钟为20ms,屏幕刷新为50hz。

extern "C" void touchgfxTickHandler()
{
    
    
	static uint8_t ms = 0;
	static uint8_t isHigh = 0;
	
	if(isInited)
	{
    
    
		ms++;
		if(ms==10)
		{
    
    
			ms = 0;
			isHigh = !isHigh;
			if(isHigh)
			{
    
    
				HAL::getInstance()->vSync();
				OSWrappers::signalVSync();
				HAL::getInstance()->swapFrameBuffers();
			}else
			{
    
    
				HAL::getInstance()->frontPorchEntered();
			}	
		}
	}
}

在这里插入图片描述

c、在1ms的定时器中调用touchgfxTickHandler函数

在这里插入图片描述
四、完整工程下载
完整工程点击我下载

猜你喜欢

转载自blog.csdn.net/qq_15181569/article/details/129830406