
此前一直是使用官方的探索板,在TouchGFX有完整驱动,开发起来非常方便。这次我来学习Nucleo板与个人SPI屏组合下如何移植TouchGFX。 一、建立工程1、设置SPI参数在移植TouchGFX前要测试自己的屏能支持多高的SPI传输速率,并尽量速度设置高些。我的屏只能到24Mbits/s。当然还可以通过细调时钟,进一步提高传输速度。 2、配置TouchGFX在Middleware and Software Packs中选择X-CUBE-TOUCHGFX 根据屏和屏驱动数据手册,设置屏参数 TouchGFX还需要CRC支持,把它也激活,默认配置就行了。 3、心跳时钟设置每帧至少需要传输位数:320(宽) x 240(高) x 16(bits) = 1228800bits 每帧需要传输时间:1228800 / 24(Mbit/s) = 0.0512秒 这要求心跳时钟不能小于0.0512秒,这屏也太......省略了3w字的粗言秽语。 心跳时钟:Prescaler 设 96 - 1,Period 设 60000 -1,在96MHz时钟下,60ms中断一次(>0.0512秒) 设置时钟中断,后可以生成代码了。 二、使用TouchGFX Designer生成代码后,工程目录下出现一个TouchGFX目录, 打开TouchGFX Designer,打开此目录下的.TouchGFX文件,可以使用TouchGFX图像配置界面 因为屏幕支持RGB565格式,我载入图片,并把图片设置为RGB565格式 界面和控件设置后,按F4键或右下角</>图标生成代码。 三、代码配置1、TouchGFX与屏幕驱动对接在TouchGFXHAL.hpp引用屏幕驱动头文件(st7789.h)及touchgfx/hal/OSWrappers.hpp 因为TouchGFXHAL.hpp是使用C++,而驱动是使用C语言,为能混合编译,需要使用预处理指令指定st7789.h使用C语言编译。
在TouchGFXHAL.cpp文件中 void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)函数写入
其中:void LCD7789_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t *img); 因为16bit数据在SPI传输顺序与图片存储不一致,需要调整LCD7789_DrawImage函数 在st7789.c中
2、心跳实现在TouchGFXHAL.cpp文件中最后建立心跳函数
在main.c文件主函数main(),中设置阶段加入初始化LCD及启动TIM6中断代码
编写TIM6中断回调函数,每次中断,执行一次TouchGFX心跳,回调函数我习惯放在tim.c中
四、效果 |
【NUCLEO-STM32U385RG开发板测评】04 低功耗测试
【STM32U3评测】5.U3中TrustZone的学习使用
【STM32U3评测】4.初步移植ThreadX
【STM32U3评测】+建立不同模式(睡眠/停止/关机)的功耗模型
【STM32U3评测】+利用内部SMPS实现低功耗GPIO控制
【NUCLEO-STM32U385RG开发板测评】03 与PC实现shell的交互
【STM32U3评测】SPIDMA接收功能读取SPI FLASH数据
【STM32U3评测】3、驱动SPI LCD屏
【STM32U3评测】2、双串口通信
【STM32U3评测】1、开箱,SMPS模式下点灯