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


    调试TFT时不知道数据是否写入了TFT
    连接逻辑分析仪看看,

    因为不确定软件SPI是否能用,因此先用硬件的SPI测试
    之后换到 软件SPI
    在这里插入图片描述
    测试下了时序是对的,正常显示
    在这里插入图片描述
    代码如下
    在这里插入图片描述
    之后打开逻辑分析仪 我用的是 logic2,设置如下,注意红框内的设置,(改为 CPHA=1显示出来的数据是对不上的)
    在这里插入图片描述
    可以看到写入的数据全部是0xF800,宏定义里RGB565红色是0xF800
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    看下这个写入填充的函数里还写了哪些东西,

    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;
    	}				
    }	 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    void LCD_WriteRAM_Prepare(void)
    {
    	LCD_WR_REG(lcddev.wramcmd); //lcddev.wramcmd=0x2C
    }	
    
    • 1
    • 2
    • 3
    • 4

    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);//恢复窗口设置为全屏
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    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	
    }   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    因此数据开头的应该为:
    0x2A–0x00–0x28–0x01–0x18------0x2B–0x00–0x35–0x00–0x35–0x00–0xBC-----0x2C-----0xF8-0x00–0xF8-0x00…
    逻辑分析仪抓取出的数据:
    在这里插入图片描述
    抓取的数据与计算一致。

  • 相关阅读:
    php-jwt简单鉴权使用方法
    跨境电商如何减少客户流失率:成功的5种保留策略
    【多线程】Thread的interrupt()
    RxJS 实战: 基于 BehaviorSubject 实现状态管理 & 结合 React
    操作系统真相还原_第1~2章:环境配置
    Python - inspect 模块的简单使用
    【Redis】基础数据结构-ziplist压缩列表
    JS的执行过程
    分享个人收集或整理的word中常用的vba代码
    Scratch软件编程等级考试一级——20201219
  • 原文地址:https://blog.csdn.net/changsic/article/details/125431954