资讯详情

ST7701芯片820*320屏幕移植stemwin

简要说明

例如,该公司最近更换了820*320屏幕,移植stemwin,使用3线spi通讯+16RGB,这个屏幕的工作流程是:首先通过三线spi通过16发送初始化指令bitRGB发送像素点。 移植过程参考安富莱、野火、https://www.nxpic.org.cn/module/forum/thread-622198-1-1.html

移植过程

首先对屏幕进行初始化,使用模拟3线SPI因为9bit方式,第一代表命令。 手册上的通讯时序如下: 在这里插入图片描述 但实际上这个时序是个坑,实际时序如下: SCL在空闲状态下高电平,然后在第一个上升沿采样,即CPOL=1、CPHA=1。 初始化代码如下:最重要的是把它放在SCL拉高。

void SPI3_GPIO_Config(void) { 
            GPIO_InitTypeDef GPIO_InitStructure;  RCC_AHB1PeriphClockCmd ( SDI_GPIO_CLK|                           SCL_GPIO_CLK|                           CS_GPIO_CLK|                           RES_GPIO_CLK, ENABLE);                     GPIO_InitStructure.GPIO_Pin = SDI_PIN;      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;  //SDA有上拉电阻     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   GPIO_Init(SDI_GPIO_PORT, &GPIO_InitStructure);      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                   GPIO_InitStructure.GPIO_Pin = SCL_PIN;      GPIO_Init(SCL_GPIO_PORT, &GPIO_InitStructure);                    GPIO_InitStructure.GPIO_Pin = CS_PIN;      GPIO_Init(CS_GPIO_PORT, &GPIO_InitStructure);   GPIO_InitStructure.GPIO_Pin = RES_PIN;      GPIO_Init(RES_GPIO_PORT, &GPIO_InitStructure);     SET_LSCE_HIGH;  SET_LSCK_LOW;  SET_LSCK_HIGH; } 

时序部分参考https://www.nxpic.org.cn/module/forum/thread-622198-1-1.html

static void St7701_Write_Byte(unsigned shorttemp)
{ 
        
	unsigned char i;
	SET_LSCE_LOW;
// GPIO_PortClear(GPIO, 4U, 1<<0U);
	for(i=0;i<9;i++)
	{ 
        
		SET_LSCK_LOW;
// ST7701_SCL(0);
		if(temp&0x0100)
// ST7701_SDA(1);
			SET_LSDA_HIGH;
		else
// ST7701_SDA(0);
			SET_LSDA_LOW;
		UDELAY(5);
		SET_LSCK_HIGH;
// ST7701_SCL(1);
		UDELAY(5);
		temp = temp<<1;
	}
	SET_LSCE_HIGH;
// GPIO_PortSet(GPIO, 4U, 1<<0U);
}

static void St7701_WriteCommand(uint8_t c)
{ 
        
	unsigned short temp = 0x00;
	temp = temp | c;
	St7701_Write_Byte(temp);
	UDELAY(100);
}

static void St7701_WriteData(uint8_t c)
{ 
        
	unsigned short temp = 0x100;
	temp = temp | c;
	St7701_Write_Byte(temp);
	UDELAY(100);
}


#define W_C(x) St7701_WriteCommand(x)
#define W_D(x) St7701_WriteData(x)



void LCD_SPI_Init(void)
{ 
         
	uint8_t id1, id2, id3;
	SPI3_GPIO_Config();
	SET_LRES_HIGH;
	mdelay(1);
	SET_LRES_LOW;
	mdelay(100);
	SET_LRES_HIGH;
	mdelay(200);
	//id1 = SPI_St7701s_ReadByte(0xDA);
	//id2 = SPI_St7701s_ReadByte(0xDB);
	//id3 = SPI_St7701s_ReadByte(0xDC);
#if 1
	W_C (0x11);
	mdelay(20); //Delayms 20ms 

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x13);   

	W_C (0xEF);     
	W_D (0x08);   

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x10);   

	W_C (0xC0);    //设置显示行为820 
	W_D (0xE5);   
	W_D (0x02);   

	W_C (0xC1);     //设置VBP=12,VFP=10
	W_D (0x0C);   
	W_D (0x0A);   

	W_C (0xC2);     //反转选择性和帧率控制
	W_D (0x07);    //7Column
	W_D (0x0F);     //PCLK=512+(0X0F*16)=752

	W_C (0xC3);     //RGB控制
	W_D (0x02);     //RGB DE mode--VSYNC信号极性(LOW)--HSYNC信号极性(LOW)--DP = “1” The data is input on the negative edge of DOTCLK--|||||||EP = 0 The data DB23-0 is written when ENABLE = “1”. Disable data write operation when ENABLE = “0”
//HBP--0x10 VBP=0x08(猜测为HFP)
	W_C (0xCC);     
	W_D (0x10);   

	 
	W_C(0xCd);
	W_D(0x08); 

	W_C (0xB0);     
	W_D (0x00);   
	W_D (0x08);   
	W_D (0x51);   
	W_D (0x0D);   
	W_D (0xCE);   
	W_D (0x06);   
	W_D (0x00);   
	W_D (0x08);   
	W_D (0x08);   
	W_D (0x1D);   
	W_D (0x02);   
	W_D (0xD0);   
	W_D (0x0F);   
	W_D (0x6F);   
	W_D (0x36);   
	W_D (0x3F);   

	W_C (0xB1);     
	W_D (0x00);   
	W_D (0x10);   
	W_D (0x4F);   
	W_D (0x0C);   
	W_D (0x11);   
	W_D (0x05);   
	W_D (0x00);   
	W_D (0x07);   
	W_D (0x07);   
	W_D (0x1F);   
	W_D (0x05);   
	W_D (0xD3);   
	W_D (0x11);   
	W_D (0x6E);   
	W_D (0x34);   
	W_D (0x3F);   

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x11);   

	W_C (0xB0);     
	W_D (0x4D);   

	W_C (0xB1);     
	W_D (0x1C);   

	W_C (0xB2);     
	W_D (0x87);   

	W_C (0xB3);     
	W_D (0x80);   

	W_C (0xB5);     
	W_D (0x47);   

	W_C (0xB7);     
	W_D (0x85);   

	W_C (0xB8);     
	W_D (0x21);   

	W_C (0xB9);     
	W_D (0x10);   

	W_C (0xC1);     
	W_D (0x78);   

	W_C (0xC2);     
	W_D (0x78);   

	W_C (0xD0);     
	W_D (0x88);   

	UDELAY(100);    //--------------------------------------- 

	W_C (0xE0);     
	W_D (0x80);   
	W_D (0x00);   
	W_D (0x02);   

	W_C (0xE1);     
	W_D (0x04);   
	W_D (0xA0);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x05);   
	W_D (0xA0);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x60);   
	W_D (0x60);   

	W_C (0xE2);     
	W_D (0x30);   
	W_D (0x30);   
	W_D (0x60);   
	W_D (0x60);   
	W_D (0x3C);   
	W_D (0xA0);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x3D);   
	W_D (0xA0);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x00);   

	W_C (0xE3);     
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x33);   
	W_D (0x33);   

	W_C (0xE4);     
	W_D (0x44);   
	W_D (0x44);   

	W_C (0xE5);     
	W_D (0x06);   
	W_D (0x3E);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x08);   
	W_D (0x40);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x0A);   
	W_D (0x42);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x0C);   
	W_D (0x44);   
	W_D (0xA0);   
	W_D (0xA0);   

	W_C (0xE6);     
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x33);   
	W_D (0x33);   

	W_C (0xE7);     
	W_D (0x44);   
	W_D (0x44);   

	W_C (0xE8);     
	W_D (0x07);   
	W_D (0x3F);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x09);   
	W_D (0x41);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x0B);   
	W_D (0x43);   
	W_D (0xA0);   
	W_D (0xA0);   
	W_D (0x0D);   
	W_D (0x45);   
	W_D (0xA0);   
	W_D (0xA0);   

	W_C (0xEB);     
	W_D (0x00);   
	W_D (0x01);   
	W_D (0x4E);   
	W_D (0x4E);   
	W_D (0xEE);   
	W_D (0x44);   
	W_D (0x00);   

	W_C (0xED);     
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0x04);   
	W_D (0x56);   
	W_D (0x72);   
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0xFF);   
	W_D (0x27);   
	W_D (0x65);   
	W_D (0x40);   
	W_D (0xFF);   
	W_D (0xFF);   

	W_C (0xEF);     
	W_D (0x10);   
	W_D (0x0D);   
	W_D (0x04);   
	W_D (0x08);   
	W_D (0x3F);   
	W_D (0x1F);   

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x13);   

	W_C (0xE8);     
	W_D (0x00);   
	W_D (0x0E);   

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x00);   

	W_C (0x11);     

	UDELAY(100);   //---------------------------- 

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x13);   

	W_C (0xE8);     
	W_D (0x00);   
	W_D (0x0C);   

	UDELAY(10 );    //------------------------------- 

	W_C (0xE8);     
	W_D (0x00);   
	W_D (0x00);   

	W_C (0xFF);     
	W_D (0x77);   
	W_D (0x01);   
	W_D (0x00);   
	W_D (0x00);   
	W_D (0x00);   

	W_C(0x36);
	W_D(0x00); //0x00
	W_C(0x3A);
	W_D(0x50);
	W_C(0x11);

	/* W_C (0xFF); W_D (0x77); W_D (0x01); W_D (0x00); W_D (0x00); W_D (0x12); W_C (0xD1); W_D (0x81); W_D (0x08); W_D (0x03); W_D (0x20); W_D (0x08); W_D (0x01); W_D (0xA0); W_D (0x01); W_D (0xE0); W_D (0xA0); W_D (0x01); W_D (0xE0); W_D (0x03); W_D (0x20); W_C (0xD2); W_D (0x08); */
	UDELAY(100);
	W_C(0x29);
	Delay1ms(20);
#else
#endif
}


初始化过程注意SCL空闲电平就成,其他没啥好说的。 之后就是LCD的初始化,一把抄,改一下VBP、HBP、HFP、VFP这几个参数

void LCD_Init(void)

        标签: 电容0r4crc6电容电阻b3a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台