如何使用TouchGFX助力STM32+SPI屏显示

关键字 :STTouchGFXSPILCD

在小分辨率显示屏的方案应用上,STM32G0系列是一个性价比很高的选择。这些小分辨率的LCD屏有些需要通过SPI进行驱动,那么在TouchGFX生成的工程代码中,我们如何添加SPI的驱动呢,以便我们可以通过TouchGFX来快速进行产品开发设计。

首先要通过STM32CUBEMX进行相应配置,要确保SPI的驱动配置,其它部分如CRC和触摸等也可以进行配置,TouchGFX主要配置Iterface为Custom、Application Tick Source为Custom,其它的选项根据自己的实际情况配置。



这里配置的是RGB565显示、屏幕像素240*320、单缓存帧、存储位置自动分配、图形加速器DMA2D、没有配置实时操作系统。

在配置好的生成代码中打开TouchGFXHAL.cpp文件



在TouchGFXHAL.cpp文件中找到TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect&rect)函数




在函数中添加SPI设置显示窗口代码、SPI准备发送数据代码和SPI发送LCD显示代码,如下图(注:需结合自己实际的SPI驱动代码写)



因为TouchGFX生成的帧数据是16位的,图中SPI配置的是8位的,所以需要在发送数据给屏幕前把SPI配置为16位发送的,发送完后再配置回8位。这样就把TouchGFX与SPI屏连接起来了,但是还不能显示,需要再给个帧刷新信号,如下图示例的函数,放在TouchGFXHAL.cpp文件最后面即可。





然后在主循环或定时中断里每16ms(约60HZ)调用一次touchgfx_signalVSyncTimer();帧刷新函数,建议放定时中断里。如果对撕裂有要求的,可以利用TE脚来做外部中断,同步刷新帧信号,到这里基本就可以正常显示了。

 

最后,对于没有使用DMA传输数据的,还有个地方需要注意,打开TouchGFXGeneratedHAL.cpp文件,找到TouchGFXGeneratedHAL::initialize()函数,把函数中的DMA发送锁定关掉。





更多的具体信息可以参考官方的教程:https://support.touchgfx.com/zh-CN/docs/development/touchgfx-hal-development/scenarios/scenarios-fmc#touchgfx-driver--tearing-effect-signal

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论