现在我有一块控制器为ST7793的LCD屏,3.2寸,400*240。我的该驱动初始化如下,但是总是显示白屏,怎么办?谁帮我分晰下情况:
void LCD_Init(void){
RCC->APB2ENR|=1<<2;//先使能外设PORTA时钟
RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<0; //开启辅助时钟
JTAG_Set(SWD_ENABLE); //开启SWD
//PORTC6~9复用推挽输出
GPIOA->CRH&=0X0FFFFFFF;
GPIOA->CRH|=0X30000000;
GPIOA->ODR|=1<<15;
GPIOC->CRH&=0XFFFFFF00;
GPIOC->CRH|=0X00000033;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X03C0;
//PORTB 推挽输出
GPIOB->CRH=0X33333333;
GPIOB->CRL=0X33333333;
GPIOB->ODR=0XFFFF;
LCD_RS_SET;
delay_ms (1); //Delay 1ms
LCD_RS_CLR;
delay_ms (1); //Delay 1ms
LCD_RS_SET;
delay_ms (10);
// delay_ms(50); // delay 50 ms
// LCD_WriteReg(0x0000,0x0001);
// delay_ms(50); // delay 50 ms
// DeviceCode = LCD_ReadReg(0x0000);
// printf(" LCD ID:%x\n",DeviceCode); //打印LCD ID
LCD_WriteReg(0x0001,0x0100);
LCD_WriteReg(0x0003,0x1030);
LCD_WriteReg(0x0008,0x0808);
LCD_WriteReg(0x0090,0x8000);
LCD_WriteReg(0x0400,0x6200);
LCD_WriteReg(0x0401,0x0001);
//-----------------------------------End Display Control setting-----------------------------------------//
//-------------------------------- Power Control Registers Initial --------------------------------------//
LCD_WriteReg(0x00ff,0x0001);
LCD_WriteReg(0x0102,0x01b0);
LCD_WriteReg(0x0710,0x0016);
LCD_WriteReg(0x0712,0x000f);
LCD_WriteReg(0x0752,0x002f);
LCD_WriteReg(0x0724,0x001a);
LCD_WriteReg(0x0759,0x0070);
LCD_WriteReg(0x0754,0x0018);
//---------------------------------End Power Control Registers Initial -------------------------------//
delay_ms (100);
//----------------------------------Display Windows 240 X 400----------------------------------------//
LCD_WriteReg(0x00210,0x0000);
LCD_WriteReg(0x00211,0x00ef);
LCD_WriteReg(0x00212,0x0000);
LCD_WriteReg(0x00213,0x018f);
//----------------------------------End Display Windows 240 X 400----------------------------------//
delay_ms(10);
//-------------------------------------Gamma Cluster Setting-------------------------------------------//
LCD_WriteReg(0x0380,0x0000);
LCD_WriteReg(0x0381,0x3e1a);
LCD_WriteReg(0x0382,0x0a02);
LCD_WriteReg(0x0383,0x0614);
LCD_WriteReg(0x0384,0x0111);
LCD_WriteReg(0x0385,0x0000);
LCD_WriteReg(0x0386,0x9f15);
LCD_WriteReg(0x0387,0x0605);
LCD_WriteReg(0x0388,0x0612);
LCD_WriteReg(0x0389,0x0111);
//---------------------------------------End Gamma Setting---------------------------------------------//
//---------------------------------------Vcom Setting---------------------------------------------//
LCD_WriteReg(0x0702,0x0031); //水平GRAM起始位置
LCD_WriteReg(0x00ff,0x0000); //垂直GRAM起始位置
//---------------------------------------End Vcom Setting---------------------------------------------//
LCD_WriteReg(0x0007,0x0100);
delay_ms(200);
LCD_WriteReg(0x0200,0x0000);
LCD_WriteReg(0x0201,0x0000);
}
void LCD_WR_REG(u16 data)
{
LCD_RD_SET;//写地址
LCD_CS_CLR;
LCD_WR_SET;
DATAOUT(data);
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;
}
u16 LCD_ReadReg(u16 LCD_Reg)
{
u16 t;
LCD_WR_REG(LCD_Reg); //写入要读的寄存器号
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0XFFFF; //全部输出高
LCD_RD_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
delay_us(5);//FOR 8989,延时5us
LCD_RD_SET;
t=DATAIN;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return t;
}
|