IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F4-TFT-SPI时序逻辑分析仪调试记录 -> 正文阅读

[嵌入式]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;
	}				
}	 
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…
逻辑分析仪抓取出的数据:
在这里插入图片描述
抓取的数据与计算一致。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:16:14  更:2022-06-29 19:17:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 18:55:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码