配置请参考链接:TouchGFX超低配置移植教程-CSDN博客
一,显示配置
1.适当增加堆栈大小
2.适当增大缓冲大小
双重缓冲消除了任何撕裂的风险,无论渲染下一帧需要多长时间,因为TfT控制器,例如,总是可以访问最新的完整帧数据。单个缓冲可以消除对外部存储器的需求(可能会发生撕裂)。部分缓冲消除了对外部内存的需求,同时仍然允许将大部分内部内存用于framebuffer之外的事情。
如果“Number of Blocks”设置为1,这意味着TouchGFX将只分配一个内存块用于帧缓冲区。这通常适用于简单的图形界面或显示需求不高的应用场景。在这种情况下,TouchGFX将使用一个单缓冲区方案来更新和显示图形数据。
然而,如果图形界面较为复杂或需要更高的刷新率,可能需要使用双缓冲或多缓冲方案来减少屏幕撕裂和闪烁现象。在这种情况下,“Number of Blocks”参数的值将相应增加,以允许TouchGFX分配更多的内存块用于帧缓冲区。
二,硬件配置
1.开启I2C1用于连接触摸芯片,(PB6,PB7)
2.开启SPI1(Transmit Only Master)用于LCD 串行数据传输,(PB3,PB5),开启DMA
开启SPI中断用于屏幕刷新完成时调用函数
3.开启QSPI 4线模式用于读写W25Q64
4.开启tim6 定时器为TouchGFX提供时钟源
三,C/C++ 基础示例
1.在cpp文件中的c函数外部函数声明:
extern "C" int touchgfxDisplayDriverTransmitActive();
2.在c文件中的cpp函数外部函数声明:
extern void touchgfxTickHandler(void);//也可以省略extern
3.使cpp文件中的函数兼容c文件使用:
extern "C"
void DisplayDriver_TransferCompleteCallback()
{PartialFrameBufferManager::tryTransmitBlockFromIRQ();
}
四,无外扩flash代码移植:
TGFX SPI左侧为原始代码,右侧为用户代码。无外部flash移植,仅提供思路:
1,点击TouchGFXGeneratedHAL.cpp,其位于Application/User/ TouchGFX/target/generated一栏中,在该点cpp文件的开头就可以看到四个函数声明,前三个都是需要用户自己提供。
2,除了上述三个函数,还需要注意一个函数DisplayDriver_TransferCompleteCallback,用户需要在屏幕刷新完成时调用该函数。
3,TouchGFX正常工作的前提条件是需要一个外部的时钟源,由于本例程使用的屏为SPI屏,STM32CubeMX中配置的时钟源选项默认为Custom,即需要用户自己为TouchGFX提供时钟源