|
此前一直是使用官方的探索板,在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新系列超低功耗MCU — 近阈值设计开启最佳能耗新纪元
《STM32U3线上课程》学习笔记+FLASH存储器的核心特性
《STM32U3线上课程》学习笔记+更丰富的外设兼容和总线矩阵学习和总线矩阵学习
【NUCLEO-STM32U385RG开发板测评】02 基于Vscode搭建开发环境
近阈值技术引领者:STM32U3系列的能效与安全革新
经验分享 | 基于LL库实现STM32U5 LPTIM 功能的代码演示
【NUCLEO-STM32U385RG开发板测评】05 启用ThreadX
【NUCLEO-STM32U385RG开发板测评】04 低功耗测试
【STM32U3评测】5.U3中TrustZone的学习使用
【STM32U3评测】4.初步移植ThreadX
微信公众号
手机版