展锐UIS8850 外接LCD屏 ST7735S 驱动

1. 首先配置全局的 target  

CONFIG_LCD_SUPPORT=y
CONFIG_SUPPORT_LCD_GC9305=n
CONFIG_SUPPORT_LCD_GC9306=n
CONFIG_SUPPORT_LCD_ST7735S=y

这里遇到一个问题,如果同时出现了下面两行,对同一个配置开关,最后结果是未设置

CONFIG_SUPPORT_LCD_ST7789h2=y

# CONFIG_SUPPORT_LCD_ST7789h2 is not set

 

2. 代码中有两套LCD 的驱动,用的 V2版本,增加一个 st7735s 的驱动,从st7789h2 拷贝一份即可

 

3.  在这份文件中修改,注意选8位EGB565, 4线SPI,方向选正常,宽度高度等

复制代码
const drvLcdPanelDesc_t gLcdSt7735SDesc = {
    .ops = {
        .probe = prvSt7735SProbe,
        .init = prvSt7735SInit,
        .blit_prepare = prvSt7735SBlitPrepare,
    },
    .name = "St7735S",
    .dev_id = 0x858552,
    .reset_us = 20 * 1000,
    .init_delay_us = 100 * 1000,
    .width = 128,
    .height = 160,
    .out_fmt = DRV_LCD_OUT_FMT_8BIT_RGB565,
    .dir = DRV_LCD_DIR_NORMAL,
    .line_mode = DRV_LCD_SPI_4WIRE,
#ifdef CONFIG_8850_FPGA_BOARD
    .fmark_enabled = false,
#else
    .fmark_enabled = true,
#endif
    .fmark_delay = 0x18000,
#ifdef CONFIG_8850_FPGA_BOARD
    .freq = 10 * 1000000,
    .frame_us = (unsigned)(11200000 / 28.0),
#else
    .freq = 50 * 1000000,
    .frame_us = (unsigned)(1000000 / 28.0),
#endif
};
复制代码

 

4. 去掉读ID 的过程

复制代码
static bool prvSt7735SProbe(void *d)
{
    const drvLcdPanelDesc_t *desc = drvLcdGetDesc(d);

    OSI_LOGI(0x100089ce, "St7735S probe");
    //qhq  ID值直接返回1, 屏不用读取ID
    //return prvSt7735SReadId(d) == desc->dev_id;
    prvSt7735SReadId(d);
    return true;
    //qhq
}
复制代码

 

5.  panel_desc.c  里面添加 st7735s 的句柄

 

6. 上层应用

复制代码
void atCmdHandleLLCD(atCommand_t *cmd)
{
    static drvLcd_t *gLcd;

        uint8_t command = 1; 
        drvLcdInitV2();
        gLcd = drvLcdGetByname(DRV_NAME_LCD1);
        if (gLcd == NULL)
        {
        }
        if (!drvLcdOpenV2(gLcd))
        {
        }
        drvLcdPanelInfo_t panel_info;
        if (!drvLcdGetPanelInfo(gLcd, &panel_info))
        {
        }
        drvLcdSetBackLightEnable(gLcd, true);
        if(command == 1)
        {
            drvLcdFill(gLcd, 0xf800, NULL, false); // 红色
        }
        else if(command == 2)
        {
            drvLcdFill(gLcd, 0x07e0, NULL, false); // 绿色
        }
        else
        {
            drvLcdFill(gLcd, 0x01f, NULL, false); // 蓝色
        }
}
复制代码

 

7.  硬件接法,实际测试不接CS,原因未知

 

8. 测试效果

 

 

9.  总结,8位 RGB565  和 16位 RGB565 不一样,要注意,CS引脚不要接,接上有奇怪的问题。接下来的工作是移植 Little VGL.

posted @   429512065  阅读(976)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-05-25 64位 长整形赋值给 8位char 类型出现的问题
2021-05-25 开源语音代码eSpeak1.06 的学习入门
点击右上角即可分享
微信分享提示