[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]#include "stm32f4xx.h"
#include "usart.h"
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usmart.h"
#include "sccb.h"
#include "ov2640.h"
#include "exti.h"
u32 JPEG_Cnt = 0;
extern u32 JpegDataCnt;
extern u8 JpegBuffer[10240];
extern u8 VsyncActive;
const u16 jpeg_img_size_tbl[][2]=
{
176,144, //QCIF
160,120, //QQVGA
352,288, //CIF
320,240, //QVGA
640,480, //VGA
800,600, //SVGA
1024,768, //XGA
1280,1024, //SXGA
1600,1200, //UXGA
};
const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"}; //7?????§
const u8*JPEG_SIZE_TBL[9]={"QCIF","QQVGA","CIF","QVGA","VGA","SVGA","XGA","SXGA","UXGA"}; //JPEG???? 9??????
int main(void)
{
u32 i;
u8 size=3; //??????QVGA 320*240????
u32 jpeglen=0;
u8 no=0;
uart_init(115200); //???????®???¨??????115200
delay_init(168); //?????????±????
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//?è????????????????·?×é2
LED_Init();
OV2640_Init();
OV2640_JPEG_Mode(); //JPEG????
OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);//?è??????????
SCCB_WR_Reg(0XFF,0X00);
SCCB_WR_Reg(0XD3,30);
SCCB_WR_Reg(0XFF,0X01);
SCCB_WR_Reg(0X11,0X1);
while(1)
{
for(i=0;i<10;i++) //???ú10????????OV2640×????÷?????¨????°×?????®?à???©
{
while(OV2640_VSYNC==1);
while(OV2640_VSYNC==0);
}
while(OV2640_VSYNC==1) //????????jpeg????
{
LED1=0;
while(OV2640_HREF)
{
LED2=0;
while(OV2640_PCLK==0);
JpegBuffer[jpeglen]=OV2640_DATA;
while(OV2640_PCLK==1);
LED2=1;
jpeglen++;
}
LED2=1;
no=1;
}
while(no)
{
for(i = 0; i < jpeglen; i ++)
{
USART_SendData(USART1,JpegBuffer
);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
jpeglen=0;
no=0;
}
}
}
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]u8 OV2640_Init(void)
{
u16 i=0;
u16 reg;
GPIO_InitTypeDef GPIO_InitStructure;
//?è??IO
//RCC_AHB1PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO, ENABLE); //?????à???????±??
//RCC_AHB1Periph_GPIOD
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOG, ENABLE); //?????à???????±??
//VSYNC????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//PD6????
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//???¨????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_0);
//HREF????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PG14????
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//???¨????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_1);
//PCLK????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PB4 ???? ????
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//???¨????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
//POWER ????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PB3 ????
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //????
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//???ì????
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_3);
//????????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //PG15????
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //????
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//???ì????
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_SetBits(GPIOG,GPIO_Pin_15);
GPIO_InitStructure.GPIO_Pin = 0xff; //PC0~7 ???? ????
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//???¨????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//????
GPIO_Init(GPIOE, &GPIO_InitStructure);
OV2640_PWDN=0; //POWER ON
delay_ms(10);
OV2640_RST=0; //????OV2640
delay_ms(10);
OV2640_RST=1; //?á??????
SCCB_Init(); //??????SCCB ??IO??
SCCB_WR_Reg(OV2640_DSP_RA_DLMT, 0x01); //??×÷sensor?????÷
SCCB_WR_Reg(OV2640_SENSOR_COM7, 0x80); //?í????OV2640
delay_ms(50);
reg=SCCB_RD_Reg(OV2640_SENSOR_MIDH); //?????§??ID ??°???
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_MIDL); //?????§??ID ??°???
if(reg!=OV2640_MID)
{
printf("MID:%d
",reg);
return 1;
}
reg=SCCB_RD_Reg(OV2640_SENSOR_PIDH); //?????§??ID ??°???
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_PIDL); //?????§??ID ??°???
if(reg!=OV2640_PID)
{
printf("HID:%d
",reg);
//return 2;
}
//?????? OV2640,????SXGA·?±???(1600*1200)
for(i=0;i<sizeof(ov2640_uxga_init_reg_tbl)/2;i++)
{
SCCB_WR_Reg(ov2640_uxga_init_reg_tbl[0],ov2640_uxga_init_reg_tbl[1]);
}
return 0x00; //ok
} [/mw_shl_code]
[/mw_shl_code]
[mw_shl_code=c,true]void OV2640_JPEG_Mode(void)
{
u16 i=0;
//?è??:YUV422????
for(i=0;i<(sizeof(ov2640_yuv422_reg_tbl)/2);i++)
{
SCCB_WR_Reg(ov2640_yuv422_reg_tbl[0],ov2640_yuv422_reg_tbl[1]);
}
//?è??:????JPEG????
for(i=0;i<(sizeof(ov2640_jpeg_reg_tbl)/2);i++)
{
SCCB_WR_Reg(ov2640_jpeg_reg_tbl[0],ov2640_jpeg_reg_tbl[1]);
}
}[/mw_shl_code]
[mw_shl_code=c,true]u8 OV2640_ImageWin_Set(u16 offx,u16 offy,u16 width,u16 height)
{
u16 hsize;
u16 vsize;
u8 temp;
if(width%4)return 1;
if(height%4)return 2;
hsize=width/4;
vsize=height/4;
SCCB_WR_Reg(0XFF,0X00);
SCCB_WR_Reg(0XE0,0X04);
SCCB_WR_Reg(0X51,hsize&0XFF); //?è??H_SIZE????°???
SCCB_WR_Reg(0X52,vsize&0XFF); //?è??V_SIZE????°???
SCCB_WR_Reg(0X53,offx&0XFF); //?è??offx????°???
SCCB_WR_Reg(0X54,offy&0XFF); //?è??offy????°???
temp=(vsize>>1)&0X80;
temp|=(offy>>4)&0X70;
temp|=(hsize>>5)&0X08;
temp|=(offx>>8)&0X07;
SCCB_WR_Reg(0X55,temp); //?è??H_SIZE/V_SIZE/OFFX,OFFY??????
SCCB_WR_Reg(0X57,(hsize>>2)&0X80); //?è??H_SIZE/V_SIZE/OFFX,OFFY??????
SCCB_WR_Reg(0XE0,0X00);
return 0;
} [/mw_shl_code]
大哥能发你的代码看看吗?我的邮箱是416954665@qq.com
一周热门 更多>