|
本帖最后由 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__);
}
}大家帮忙看一下,可能是哪儿出的问题,谢谢!
|
|