基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程
Posted 小灰灰搞电子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于正点原子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
函数
四、完整工程下载
完整工程点击我下载
正点原子4.3寸屏
参考技术A 正点原子4.3寸或7存的都是电容感应式触摸屏,电容触摸屏一般都需要一个驱动 IC 来检测电容触摸,且一般通过 IIC 接口输出触摸数据的。常见的两种电容触摸屏驱动 IC :
①GT9147:采用17*10的驱动结构(10个感应通道,17个驱动通道)。
②OTT2001A:采用13*8的驱动结构(8个感应通道,13个驱动通道)。
它们与MCU连接通过4根线:SDA、SCL、RST和INT。现在我用的4.3寸屏的驱动IC是GT9147。
基于正点原子stm32f407的触摸屏实验裁剪,在文件touch.h中把结构体_m_tp_dev的//void (*adjust)(void); //触摸屏校准注释掉。并只保留这几个函数,其他函数删掉。如下图:
其实触摸驱动只是lcd.c、ctiic.c、gt9147.c和touch.c这四个硬件有关的文件就可以了。
以上是关于基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程的主要内容,如果未能解决你的问题,请参考以下文章
正点原子探索者STM32F407开发板/战舰STm32开发板/miniSTM32开发板资料下载