1.问题分析
最近在用乐升半导体的LT268A TFT串口屏做项目,屏幕出现一上电闪现雪花,然后显示才正常的现象。通过参考LCD显示异常分析——开机闪现花屏,得知MCU点亮背光过早,导致MCU初始化读取FLASH的垃圾数据的过程也被呈现出来了,最终变成看到的花屏现象。
2.问题解决
查阅芯片手册将控制背光的引脚为PWM01,将背光点亮控制在MCU读取外部FLASH结束即可,稳妥一点是让MCU读取FLASH结束后返回一个信号用于点亮背光,这里简单一点,直接延时50ms再点亮背光。
int main(void)
{
UINT8 buff_9A[3],buff_80[3];
uint8_t i=0;
InitialChip();
Delay_ms(50);
SPI_Init(); //外部Flash SPI初始化
LT_ReadParam();//Flash info
Uart_Init(); //Uart Init
LTPrintf(" Uart_Init_succeed! \r\n");
LTPrintf(" Flash_Type=%d LCD= %d x %d \r\n",Flash_Type,LCD_XSIZE_TFT,LCD_YSIZE_TFT);
LCD_TFT_Init();
PIT0_Init();
PIT3_Init(); //PIT
#if R_TOUCH_FLAG
LT_TpInit();
#else
CTP_Init();
#endif
#if MODULE_9A //执行9A 00开机指令
cmd_flag=1;
buff_9A[0] = 0x9a;
buff_9A[1] = 0x00;
buff_9A[2] = 0x00;
if(LT_ManageCmd_9A(buff_9A)==OK)
{
cmd_flag=0;
}
#endif
Delay_ms(50);
LCD_BL_Init1(900);//读完外部Flash后再点亮背光,避免开机闪现花屏
busyflag = 0;
gUsartRx.Count=0;
if(init_ok_flag)
{
LT268_TFT_DrawSquare_Fill(0,0,LCD_XSIZE_TFT-1,LCD_YSIZE_TFT-1,White);
LT268_TFT_ShowAscll(10,140,24,1,Red,Red,(UINT8 *)"User Area Data Error, Please Update User Area Data");
}
LT_ClearRxBuf();
N_BatteryData_Filling(0xa0);
while(1)
{
//显示屏处理逻辑
}
}
其中,LCD_BL_Init1()初始化配置如下:
void LCD_BL_Init1(UINT16 duty)
{
PWM0->U32PCSR.CSR1 = 1; // 时钟选择位 (设置1为分频4,即时钟为48/4=12Mhz)
PWM0->U32PPR.CP1 = 0; // 时钟预分频 (设置为0,即没分频,最终输出时钟还是为12Hhz)
PWM0->U32PCR.CH1MOD = 1; // 定时器输出反转开关(1:反转开 0:反转关)
PWM0->PCNR1 = 900; // 周期时间(12Mzh/120=100Khz,即输出为100Khz的频率)
PWM0->PCMR1 = duty; // 设置占空比,即最后的占空比为(60/120)*100% = 50%
PWM0->U32PPCR.PDDR |= (1<<1); // 设置PWM01为输出
PWM0->U32PCR.CH1EN = 1; // 使能PWM01
}
3.上电验证
可以就看到开机再无闪屏雪花