完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 bojue2015 于 2018-2-25 11:05 编辑
用STM32F030驱动TFT-LCD(TFT-LCD初始化总时间不到15MS),驱动芯片ST7789V,左上角刚上电小几率出现一小块花屏! 刷屏流程为:上电--屏供电--初始化(总延时不到20MS,不能再长)--整体刷黑底---需要的位置上刷图片。 左上角有小几率出现小块花屏,之后如果需要切换显示的话,会再刷黑底,花屏消失。之后坏样机再重新上电也难以复现此现象。 最新的优化方法是上电的初次刷两次黑底,能有效改善此问题,但几率性还是存在。 |
|
相关推荐
14个回答
|
|
本帖最后由 Tcreat 于 2018-2-25 10:51 编辑
首先你这问题的表述太过于简单 可能是初始化 或者是干扰导致的 具体情况 还得根据你实际情况看 先把问题条件 症状表述清楚 才好 |
|
|
|
比如说你上传一张出现花屏的照片,你的硬件连接部分的图片,不然也没法判断呀,如果硬件没问题,那就看软件上的问题就可以了,建议好好阅读william hill官网
问答发帖规范
|
|
|
|
这个涉及到的原因可能好几种,具体不好说
|
|
|
|
屏供应商回复说初始化时间太短,造成芯片初始化不完全造成。但就有个疑问,为什么总是只出现在左上角,且大小位置都一样。
|
|
|
|
上原理图和工程代码吧!
ST7789V有多种工作模式,你这用的是哪一种? 看一下手册中AC Characteristics参数部分。 把时序放慢,比如SPI时钟频率减小,两条读写指令之前增加软件延时。 Sitronix的LCD驱动芯片用的比较多,51上都能驱动,51的时序较慢。 |
|
|
|
|
|
|
|
不是初始化时间太短, 初始化代码顺序有问题,建议你看看初始化的码制式设定。好像系统默认的不是565。 |
|
|
|
static void TftDispInit(void)
{ WriteComm(0x36); // Memory Access Control WriteData(0xC8); // C8 WriteComm(0x3A); WriteData(0x55); //66 WriteComm(0xC0); WriteData(0x05); WriteData(0x05); WriteComm(0xC1); WriteData(0x04); WriteComm(0xE0); //Set Gamma WriteData(0x06); WriteData(0x09); WriteData(0x0e); WriteData(0x04); WriteData(0x13); WriteData(0x08); WriteData(0x36); WriteData(0X68); WriteData(0x46); WriteData(0x06); WriteData(0x0e); WriteData(0x0d); WriteData(0x18); WriteData(0x1b); WriteData(0x0f); WriteComm(0XE1); //Set Gamma WriteData(0x06); WriteData(0x23); WriteData(0x29); WriteData(0x03); WriteData(0x0f); WriteData(0x04); WriteData(0x39); WriteData(0x23); WriteData(0x48); WriteData(0x03); WriteData(0x0b); WriteData(0x08); WriteData(0xb1); WriteData(0x36); WriteData(0x0f); WriteComm(0x11); //Exit Sleep } 初始化代码为供应商提供。 |
|
|
|
//TFT处理函数
static void TFTDisp_Proc(void) { if(g_BlackWakeID == WakeByRtcPwrOff) return; switch(g_TftDispSt) { case TFT_Idle: s_TftDisp_X4ms = 0/4; g_TftDispSt = TFT_RstStart; break; case TFT_RstStart: if(s_TftDisp_X4ms) return; TFTPOWER_ON; DISP_SPI_RST_HIGH; s_TftDisp_X4ms = 4/4;//8 g_TftDispSt = TFT_Rsting; break; case TFT_Rsting: if(s_TftDisp_X4ms) return; DISP_SPI_RST_LOW; s_TftDisp_X4ms = 4/4;//20 g_TftDispSt = TFT_RstEnd; break; case TFT_RstEnd: if(s_TftDisp_X4ms) return; DISP_SPI_RST_HIGH; s_TftDisp_X4ms = 4/4;//8 g_TftDispSt = TFT_WriteDataDelay; break; case TFT_WriteDataDelay: if(s_TftDisp_X4ms) return; //WriteData(0x11); //s_TftDisp_X4ms = 120/4; g_TftDispSt = TFT_WriteData; //break; case TFT_WriteData: if(s_TftDisp_X4ms) return; TftDispInit(); s_TftDisp_X4ms = 0/4;//10 g_TftDispSt = TFT_WriteDataEnd; break; case TFT_WriteDataEnd: if(s_TftDisp_X4ms) return; WriteComm(0x29); s_TftDisp_X4ms = 0/4;//20 g_TftDispSt = TFT_WaitStandby; break; case TFT_WaitStandby: if(s_TftDisp_X4ms) return; g_TftDispSt = TFT_Standby; break; case TFT_Standby: if(s_TftDisp_X4ms) return; break; default: g_TftDispSt = TFT_Idle; break; } } |
|
|
|
//写命令函数
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的,这个需要严格按照手册操作。气态的就是如果曾经电源接反过——不一定烧屏,如果没有烧,再接正确了就可能会出现你描述的问题。
|
|
|
|
上电到屏初始化的时间不够长,屏刚上电时需要一个电源稳定的过程
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
995 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1152 浏览 0 评论
2546 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2330 浏览 3 评论
4977 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 17:38 , Processed in 0.771642 second(s), Total 66, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号