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);
} 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);
} SPI读写LCD采用的是指令和库函数结合的方式,以优化减少读写时间,加快显示。 楼主:您好!我玩过很多屏。直接感觉您的初始化[软复位时间太短],一般的TFT LCD多数需要不少于40mS的软复位,如果有硬件复位例外,但眼见复位的时间也应该不少于数十到百毫秒以上。建议硬件复位之后CPU再启动,如果仅软复位时间不少于50mS,可以设置为100mS较为可靠。当然较新的驱屏芯片可能时间会少点的。此外TFTLCD许多是支持改写内带的FLASHROM的,这个需要严格按照手册操作。气态的就是如果曾经电源接反过——不一定烧屏,如果没有烧,再接正确了就可能会出现你描述的问题。 上电到屏初始化的时间不够长,屏刚上电时需要一个电源稳定的过程
页:
1
[2]