bojue2015 发表于 2018-2-27 16:38:44

//写命令函数
static void WriteComm(Uint8 command)
{
        Uint8 i;
        //__set_PRIMASK(1);
       
        GPIOA->BRR = Pin_SPI_CS;
        //DISP_SPI_CS_LOW;
        GPIOB->BRR = Pin_SPI_DC;       
        //DISP_SPI_DC_LOW;
        //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        while(!(SPI1->SR & SPI_I2S_FLAG_TXE));
        for(i=0;i<2;i++);
       
        //SPI_SendData8(SPI1, command);
        *((__IO uint8_t *)SPI1+0x0c) = command;
        //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        while(!(SPI1->SR & SPI_I2S_FLAG_TXE));
        for(i=0;i<2;i++);
        //DISP_SPI_CS_HIGH;
        GPIOA->BSRR = Pin_SPI_CS;
       
        //__set_PRIMASK(0);
}

bojue2015 发表于 2018-2-27 16:39:02

static void WriteData(Uint8 date)
{
        Uint8 i;

        //__set_PRIMASK(1);
       
        GPIOA->BRR = Pin_SPI_CS;
        //DISP_SPI_CS_LOW;
        GPIOB->BSRR = Pin_SPI_DC;
        //DISP_SPI_DC_HIGH;
        //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        while(!(SPI1->SR & SPI_I2S_FLAG_TXE));
        for(i=0;i<2;i++);
        //SPI_SendData8(SPI1, date);       
        *((__IO uint8_t *)SPI1+0x0c) = date;
        //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        while(!(SPI1->SR & SPI_I2S_FLAG_TXE));
        for(i=0;i<2;i++);
        //DISP_SPI_CS_HIGH;
        GPIOA->BSRR = Pin_SPI_CS;
       
        //__set_PRIMASK(0);
}

bojue2015 发表于 2018-2-27 16:51:22

SPI读写LCD采用的是指令和库函数结合的方式,以优化减少读写时间,加快显示。

zhjb1 发表于 2018-3-14 09:18:08

楼主:您好!我玩过很多屏。直接感觉您的初始化[软复位时间太短],一般的TFT LCD多数需要不少于40mS的软复位,如果有硬件复位例外,但眼见复位的时间也应该不少于数十到百毫秒以上。建议硬件复位之后CPU再启动,如果仅软复位时间不少于50mS,可以设置为100mS较为可靠。当然较新的驱屏芯片可能时间会少点的。此外TFTLCD许多是支持改写内带的FLASHROM的,这个需要严格按照手册操作。气态的就是如果曾经电源接反过——不一定烧屏,如果没有烧,再接正确了就可能会出现你描述的问题。

dsjsjf 发表于 2018-3-15 15:46:30

上电到屏初始化的时间不够长,屏刚上电时需要一个电源稳定的过程
页: 1 [2]
查看完整版本: 用STM32F030驱动1.45寸TFT-LCD,左上角刚上电小几率出现一小块花