请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8652|回复: 13
收起左侧

ST7796液晶屏调试(RGB16bit接口),请大家帮帮忙

  [复制链接]

7

主题

31

回帖

52

积分

初级会员

积分
52
QQ
发表于 2019-4-25 14:45:21 | 显示全部楼层 |阅读模式
本帖最后由 lindada 于 2019-4-25 14:45 编辑

这一款液晶屏需要先用三线SPI配置后,才能通过RGB接口开始工作,我按照厂家给的寄存器配置表配置后,显示不出来,想大家帮帮忙。
因为SPI的MISO没有接出来,只能写入;三线的数据位为9位,第一位是指令和参数区分位。以下是配置程序:
void LCD_WRITE_PARA(unsigned char para)
{
        unsigned char i = 0;
        SDA_H;               //首位高电平为参数
        CS_L;

        SCL_L;
        SCL_H;
        
        for(i=0; i<8; i++)
        {
            if(para&0x80)  SDA_H;
           else  SDA_L;
           SCL_L;
           para <<= 1;
           SCL_H;               
        }
        CS_H;        
}
/* USER CODE END 0 */
void LCD_WRITE_CMD(unsigned char cmd)
{
       unsigned char i = 0;
        SDA_L;       //首位低电平为指令
        CS_L;

        SCL_L;
        SCL_H;
        
        for(i=0; i<8; i++)
        {
            if(cmd&0x80)  SDA_H;
            else SDA_L;
            SCL_L;
            cmd <<= 1;
            SCL_H;               
        }
        CS_H;
}

void lcd_init(void)
{
        RST_H;
        HAL_Delay(1); // Delayms 1ms
        RST_L;
        HAL_Delay(10); // Delayms 10ms // This Delayms time is necessary
        RST_H;
        HAL_Delay(120); // Delayms 100 ms

        HAL_Delay(120);//Delay120ms        
        CS_L;
        LCD_WRITE_CMD(0x11);  //Sleep Out
        HAL_Delay(120);  

        LCD_WRITE_CMD(0xf0);
        LCD_WRITE_PARA(0xc3);

        LCD_WRITE_CMD(0xf0);
        LCD_WRITE_PARA(0x96);

        LCD_WRITE_CMD(0x36);//MY/MX/MV/ML/RGB
        LCD_WRITE_PARA(0x48);

        LCD_WRITE_CMD(0xB4);
        LCD_WRITE_PARA(0x01);

        LCD_WRITE_CMD(0xB7);
        LCD_WRITE_PARA(0xC6);

        LCD_WRITE_CMD(0xe8);
        LCD_WRITE_PARA(0x40);
        LCD_WRITE_PARA(0x8a);
        LCD_WRITE_PARA(0x00);
        LCD_WRITE_PARA(0x00);
        LCD_WRITE_PARA(0x29);
        LCD_WRITE_PARA(0x19);
        LCD_WRITE_PARA(0xa5);
        LCD_WRITE_PARA(0x33);

        LCD_WRITE_CMD(0xc1);//GVDD set,微调可改善亮度
        LCD_WRITE_PARA(0x06);

        LCD_WRITE_CMD(0xc2);
        LCD_WRITE_PARA(0xa5);

        LCD_WRITE_CMD(0xc5);//Vcom set,微调改善flicker
        LCD_WRITE_PARA(0x25);

        LCD_WRITE_CMD(0xe0);
        LCD_WRITE_PARA(0xf0);
        LCD_WRITE_PARA(0x00);
        LCD_WRITE_PARA(0x03);
        LCD_WRITE_PARA(0x0b);
        LCD_WRITE_PARA(0x0c);
        LCD_WRITE_PARA(0x29);
        LCD_WRITE_PARA(0x2e);
        LCD_WRITE_PARA(0x44);
        LCD_WRITE_PARA(0x41);
        LCD_WRITE_PARA(0x17);
        LCD_WRITE_PARA(0x11);
        LCD_WRITE_PARA(0x13);
        LCD_WRITE_PARA(0x16);
        LCD_WRITE_PARA(0x1b);

        LCD_WRITE_CMD(0xe1);
        LCD_WRITE_PARA(0xf0);
        LCD_WRITE_PARA(0x00);
        LCD_WRITE_PARA(0x02);
        LCD_WRITE_PARA(0x06);
        LCD_WRITE_PARA(0x06);
        LCD_WRITE_PARA(0x24);
        LCD_WRITE_PARA(0x2a);
        LCD_WRITE_PARA(0x43);
        LCD_WRITE_PARA(0x3e);
        LCD_WRITE_PARA(0x2d);
        LCD_WRITE_PARA(0x1a);
        LCD_WRITE_PARA(0x16);
        LCD_WRITE_PARA(0x13);
        LCD_WRITE_PARA(0x17);

        LCD_WRITE_CMD(0x3a);
        LCD_WRITE_PARA(0x55);//0x55=65K,0x66=262K,0x77=16M

        LCD_WRITE_CMD(0xf0);
        LCD_WRITE_PARA(0x3c);

        LCD_WRITE_CMD(0xf0);
        LCD_WRITE_PARA(0x69);

        HAL_Delay(120);

        LCD_WRITE_CMD(0x29);  //Display On
        HAL_Delay(50);         
        CS_H;                                
               

        //lcd_wrCmd(0x2C);
        //lcd_wrCmd(0x21);      //Normal Black
}


#define WIDHT   480
#define HEIGHT  320
#define LCD_VBPD  2
#define LCD_VFPD  8
#define LCD_VSPW  5

#define LCD_HBPD  32
#define LCD_HFPD  32
#define LCD_HSPW  32
/* LTDC init function */
void LTDC_Init(void)
{
  hltdc.Instance = LTDC;
  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;
  hltdc.Init.HorizontalSync = LCD_HSPW-1;
  hltdc.Init.VerticalSync = LCD_VSPW-1;
  hltdc.Init.AccumulatedHBP = LCD_HSPW+LCD_HBPD-1;
  hltdc.Init.AccumulatedVBP = LCD_VSPW+LCD_VBPD-1;
  hltdc.Init.AccumulatedActiveW = WIDHT+LCD_HSPW+LCD_HBPD-1;
  hltdc.Init.AccumulatedActiveH = HEIGHT+LCD_VSPW+LCD_VBPD-1;
  hltdc.Init.TotalWidth = WIDHT+LCD_HSPW+LCD_HBPD+LCD_HFPD-1;
  hltdc.Init.TotalHeigh = HEIGHT+LCD_VSPW+LCD_VBPD+LCD_VFPD-1;
  hltdc.Init.Backcolor.Blue = 0;
  hltdc.Init.Backcolor.Green = 0;
  hltdc.Init.Backcolor.Red = 0;
  if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}大家帮忙看一下,可能是哪儿出的问题,谢谢!




QQ图片20190425143000.png

逻辑分析捕获的时序

逻辑分析捕获的时序

液晶显示的

液晶显示的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105914
QQ
发表于 2019-4-25 18:35:34 | 显示全部楼层
读ID是通过那个接口? SPI吗,是的话,先读ID,读ID正常的话,SPI接口就问题不大。
没有接接收线的话,可以飞线下
回复

使用道具 举报

7

主题

31

回帖

52

积分

初级会员

积分
52
QQ
 楼主| 发表于 2019-4-25 19:17:26 | 显示全部楼层
eric2013 发表于 2019-4-25 18:35
读ID是通过那个接口? SPI吗,是的话,先读ID,读ID正常的话,SPI接口就问题不大。
没有接接收线的话,可 ...

飞不了线,这个接口没有从液晶芯片里面引出来
回复

使用道具 举报

19

主题

63

回帖

120

积分

初级会员

积分
120
发表于 2019-7-24 10:03:01 | 显示全部楼层
lindada 发表于 2019-4-25 19:17
飞不了线,这个接口没有从液晶芯片里面引出来

搞定了吗
回复

使用道具 举报

19

主题

63

回帖

120

积分

初级会员

积分
120
发表于 2019-7-24 10:03:22 | 显示全部楼层
我也遇到过SPI+RGB的方式  搞定
回复

使用道具 举报

7

主题

31

回帖

52

积分

初级会员

积分
52
QQ
 楼主| 发表于 2019-7-25 16:54:11 | 显示全部楼层
wx_RHfK9tfE 发表于 2019-7-24 10:03
我也遇到过SPI+RGB的方式  搞定

搞定了,谢谢啦!
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2019-10-30 16:19:57 | 显示全部楼层
我也在驱动一款SPI+rgb的屏幕,楼主能提供下代码吗
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-11-30 00:36:43 | 显示全部楼层
void LCD_Writ_Bus(u8 dat)
{       
        u8 i;       
  OLED_CS_Clr();
        for(i=0;i<8;i++)
        {                          
                OLED_SCLK_Clr();
                if(dat&0x80)
                   OLED_SDIN_Set();
                else
                   OLED_SDIN_Clr();
                OLED_SCLK_Set();
                dat<<=1;   
        }
  OLED_CS_Set();       
}



void LCD_WR_DATA8(u8 dat)
{
        LCD_Writ_Bus(dat);
}


void LCD_WR_DATA(u16 dat)
{
        LCD_Writ_Bus(dat>>8);
        LCD_Writ_Bus(dat);
}



void LCD_WR_REG(u8 dat)
{
        OLED_DC_Clr();
        LCD_Writ_Bus(dat);
        OLED_DC_Set();
}

void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
        LCD_WR_REG(0x2a);
        LCD_WR_DATA(x1);
        LCD_WR_DATA(x2);
        LCD_WR_REG(0x2b);
        LCD_WR_DATA(y1);
        LCD_WR_DATA(y2);
        LCD_WR_REG(0x2c);
}



void Lcd_Init(void)
{
  OLED_SCLK_Set();
        OLED_RST_Clr();
        delay_ms(20);
        OLED_RST_Set();
        delay_ms(20);
        OLED_BLK_Set();//
       
//************* Start Initial Sequence **********//
        LCD_WR_REG(0X11);
        delay_ms(120);
        LCD_WR_REG(0Xf0);
        LCD_WR_DATA8(0xc3);
        LCD_WR_REG(0Xf0);
        LCD_WR_DATA8(0x96);
        LCD_WR_REG(0x36);    // Memory Access Control
        if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x48);
        else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0x88);
        else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x28);
        else LCD_WR_DATA8(0xE8);
        LCD_WR_REG(0X3a);
        LCD_WR_DATA8(0x05);
        LCD_WR_REG(0Xe6);
        LCD_WR_DATA8(0x0f);
        LCD_WR_DATA8(0xf2);
        LCD_WR_DATA8(0x3f);
        LCD_WR_DATA8(0x4f);
        LCD_WR_DATA8(0x4f);
        LCD_WR_DATA8(0x28);
        LCD_WR_DATA8(0x0e);
        LCD_WR_DATA8(0x00);
        LCD_WR_REG(0Xc5);
        LCD_WR_DATA8(0x2a);
        LCD_WR_REG(0Xe0);
        LCD_WR_DATA8(0xf0);
        LCD_WR_DATA8(0x03);
        LCD_WR_DATA8(0x0a);
        LCD_WR_DATA8(0x11);
        LCD_WR_DATA8(0x14);
        LCD_WR_DATA8(0x1c);
        LCD_WR_DATA8(0x3b);
        LCD_WR_DATA8(0x55);
        LCD_WR_DATA8(0x4a);
        LCD_WR_DATA8(0x0a);
        LCD_WR_DATA8(0x13);
        LCD_WR_DATA8(0x14);
        LCD_WR_DATA8(0x1c);
        LCD_WR_DATA8(0x1f);
        LCD_WR_REG(0Xe1);
        LCD_WR_DATA8(0xf0);
        LCD_WR_DATA8(0x03);
        LCD_WR_DATA8(0x0a);
        LCD_WR_DATA8(0x0c);
        LCD_WR_DATA8(0x0c);
        LCD_WR_DATA8(0x09);
        LCD_WR_DATA8(0x36);
        LCD_WR_DATA8(0x54);
        LCD_WR_DATA8(0x49);
        LCD_WR_DATA8(0x0f);
        LCD_WR_DATA8(0x1b);
        LCD_WR_DATA8(0x18);
        LCD_WR_DATA8(0x1b);
        LCD_WR_DATA8(0x1f);
        LCD_WR_REG(0Xf0);
        LCD_WR_DATA8(0x3c);
        LCD_WR_REG(0Xf0);
        LCD_WR_DATA8(0x69);
        LCD_WR_REG(0X29);
}
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-3-1 11:32:17 | 显示全部楼层
lindada 发表于 2019-7-25 16:54
搞定了,谢谢啦!

请问楼主是怎么解决你贴中那个问题,我遇到了一样的问题
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-7-20 10:06:54 | 显示全部楼层
也遇到同样的问题了,楼主能发一下源码嘛?感谢感谢2891854535@qq.com
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-9-18 18:16:36 | 显示全部楼层
您好,我也在搞st7796,st7796 spi+rgb的程序方便发下我参考吗
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-2-8 10:34:23

遇到同样的问题了,楼主能发一下源码嘛?非常感谢2275295636@qq.com

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-2-8 10:36:03 | 显示全部楼层

遇到同样的问题了,楼主能发一下源码嘛?感谢感谢2275295636@qq.com
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-2-17 13:57:38 | 显示全部楼层
也遇到同样的问题了,楼主能发一下源码嘛?感谢感谢2393863641@qq.com
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-2-17 13:58:35 | 显示全部楼层
ayueying 发表于 2022-9-18 18:16
您好,我也在搞st7796,st7796 spi+rgb的程序方便发下我参考吗

邮箱
2393863641@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-28 23:59 , Processed in 0.202956 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表