天天看点

STM32F4-TFT-SPI时序逻辑分析仪调试记录

调试TFT时不知道数据是否写入了TFT

连接逻辑分析仪看看,

因为不确定软件SPI是否能用,因此先用硬件的SPI测试

之后换到 软件SPI

STM32F4-TFT-SPI时序逻辑分析仪调试记录

测试下了时序是对的,正常显示

STM32F4-TFT-SPI时序逻辑分析仪调试记录

代码如下

STM32F4-TFT-SPI时序逻辑分析仪调试记录

之后打开逻辑分析仪 我用的是 logic2,设置如下,注意红框内的设置,(改为 CPHA=1显示出来的数据是对不上的)

STM32F4-TFT-SPI时序逻辑分析仪调试记录

可以看到写入的数据全部是0xF800,宏定义里RGB565红色是0xF800

STM32F4-TFT-SPI时序逻辑分析仪调试记录
STM32F4-TFT-SPI时序逻辑分析仪调试记录
STM32F4-TFT-SPI时序逻辑分析仪调试记录

看下这个写入填充的函数里还写了哪些东西,

void LCD_direction(u8 direction)
{ 
			lcddev.setxcmd=0x2A;
			lcddev.setycmd=0x2B;
			lcddev.wramcmd=0x2C;
	switch(direction){		  
		case 0:						 	 		
			lcddev.width=LCD_W;
			lcddev.height=LCD_H;	
			lcddev.xoffset=52;
			lcddev.yoffset=40;
			LCD_WriteReg(0x36,0);//BGR==1,MY==0,MX==0,MV==0
		break;
		case 1:		//select direction=1
			lcddev.width=LCD_H;
			lcddev.height=LCD_W;
			lcddev.xoffset=40;
			lcddev.yoffset=53;
			LCD_WriteReg(0x36,(1<<6)|(1<<5));//BGR==1,MY==1,MX==0,MV==1
		break;
		case 2:						 	 		
			lcddev.width=LCD_W;
			lcddev.height=LCD_H;
			lcddev.xoffset=53;
			lcddev.yoffset=40;			
			LCD_WriteReg(0x36,(1<<6)|(1<<7));//BGR==1,MY==0,MX==0,MV==0
		break;
		case 3:
			lcddev.width=LCD_H;
			lcddev.height=LCD_W;
			lcddev.xoffset=40;
			lcddev.yoffset=52;
			LCD_WriteReg(0x36,(1<<7)|(1<<5));//BGR==1,MY==1,MX==0,MV==1
		break;	
		default:break;
	}				
}	 
           
void LCD_WriteRAM_Prepare(void)
{
	LCD_WR_REG(lcddev.wramcmd); //lcddev.wramcmd=0x2C
}	
           

lcddev.setxcmd参数在void LCD_direction(u8 direction)内有更新,lcddev.setxcmd=0x2A

#define LCD_W 135 //TFT 1.14

#define LCD_H 240

void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{  	
	u16 i,j;			
	u16 width=ex-sx+1; 		//得到填充的宽度
	u16 height=ey-sy+1;		//高度
	LCD_SetWindows(sx,sy,ex,ey);//设置显示窗口
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		Lcd_WriteData_16Bit(color);	//写入数据 	 
	}
	LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口设置为全屏
}
           
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{	
	LCD_WR_REG(lcddev.setxcmd);				//0x2A
	LCD_WR_DATA((xStar+lcddev.xoffset)>>8); //(0+40)>>8=0x00
	LCD_WR_DATA(xStar+lcddev.xoffset);		//0x28
	LCD_WR_DATA((xEnd+lcddev.xoffset)>>8);	//(240+40)>>8=0x01
	LCD_WR_DATA(xEnd+lcddev.xoffset);		//0x18

	LCD_WR_REG(lcddev.setycmd);				//0x2B
	LCD_WR_DATA((yStar+lcddev.yoffset)>>8);	//0+53 >>8=0x00
	LCD_WR_DATA(yStar+lcddev.yoffset);		//0x35
	LCD_WR_DATA((yEnd+lcddev.yoffset)>>8);	//135+53 >>8=0x00
	LCD_WR_DATA(yEnd+lcddev.yoffset);		//0xBC

	LCD_WriteRAM_Prepare();	//开始写入GRAM	//lcddev.wramcmd=0x2C	
}   
           

因此数据开头的应该为:

0x2A–0x00–0x28–0x01–0x18------0x2B–0x00–0x35–0x00–0x35–0x00–0xBC-----0x2C-----0xF8-0x00–0xF8-0x00…

逻辑分析仪抓取出的数据:

STM32F4-TFT-SPI时序逻辑分析仪调试记录

抓取的数据与计算一致。

继续阅读