这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【分享开发笔记,赚取电动螺丝刀】ST7789运行lvgl颜色不对的调试记录

共2条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】ST7789运行lvgl颜色不对的调试记录

工程师
2025-03-09 08:46:44     打赏

【前言】

这几天我在开STM32F769的GUI显示,前面我分享了st7789的驱动、优化、lvgl的移植、GT911的驱动移植等内容。昨天我用LVGL设计工具设计好界面后,跑起来时,发现颜色不对。经过多次偿试,最终把颜色给调对了,现在记录并分享如下。

【事因缘起】

1、我使用Gui_Guider设计好界面原图:

dd5a4467fe63c6d93ff9ead6c8777b1.png

我上传到开发板后实际的效果:

3449ebae85e44e6719a7b9d138453c6.jpg

很明显颜色对不上号。

【问题排查】

1、我首先去查找了一下lvgl像素点的结构体,我使用的是16bit颜色,lvgl的颜结构体如下:

typedef union {
    struct {
#if LV_COLOR_16_SWAP == 0
        uint16_t blue : 5;
        uint16_t green : 6;
        uint16_t red : 5;
#else
        uint16_t green_h : 3;
        uint16_t red : 5;
        uint16_t blue : 5;
        uint16_t green_l : 3;
#endif
    } ch;
    uint16_t full;
} lv_color16_t;

我使用spi数据传输为16bit发送,那么我发送的就应该是BGR格式。

我首先偿试使用 LV_COLOR_SWAP=1,交换一下格式,虽然从色值上看是行不通的,也只是试一下,修改后,发现显示不正常。

3e9d193e562fa2e220eb2572b326ea2.jpg

2、于是开始找资料,查找st7789的颜色通道值,首先想到的是修改0x3A寄存器的值,原来我的驱动的值 为0x65,开始找到的资料是修改为0x08,不对,后面修改为0x68也不对。经过好多次的偿试都是失败的。

【解放方法】

最后我找出了卖屏商家给出的GD32的驱动,我找到他lcd_int的函数,全部修改成他的参数。下载后,一切正常了。

300487bd5886640c112dfb9e9461955.jpg

【问题分析】

我使用文件对比工具对前后面的两个驱动文件进行了对比,发现主要有几个参数不一样:

image.png

经过分析,最后定位到了0x3A的寄存器上面的不同。在st7789对这个寄存器的介绍中,有如下介绍:

1. 0x3A 寄存器(接口像素格式设置) 功能:设置显示颜色深度和数据格式。 常见值: 0x05:16 位 RGB565 格式(R:5 位,G:6 位,B:5 位)。 0x55:16 位 RGB565 格式(大端模式)。 0x66:18 位 RGB666 格式(每个颜色分量 6 位)。 作用:决定屏幕如何解析输入的颜色数据,确保与 MCU 输出格式匹配。

同时我也找到的一份st7789的数据手册,他对0x3A的介绍如下:

image.png

由于我是使用spi_dma 16bit一次性写入屏中的,所以,颜色的高位先传入,因此需要把0x3A置为0x55。

【总结】

通过这次的问题查找,驱动一块屏,所需要的基础知识还是非常多的。在我们使用spi写入数据时,需要所要根据颜色的格式进行组装。在自定颜格式是,需要考虑到数据传输的方式。

最起先我是想把颜色格从565拆开,再进行组装发送进行测试的,但是那样的效率会下降很多,对cpu的资源占用过大,而且还需要占用大内存进行文件缓存。

总之,这次对lvgl的颜色不一致的问题的查找,原因分析以及最后解决问题,并进行了原因分析,使得我对st7789的驱动又提高到了一个新的高度。




关键词: ST7789     颜色     spi数据传输     RGB565    

专家
2025-03-09 17:08:26     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]