1.69寸SPI接口240280TFT液晶显示模块使用中碰到的问题说明并记录一下,
在网上买了1.69寸液晶显示模块,使用spi接口,分辨率240280,给的参考程序是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);
}
上面的图的正确的波形,可以看出第一条指令是唤醒显示器,**
**
最开始的时候因为CUBEIDE设置GPIO管脚的时候默认是低电平输出,当时也没有太在意,导致这个问题找了很久。
看一下错误的波形:
一开始4个管脚都是低电平,连逻辑分析仪也是无法判断数据的,测试发现只要CS由高电平向低电平跳变就可以了。
下次再改硬件SPI功能吧。
还有最重要的逻辑分析仪的设置
显示模块的刷新不快,全屏刷一次大概要3秒时间: