Mi 2.2 "TFT LCD no funciona (controlador ILI9225) (STM32F1)

0

Hoy estuve trabajando en esta TFT LCD y no sé por qué no funciona.

EsteLCDesunTFTde2.2"con controlador de LCD ILI9225 y está conectado a mi STM32F1. Aquí está la hoja de datos del controlador de LCD:

enlace

Y código de ejemplo:

enlace

Y aquí hay otras fuentes que he leído:

enlace enlace

enlace enlace

enlace

Software

Para el software, aquí está el código que he usado para iniciar la pantalla LCD:

void TM_ILI9225_Init(void) 
  {


    ILI9225_RST_RESET;         
        TM_ILI9225_Delay(20000);  
    ILI9225_RST_SET;
        TM_ILI9225_Delay(200000);
    ILI9225_RST_RESET;
        TM_ILI9225_Delay(400000);   

    TM_ILI9225_SendCommand(0x28);
    TM_ILI9225_SendData(0x00CE);


    TM_ILI9225_SendCommand(0x10);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x11);
    TM_ILI9225_SendData(0x0000);    
    TM_ILI9225_SendCommand(0x12);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x13);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x14);
    TM_ILI9225_SendData(0x0000);

    TM_ILI9225_Delay(400000);

    TM_ILI9225_SendCommand(0x11);
    TM_ILI9225_SendData(0x103B);//0x0018    
    TM_ILI9225_SendCommand(0x12);
    TM_ILI9225_SendData(0x6121);
    TM_ILI9225_SendCommand(0x13);
    TM_ILI9225_SendData(0x006F);
    TM_ILI9225_SendCommand(0x14);
    TM_ILI9225_SendData(0x495F);
    TM_ILI9225_SendCommand(0x10);
    TM_ILI9225_SendData(0x0A00);

    TM_ILI9225_Delay(400000);

    TM_ILI9225_SendCommand(0x11);
    TM_ILI9225_SendData(0x1000);

    TM_ILI9225_Delay(400000);

    TM_ILI9225_SendCommand(0x01);
    TM_ILI9225_SendData(0x011C);
    TM_ILI9225_SendCommand(0x02);
    TM_ILI9225_SendData(0x0100);//0x0100
    TM_ILI9225_SendCommand(0x03);
    TM_ILI9225_SendData(0x1030);
    TM_ILI9225_SendCommand(0x07);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x08);
    TM_ILI9225_SendData(0x0808);
    TM_ILI9225_SendCommand(0x0B);
    TM_ILI9225_SendData(0x1100);
    TM_ILI9225_SendCommand(0x0C);
    TM_ILI9225_SendData(0x0111);//0x0000
    TM_ILI9225_SendCommand(0x0F);
    TM_ILI9225_SendData(0x0F01);//
    TM_ILI9225_SendCommand(0x20);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x21);
    TM_ILI9225_SendData(0x0000);

    TM_ILI9225_SendCommand(0x30);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x31);
    TM_ILI9225_SendData(0x00DB);
    TM_ILI9225_SendCommand(0x32);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x33);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x34);
    TM_ILI9225_SendData(0x00DB);
    TM_ILI9225_SendCommand(0x35);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x36);
    TM_ILI9225_SendData(0x00AF);
    TM_ILI9225_SendCommand(0x37);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x38);
    TM_ILI9225_SendData(0x00DB);
    TM_ILI9225_SendCommand(0x39);
    TM_ILI9225_SendData(0x0000);


    TM_ILI9225_SendCommand(0x50);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x51);
    TM_ILI9225_SendData(0x0808);
    TM_ILI9225_SendCommand(0x52);
    TM_ILI9225_SendData(0x080A);
    TM_ILI9225_SendCommand(0x53);
    TM_ILI9225_SendData(0x000A);
    TM_ILI9225_SendCommand(0x54);
    TM_ILI9225_SendData(0x0A08);
    TM_ILI9225_SendCommand(0x55);
    TM_ILI9225_SendData(0x0808);
    TM_ILI9225_SendCommand(0x56);
    TM_ILI9225_SendData(0x0000);
    TM_ILI9225_SendCommand(0x57);
    TM_ILI9225_SendData(0x0A00);
    TM_ILI9225_SendCommand(0x58);
    TM_ILI9225_SendData(0x0710);
    TM_ILI9225_SendCommand(0x59);
    TM_ILI9225_SendData(0x0710);

    TM_ILI9225_SendCommand(0x07);
    TM_ILI9225_SendData(0x0012);

    TM_ILI9225_Delay(400000);

    TM_ILI9225_SendCommand(0x07);
    TM_ILI9225_SendData(0x1017);    


}

Y aquí están las funciones:

void TM_ILI9225_Delay(volatile unsigned int delay) {
    for (; delay != 0; delay--); 
}

void TM_ILI9225_SendCommand(uint16_t data) {

    ILI9225_WRX_RESET;
    a = 3;
    while(a){
        a--;
    }
    GPIOA->BRR = GPIO_Pin_4;
    a = 3;
    while(a){
        a--;
    }
    SPI1->DR = data;
    a = 3;
    while(a){
        a--;
    }
    GPIOA->BSRR = GPIO_Pin_4; //setbit

}

void TM_ILI9225_SendData(uint16_t data) {

    ILI9225_WRX_SET;
    a = 3;
    while(a){
        a--;
    }
    GPIOA->BRR = GPIO_Pin_4;
    a = 3;
    while(a){
        a--;
    }
    SPI1->DR = data;
    a = 3;
    while(a){
        a--;
    }
    GPIOA->BSRR = GPIO_Pin_4;

}

void TM_ILI9225_SetCursorPosition(uint16_t x1, uint16_t y1) {
    TM_ILI9225_SendCommand(0x20);
    TM_ILI9225_SendData(x1);

    TM_ILI9225_SendCommand(0x21);
    TM_ILI9225_SendData(y1);

}

void TM_ILI9225_Fill(uint16_t color) {
    unsigned int n, i, j;
    i = color >> 8;
    j = color & 0xFF;
    TM_ILI9225_SetCursorPosition(0, 0);

    TM_ILI9225_SendCommand(0x22);

    for (n = 0; n < ILI9225_PIXEL; n++) {
        TM_ILI9225_SendData(i);
        TM_ILI9225_SendData(j);
    }

Y Macros:

#define ILI9225_RST_SET             GPIO_SetBits( GPIOA , GPIO_Pin_3)
#define ILI9225_RST_RESET           GPIO_ResetBits(GPIOA, GPIO_Pin_3)
#define ILI9225_WRX_SET             GPIO_SetBits(GPIOA, GPIO_Pin_2)
#define ILI9225_WRX_RESET           GPIO_ResetBits(GPIOA, GPIO_Pin_2)

#define ILI9225_WIDTH               220
#define ILI9225_HEIGHT              176
#define ILI9225_PIXEL                   38720

Y este es el código que utilizo para cambiar el color de la pantalla LCD.

TM_ILI9225_Init();
TM_ILI9225_Fill(0xfb20);

No voy a poner otras partes del código (como la inicialización de SPI y etc.) porque el resto del código está probado y funciona muy bien.

Hardware

Aquí está la conexión de los pines:

MCU -------- LCD

PIN-3A ---- > RST

PIN-2A ---- > RS

NSS ------- > CS

MOSI ------ > SDI

CLK ------- > CLK

3v3 ------- > LED

Vcc ------- > Vcc

GND ------- > GND

He comprobado el cableado con mi analizador lógico y funcionan muy bien.

¿Qué he hecho hasta ahora?

Este módulo LCD tiene un IC 74HC245 y pensé que podría ser posible que este IC no pueda manejar SPI de alta velocidad, luego reduje y aumente la velocidad de la interfaz, lo comprobé con mi analizador lógico y no cambió nada. Manipulé el código de inicialización y especialmente esta parte:

TM_ILI9225_SendCommand(0x0C);
TM_ILI9225_SendData(0x0000);

A esto:

TM_ILI9225_SendCommand(0x0C);
TM_ILI9225_SendData(0x0111);

Pero nada ha pasado. Creo que muchos códigos en la red utilizan incorrectamente el valor 0x0000 para el registro 0x0c .

Cualquier idea sería apreciada

    
pregunta Roh

1 respuesta

-2

La pantalla que mostró en las fotos es con el controlador ILI9341, no con el ILI9225. Por lo tanto, no puede ejecutarlo con la inicialización 9225.

    
respondido por el Stefan Stefanov

Lea otras preguntas en las etiquetas