|
此前一直是使用官方的探索板,在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中
四、效果
|
【STM32U3评测】使用INS5699 RTC模组
【评测汇总】STM32U3 系列开发板评测全汇总 | 吃透新品核心性能与实战场景
【stm32U3测评】FDCAN 满载性能实测
【STM32U3 评测】CAN FD测试与UDS OTA升级
【STM32U3 评测】基于 CAN 的 UDS OTA 不完全实现指南
【STM32U3评测】轻量级人脸检测部署。
【STM32U3 评测】FDCAN 性能极限与软硬件协同开发实测
【STM32U3评测】基于 HSP 的轻量级人脸检测部署
【STM32U3评测】低功耗模式功耗测量
【STM32U3评测】低功耗模式功耗测量
微信公众号
手机版