STM32F407+OV2640的jpeg模式,串口输出图像不清晰

2019-07-20 20:37发布

正在学习OV2640模块,STM32F407+OV2640,STM32F4中断采集图片,通过串口传到上位机,分辨率1600*1200,图像已经可以显示出来,但每张图片大小仅仅4K,纠结了好几天,实在没找到答案,求帮忙解答
焦距已经调到最佳,摄像头距离物体80cm,是不是分辨率有错


[mw_shl_code=c,true]int main(void) { Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz delay_init(168); //初始化延时函数 uart_init(84,115200); //初始化串口波特率为115200 //usart3_init(42,115200); //初始化串口3 usart2_init(); //初始化串口3 u1_printf("usart1_init OK "); u1_printf("usart2_init OK "); u1_printf("usart3_init OK "); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 while(OV2640_Init()); //摄像头初始化 OV2640_ImageWin_Set(0,0,1600,1200); //设置图像开窗大小 OV2640_ImageSize_Set(1600,1200);//该函数设置图像尺寸大小,也就是所选格式的输出分辨率 u1_printf("摄像头初始化 OK "); delay_ms(200); MNDCMI_Init(); //DCMI配置 Open_NVIC(EXTI4_IRQn); while(1) { if(DMCI_OK==1) { // u1_printf("数据已经准备好 OK "); // usart_sendJPEGdata(); Stop_NVIC(EXTI4_IRQn); while(OV2640_Init()); //摄像头初始化 OV2640_ImageWin_Set(0,0,1600,1200); //设置图像开窗大小 OV2640_ImageSize_Set(1632,1220);//该函数设置图像尺寸大小,也就是所选格式的输出分辨率 // OV2640_Window_Set(2,2,1600,1200);//设置图像输出窗口 // OV2640_OutSize_Set(1600,1200);//设置图像输出大小 //OV2640_Light_Mode(0);//白平衡设置 0:自动//1:太阳sunny//2,阴天cloudy//3,办公室office//4,家里home // OV2640_Auto_Exposure(0);//OV2640自动曝光等级设置 level:0~4 // OV2640_Color_Saturation(0);// {MOD}度设置//0:-2//1:-1//2,0//3,+1//4,+2 //OV2640_Brightness(0);//亮度设置//00X00)-2//10X10)-1//2,(0X20) 0//3,(0X30)+1//4,(0X40)+2 //OV2640_Contrast(0);//对比度设置//0:-2//1:-1//2,0//3,+1//4,+2 DMCI_OK=0; Open_NVIC(EXTI4_IRQn); } } } #ifndef _OV2640CFG_H #define _OV2640CFG_H #include "ov2640.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK STM32F407开发板 //OV2640 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //创建日期:2014/5/14 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2014-2024 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //OV2640 SXGA初始化寄存器序列表 //此模式下帧率为15帧 //SXGA(1600*1200) const u8 ov2640_sxga_init_reg_tbl[][2]= { //不变的 0xff, 0x00, //0xff set to 0x00 0x2c, 0xff, //rsvd 0x2e, 0xdf, //rsvd 0xff, 0x01, //0xff set to 0x01 0x3c, 0x32, //rsvd //分频 0x11, 0x30, //CLKRC BIT[5:0] CLK=XVCLK/(bit[5:0]+1) 0x09, 0x02, //COM2 //改变摄像头采集方向 0x04, 0x28, //REG04 原来的 // 0x04, 0xD8,//水平镜像,垂直翻转 0x13, 0xe5, //COM8 0x14, 0x48, //COM9 0x2c, 0x0c, //rsvd 0x33, 0x78, //rsvd 0x3a, 0x33, //rsvd 0x3b, 0xfB, //rsvd 0x3e, 0x00, //rsvd 0x43, 0x11, //rsvd 0x16, 0x10, //rsvd 0x39, 0x92, //rsvd //没变化 //******************************// //MCLK 24Mhz, SVGA RGB565 output 25fps //OV2640_SVGA_YUV_AM 14.3 fps 24 MHz //原来的 /********************************* 0x35, 0xda, //rsvd 0x22, 0x1a, //rsvd 0x37, 0xc3, //rsvd 0x23, 0x00, //rsvd 0x34, 0xc0, //ARCOM2 0x36, 0x1a, //rsvd 0x06, 0x88, //rsvd 0x07, 0xc0, //rsvd 0x0d, 0x87, //COM4 0x0e, 0x41, //rsvd 0x4c, 0x00, //rsvd *********************************/ //******************************// // OV2640_UXGA_YUV_AM 7.5 fps 24 MHz /*********************************/ 0x35, 0x88, 0x22, 0x0a, 0x37, 0x40, 0x23, 0x00, 0x34, 0xa0, 0x36, 0x1a, 0x06, 0x02, 0x07, 0xc0, 0x0d, 0xb7, 0x0e, 0x01, 0x4c, 0x00, /*********************************/ 0x48, 0x00, //COM19 0x5B, 0x00, //rsvd 0x42, 0x03, //rsvd 0x4a, 0x81, //rsvd 0x21, 0x99, //rsvd 0x24, 0x40, //AEW 0x25, 0x38, //AEB 0x26, 0x82, //VV 0x5c, 0x00, //rsvd 0x63, 0x00, //rsvd 0x46, 0x00, 0x0c, 0x38, 0x61, 0x70, //HISTO_LOW 0x62, 0x80, //HISTO_HIGH 0x7c, 0x05, //rsvd 0x20, 0x80, //rsvd 0x28, 0x30, //rsvd 0x6c, 0x00, //rsvd 0x6d, 0x80, //rsvd 0x6e, 0x00, //rsvd 0x70, 0x02, //rsvd 0x71, 0x94, //rsvd 0x73, 0xc1, //rsvd 0x3d, 0x34, 0x5a, 0x57, 0x12, 0x00,//UXGA 1600*1200 // 0x12, 0x40, //COM7 0x40 for SVGA mode 0x20 for CIF mode 0x17, 0x11, //HREFST 0x18, 0x43, //HREFEND 0x19, 0x00, //VSTRT 0x1a, 0x4b, //VEND 0x32, 0x09, //REG32 0x37, 0xc0, //resvd 0x4f, 0x60, //DB50 0x50, 0xa8, //DB60 0x6d, 0x00, //rsvd 0x3d, 0x38, //rsvd 0x46, 0x3f, //FLL 0x4f, 0x60, //DB50 0x0c, 0x3c, //COM3 0xff, 0x00, //0xff set to 0x00 0xe5, 0x7f, //rsvd 0xf9, 0xc0, //MC_BIST 0x41, 0x24, //rsvd 0xe0, 0x14, //RESET 0x76, 0xff, //rsvd 0x33, 0xa0, //rsvd 0x42, 0x20, //rsvd 0x43, 0x18, //rsvd 0x4c, 0x00, //rsvd 0x87, 0xd5, //CTRL3 0x88, 0x3f, //rsvd 0xd7, 0x03, //rsvd 0xd9, 0x10, //rsvd // 0xd3, 0x82, //R_DVP_SP set 1/12 XCLK default 0x82, 0xc8, 0x08, //rsvd 0xc9, 0x80, //rsvd // 0x7c, 0x00, //BPADDR[3:0] // 0x7d, 0x00, //BPADDR[7:0] // 0x7c, 0x03, //BPADDR[3:0] // 0x7d, 0x48, //BPADDR[7:0] // 0x7d, 0x48, //BPADDR[7:0] 0x7c, 0x08, //BPADDR[3:0] // 0x7d, 0x20, //BPADDR[7:0] // 0x7d, 0x10, //BPADDR[7:0] 0x7d, 0x0e, //BPADDR[7:0] 0x90, 0x00, //rsvd /* 0x91, 0x0e, //rsvd 0x91, 0x1a, //rsvd 0x91, 0x31, //rsvd 0x91, 0x5a, //rsvd 0x91, 0x69, //rsvd 0x91, 0x75, //rsvd 0x91, 0x7e, //rsvd 0x91, 0x88, //rsvd 0x91, 0x8f, //rsvd 0x91, 0x96, //rsvd 0x91, 0xa3, //rsvd 0x91, 0xaf, //rsvd 0x91, 0xc4, //rsvd 0x91, 0xd7, //rsvd 0x91, 0xe8, //rsvd */ 0x91, 0x20, //rsvd 0x92, 0x00, //rsvd /* 0x93, 0x06, //rsvd 0x93, 0xe3, //rsvd 0x93, 0x05, //rsvd 0x93, 0x05, //rsvd 0x93, 0x00, //rsvd 0x93, 0x04, //rsvd 0x93, 0x00, //rsvd 0x93, 0x00, //rsvd 0x93, 0x00, //rsvd 0x93, 0x00, //rsvd 0x93, 0x00, //rsvd 0x93, 0x00, //rsvd */ 0x93, 0x00, //rsvd 0x96, 0x00, //rsvd /* 0x97, 0x08, //rsvd 0x97, 0x19, //rsvd 0x97, 0x02, //rsvd 0x97, 0x0c, //rsvd 0x97, 0x24, //rsvd 0x97, 0x30, //rsvd 0x97, 0x28, //rsvd 0x97, 0x26, //rsvd 0x97, 0x02, //rsvd 0x97, 0x98, //rsvd 0x97, 0x80, //rsvd 0x97, 0x00, //rsvd */ 0x97, 0x00, //rsvd 0xc3, 0xed, //CTRL1 0xa4, 0x00, //rsvd 0xa8, 0x00, //rsvd 0xc5, 0x11, //rsvd 0xc6, 0x51, //rsvd 0xbf, 0x80, //rsvd 0xc7, 0x10, //rsvd 0xb6, 0x66, //rsvd 0xb8, 0xA5, //rsvd 0xb7, 0x64, //rsvd 0xb9, 0x7C, //rsvd 0xb3, 0xaf, //rsvd 0xb4, 0x97, //rsvd 0xb5, 0xFF, //rsvd 0xb0, 0xC5, //rsvd 0xb1, 0x94, //rsvd 0xb2, 0x0f, //rsvd 0xc4, 0x5c, //rsvd 0xc0, 0x64, //HSIZE8[7:0] 0xc1, 0x4B, //VSIZE8[7:0] 0x8c, 0x00, //SIZEL[5:0] 0x86, 0x3D, //CTRL2 0x50, 0x00, //CTRL1[7:0] 0x51, 0xC8, //HSIZE[7:0] 0x52, 0x96, //VSIZE[7:0] 0x53, 0x00, //XOFFL[7:0] 0x54, 0x00, //YOFFL[7:0] 0x55, 0x00, //VHYX[7:0] 0x5a, 0xC8, //ZMOW[7:0] 0x5b, 0x96, //ZMOH[7:0] 0x5c, 0x00, //ZMHH[1:0] /* 0xc0, 0x16, //set QCIF,see OV2640 datasheet P18 0xc1, 0x12, // 0x8c, 0x00, //0x8c是HSIZE和VSIZE的低3位,这里配置为0,就相当于实际分辨率,然后除以8,就是0XC0和0XC1的值 0x86, 0x3D, 0x50, 0x00, // 0x51, 0x2c, //H_SIZE,V_SIZE,配置值是实际分辨率/4 0x52, 0x24, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x5a, 0x2c, //OUT_W、OUT_H,配置值是实际分辨率/4 0x5b, 0x24, 0x5c, 0x00, */ 0xd3, 0x7f, //R_DVP_SP {0xd3, 0x82} changed 0xc3, 0xed, //CTRL1 0x7f, 0x00, //rsvd 0xda, 0x00, //IMAGE_MODE image output format select 0xe5, 0x1f, //revd 0xe1, 0x67, //rsvd 0xe0, 0x00, //RESET 0xdd, 0x7f, //rsvd 0x05, 0x00, //R_BYPASS 0xe0, 0x04, //RESET 0xc0, 0x16, //HSIZE8[7:0] set QCIF,see OV2640 datasheet P18 0xc1, 0x12, //VSIZE8[7:0] 0x8c, 0x00, //SIZEL[5:0] 0x86, 0x3D, //CTRL2 0x50, 0x00, //CTRL1[7:0] 0x51, 0x2c, //HSIZE[7:0] 0x52, 0x24, //VSIZE[7:0] 0x53, 0x00, //XOFFL[7:0] 0x54, 0x00, //YOFFL[7:0] 0x55, 0x00, //VHYX[7:0] 0x5a, 0x2c, //ZMOW[7:0] 0x5b, 0x24, //ZMOH[7:0] 0x5c, 0x00, //ZMHH[1:0] 0xd3, 0x7f, //R_DVP_SP set DVP PCLK 0xFF,0x00, 0x05,0x00, 0xDA,0x00, //0x00 for High byte first YUYV ,0x01 Low byte first UYVY 0xD7,0x03, //{0xD7, 0x01}, 0x33,0xa0, //version 1.01 0xe1,0x67, //version 1.01 0x00,0x00, 0xe0, 0x00, //RESET //然后是JPEG配置参数: 0xFF, 0x00, 0xe0, 0x00, //{0xe0, 0x14} 0x05, 0x00, 0x44, 0x03, // 0xDA, 0x10, 0xD7, 0x03, 0xDF, 0x00, 0x33, 0x80, //{0x33, 0x80}, 0x3C, 0x40, //{0x3C, 0x40}, 0xe1, 0x77, //{0xe1, 0x77}, }; #endif [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。