探索者F4开发板 摄像头实验/照相机实验/综合实验 使用9320、9325等LCD不能正常显示的bug解决方法

2019-07-20 23:20发布

今天遇到一个探索者客户用9320的LCD液晶模块,使用OV2640摄像头的时候,出现条纹状显示。
画了半个下午找到了这个问题点,是探索者程序的bug。
问题现象:综合实验,进入照相机功能后,出现横条纹,并不出现完整的画面。
问题原因:因为探索者开发板兼容了N多LCD型号,有些LCD写入比较慢,故将部分LCD的写入速度放慢了,统一用54ns,但是实际上
摄像头输出的数据流比较快,用54ns会导致写入LCD的速度,更不上摄像头的输出速度,因此出现数据混叠/丢失,形成横条纹画面。
解决办法:LCD_Init函数里面,有如下代码: [mw_shl_code=c,true] //写时序控制寄存器 FSMC_Bank1E->BWTR[6]|=0<<28; //模式A FSMC_Bank1E->BWTR[6]|=9<<0; //地址建立时间(ADDSET)为9个HCLK=54ns //9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。 FSMC_Bank1E->BWTR[6]|=8<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code] 9,和8,两个参数,控制着LCD的写入速度。54ns太慢了。
修改为6和5,这样写入速度为36ns,可以满足摄像头正常显示需求。
修改后代码如下: [mw_shl_code=c,true] //写时序控制寄存器 FSMC_Bank1E->BWTR[6]|=0<<28; //模式A FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为9个HCLK=54ns //9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。 FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code] 经过这样的修改后,9320、9325,1505,C505等一批LCD都可以正常显示了。
对于个别LCD,比如6804/C505,还需要将LCD_Init函数,另外一段代码也做修改,如下: [mw_shl_code=c,true] }else if(lcddev.id==0X6804||lcddev.id==0XC505) //6804/C505速度上不去,得降低 { //重新配置写时序控制寄存器的时序 FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零 FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零 FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为10个HCLK =60ns FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*13个HCLK=78ns }[/mw_shl_code] 至此,本bug修正完成。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。