1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

发布时间:2024年01月04日

1.69寸SPI接口240280TFT液晶显示模块使用中碰到的问题说明并记录一下,
在网上买了1.69寸液晶显示模块,使用spi接口,分辨率240
280,给的参考程序是GPIO模拟的SPI接口,打算先移植到FreeRtos测试,再慢慢使用硬件SPI。
接口分别是: GND-> 地
VCC->3.3V
SCL->SPI的时钟
SDA->SPI的数据
RES->复位
DC->是数据和指令的切换,低电平为指令(设置参数专用)
CS->选通信号,拉低有效
BLK->背景LED灯,高电平点亮背光,可以用PWM改变背景亮度

在测试中还是碰到一些问题的:一开始当然是改u8到uint8_t、u16到uint16_t之类的一堆问题,可以用查找替换的方法逐一替换,延时函数改到hal_delay()函数,GPIO改到stm32CubeIDE的自动生成,几乎都改好了,跑通了,不显示,就是发现不行,偶然在初始化的前面加了几句发命令的指令竟然成功了,百思不得其解,后面通过各种分析发现问题的所在:先看图:

在这里插入图片描述
100mS之后的数据:
在这里插入图片描述
上2图第一行是时钟SCL,第二行是数据SDA,第三行是CS选通,第四行是DC,可以看出程序的第一个指令是:LCD_WR_REG(0x11); //Sleep out

void LCD_Init(void)
{
	//LCD_GPIO_Init();//初始化GPIO
	
	LCD_RES_Clr();		//复位
	HAL_Delay(100);
	LCD_RES_Set();
	HAL_Delay(100);
	
	LCD_BLK_Set();		//打开背光
	HAL_Delay(100);

	
	//************* Start Initial Sequence **********//
	LCD_WR_REG(0x11); //Sleep out
	HAL_Delay(100);
	//************* Start Initial Sequence **********//
	LCD_WR_REG(0x36);
	if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
	else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
	else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
	else LCD_WR_DATA8(0xA0);

	LCD_WR_REG(0x3A);
	LCD_WR_DATA8(0x05);

	LCD_WR_REG(0xB2);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x33);
	LCD_WR_DATA8(0x33);

	LCD_WR_REG(0xB7);
	LCD_WR_DATA8(0x35);

	LCD_WR_REG(0xBB);
	LCD_WR_DATA8(0x32); //Vcom=1.35V

	LCD_WR_REG(0xC2);
	LCD_WR_DATA8(0x01);

	LCD_WR_REG(0xC3);
	LCD_WR_DATA8(0x15); //GVDD=4.8V  颜色深度

	LCD_WR_REG(0xC4);
	LCD_WR_DATA8(0x20); //VDV, 0x20:0v

	LCD_WR_REG(0xC6);
	LCD_WR_DATA8(0x0F); //0x0F:60Hz

	LCD_WR_REG(0xD0);
	LCD_WR_DATA8(0xA4);
	LCD_WR_DATA8(0xA1);

	LCD_WR_REG(0xE0);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x08);
	LCD_WR_DATA8(0x0E);
	LCD_WR_DATA8(0x09);
	LCD_WR_DATA8(0x09);
	LCD_WR_DATA8(0x05);
	LCD_WR_DATA8(0x31);
	LCD_WR_DATA8(0x33);
	LCD_WR_DATA8(0x48);
	LCD_WR_DATA8(0x17);
	LCD_WR_DATA8(0x14);
	LCD_WR_DATA8(0x15);
	LCD_WR_DATA8(0x31);
	LCD_WR_DATA8(0x34);

	LCD_WR_REG(0xE1);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x08);
	LCD_WR_DATA8(0x0E);
	LCD_WR_DATA8(0x09);
	LCD_WR_DATA8(0x09);
	LCD_WR_DATA8(0x15);
	LCD_WR_DATA8(0x31);
	LCD_WR_DATA8(0x33);
	LCD_WR_DATA8(0x48);
	LCD_WR_DATA8(0x17);
	LCD_WR_DATA8(0x14);
	LCD_WR_DATA8(0x15);
	LCD_WR_DATA8(0x31);
	LCD_WR_DATA8(0x34);
	LCD_WR_REG(0x21);

	LCD_WR_REG(0x29);
} 

上面的图的正确的波形,可以看出第一条指令是唤醒显示器,**

要注意CS管脚必须是从高电平向低电平跳变才能正确选通,如果开始就一直是低电平状态是无法正常工作的,这一点已经通过多次测试获得的结果

**
最开始的时候因为CUBEIDE设置GPIO管脚的时候默认是低电平输出,当时也没有太在意,导致这个问题找了很久。

看一下错误的波形:
在这里插入图片描述
一开始4个管脚都是低电平,连逻辑分析仪也是无法判断数据的,测试发现只要CS由高电平向低电平跳变就可以了。
下次再改硬件SPI功能吧。

还有最重要的逻辑分析仪的设置
在这里插入图片描述
显示模块的刷新不快,全屏刷一次大概要3秒时间:
在这里插入图片描述

文章来源:https://blog.csdn.net/ztvzbj/article/details/135377873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。