有客户用我们的F4板子+4.3屏+摄像头模块配置SVGA输出,说花屏,所以特地花了点时间,写了个demo.
其实我们例程兼容性已经做的很好了.非常容易改.
第一步,修改OV2640_Init函数的配置,将原来的UXGA改为SVGA,如下:
[mw_shl_code=c,true] //初始化 OV2640,采用SVGA分辨率(800*600)
for(i=0;i<sizeof(ov2640_svga_init_reg_tbl)/2;i++)
{
SCCB_WR_Reg(ov2640_svga_init_reg_tbl[0],ov2640_svga_init_reg_tbl[1]);
} [/mw_shl_code]
第二步,因为4.3是800*480的,高度有800个像素,如过600*800的SVGA,设置输出尺寸为800*480,图像势必混乱.故需要设置LCD开窗为600*480,即可解决问题,修改main函数如下:
[mw_shl_code=c,true]int main(void)
{
u8 key;
u8 t;
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
delay_init(168); //延时初始化
uart_init(84,115200); //初始化串口波特率为115200
usart2_init(42,115200); //初始化串口2波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
if(lcddev.height>600)
{
lcddev.height=600; //SVGA模式,必须不能大于600.
LCD_Set_Window(0,0,480,600);//设置开窗口为480*600.
}
KEY_Init(); //按键初始化
TIM3_Int_Init(10000-1,8400-1);//10Khz计数,1秒钟中断一次
usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//设置字体为红 {MOD}
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"OV2640 TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/14");
while(OV2640_Init())//初始化OV2640
{
LCD_ShowString(30,130,240,16,16,"OV2640 ERROR");
delay_ms(200);
LCD_Fill(30,130,239,170,WHITE);
delay_ms(200);
LED0=!LED0;
}
LCD_ShowString(30,130,200,16,16,"OV2640 OK");
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES) //RGB565模式
{
ov2640_mode=0;
break;
}else if(key==KEY1_PRES) //JPEG模式
{
ov2640_mode=1;
break;
}
t++;
if(t==100)LCD_ShowString(30,150,230,16,16,"KEY0:RGB565 KEY1:JPEG"); //闪烁显示提示信息
if(t==200)
{
LCD_Fill(30,150,210,150+16,WHITE);
t=0;
LED0=!LED0;
}
delay_ms(5);
}
if(ov2640_mode)jpeg_test();
else rgb565_test();
}
[/mw_shl_code]
其实就是增加了几行代码:
if(lcddev.height>600)
{
lcddev.height=600; //SVGA模式,必须不能大于600.
LCD_Set_Window(0,0,480,600);//设置开窗口为480*600.
}
强制设置LCD尺寸高度为600,然后设置开窗为480*600即可.
至此修改完毕,下载进去就可以看到30帧的输出速度,480*600的图像.
工程源码见附件.
我也是有断层的现象,比你断得还严重,请问解决了吗?
一周热门 更多>