|
此前一直是使用官方的探索板,在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 评测】2.U3C5开启FPU测试FFT
【STM32U3 评测】CAN报文接收及过滤
【STM32U3 评测】CAN基本通讯测试
【STM32U3 评测】1. FDCAN高速通讯验证
【STM32U3 评测】步进电机驱动
【STM32U3 评测】MNIST 数字识别
【STM32U3 评测】介绍、环境搭建、工程测试
HSP加持STM32U3:13倍性能跃升,超低功耗MCU的算力革命
STM32U3B5/U3C5 深度选型指南:超低功耗 + 边缘 AI 双强,下一代智能终端首选
STM32U3再添新成员,强大的HSP硬件信号处理器赋能DSP和边缘AI(文末抽奖)
微信公众号
手机版