@原子哥,麻烦你帮忙看一下程序,下面是主函数里面的修改,其他地方都没有动(修改自试验35 摄像头试验)
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "usmart.h"
#include "usart2.h"
#include "timer.h"
#include "ov2640.h"
#include "dcmi.h"
//ALIENTEK ???÷??STM32F407??·?°? ???é35
//?????· ???é -??????°?±?
//?????§????www.openedv.com
//??±??ê????http://openedv.taobao.com
//?????????í??×?????????????
//×÷??????????×? @ALIENTEK
u8 ov2640_mode=0; //?¤×÷????:0,RGB565????;1,JPEG????
#define jpeg_buf_size 31*1024 //?¨??JPEG????????jpeg_buf???ó??(*4×???)
__align(4) u32 jpeg_buf[jpeg_buf_size]; //JPEG????????buf
volatile u32 jpeg_data_len=0; //buf????JPEG???§?????¤??
volatile u8 jpeg_data_ok=0; //JPEG?????????ê??±ê??
//0,?????????????ê;
//1,?????????ê??,???????????í;
//2,???????????í?ê????,??????????????????
//JPEG?????§????±í
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??????
//???íJPEG????
//?±?????ê????JPEG?????ó,?÷????????,????JPEG BUF.??????????????.
void jpeg_data_process(void)
{
if(ov2640_mode)//??????JPEG??????,???è??×????í.
{
if(jpeg_data_ok==0) //jpeg?????????????ê?
{
DMA_Cmd(DMA2_Stream1, DISABLE);//?????±?°????
while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//????DMA2_Stream1??????
jpeg_data_len=jpeg_buf_size-DMA_GetCurrDataCounter(DMA2_Stream1);//???????????????????¤??
jpeg_data_ok=1; //±ê??JPEG?????????ê°???,???????????????í
}
if(jpeg_data_ok==2) //????????jpeg????????±????í??
{
DMA2_Stream1->NDTR=jpeg_buf_size;
DMA_SetCurrDataCounter(DMA2_Stream1,jpeg_buf_size);//?????¤????jpeg_buf_size*4×???
DMA_Cmd(DMA2_Stream1, ENABLE); //????????
jpeg_data_ok=0; //±ê????????????
}
}
}
//JPEG????
//JPEG????,?¨???®??2·?????????.
void jpeg_test(void)
{
u32 i;
u8 *p;
u8 key;
u8 effect=0,saturation=2,contrast=2;
u8 size=3; //??????QVGA 320*240????
u8 scale=1; //??????????????·?
u8 msgbuf[15]; //??????????
OV2640_JPEG_Mode(); //JPEG????
My_DCMI_Init(); //DCMI????
DCMI_DMA_Init((u32)&jpeg_buf,jpeg_buf_size,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA????
OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);//?è??????????
//////////////?????è??////////////////////////////
//??±????è??0-4
OV2640_Contrast(contrast);
DCMI_Stop(); //????????
//??±????è??0-4
OV2640_Contrast(contrast);
//±?????Saturation
OV2640_Color_Saturation(saturation);
//???§?è??
OV2640_Special_Effects(effect);//?è?????§
//1:1????(????????????)/??·?
scale=1;//scale=!scale;
/*if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-lcddev.height)/2,lcddev.width,lcddev.height);//1:1????????
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Full Size 1:1");
}else
{
OV2640_ImageWin_Set(0,0,240,240); //????????·?
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Scale");
}*/
/////////////////////////////////////////////
DCMI_Start(); //????????
while(1)
{
if(jpeg_data_ok==1) //?????????ê??????????
{
p=(u8*)jpeg_buf;
//printf("Sending JPEG data..."); //?á??????????????
for(i=0;i<jpeg_data_len*4;i++) //dma????1??????4×???,?ù??????4.
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //???··???,?±??·????ê±?
if(p==0xff&&p[i+1]==0xd8)
i=i;
USART_SendData(USART2,p);
// delay_us(10);
}
delay_ms(200);
jpeg_data_ok=2; //±ê??jpeg???????í?ê??,??????DMA??????????????.
}
}
}
//RGB565????
//RGB?????±????????LCD????
void rgb565_test(void)
{
u8 key=0;
u8 effect=0,saturation=2,contrast=2;
u8 scale=1; //??????????????·?
u8 msgbuf[15]; //??????????
// printf("OV2640 RGB565 Mode\r\n");
// printf("KEY0:Contrast\r\n"); //??±???
// printf("KEY1:Saturation\r\n"); //????±?????
// printf("KEY2:Effects\r\n"); //???§
// printf("KEY_UP:FullSize/Scale\r\n"); //1:1????(????????????)/????????·?
//
OV2640_RGB565_Mode(); //RGB565????
My_DCMI_Init(); //DCMI????
DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA????
OV2640_OutSize_Set(lcddev.width,lcddev.height);
//////////////?????è??////////////////////////////
//??±????è??0-4
OV2640_Contrast(contrast);
DCMI_Stop(); //????????
//??±????è??0-4
OV2640_Contrast(contrast);
//±?????Saturation
OV2640_Color_Saturation(saturation);
//???§?è??
OV2640_Special_Effects(effect);//?è?????§
//1:1????(????????????)/??·?
scale=1;//scale=!scale;
if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-lcddev.height)/2,lcddev.width,lcddev.height);//1:1????????
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Full Size 1:1");
}else
{
OV2640_ImageWin_Set(0,0,240,240); //????????·?
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Scale");
}
/////////////////////////////////////////////
DCMI_Start(); //????????
while(1)
{
if(key)
{
DCMI_Stop(); //????????
//??±????è??0-4
OV2640_Contrast(contrast);
//±?????Saturation
OV2640_Color_Saturation(saturation);
//???§?è??
OV2640_Special_Effects(effect);//?è?????§
//1:1????(????????????)/??·?
scale=1;//scale=!scale;
if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-lcddev.height)/2,lcddev.width,lcddev.height);//1:1????????
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Full Size 1:1");
}else
{
OV2640_ImageWin_Set(0,0,1600,1200); //????????·?
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Scale");
}
delay_ms(800);
DCMI_Start();//????????????
}
//delay_ms(10);
}
}
int main(void)
{
u8 key;
u8 t;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//?è????????????????·?×é2
delay_init(168); //?????????±????
uart_init(115200); //???????®???¨??????115200
usart2_init(42,115200); //???????®??2?¨??????115200
LED_Init(); //??????LED
KEY_Init(); //°??ü??????
TIM3_Int_Init(10000-1,8400-1);//10Khz????,1????????????
usmart_dev.init(84); //??????USMART
while(OV2640_Init())//??????OV2640
{
printf("OV2640 ERR");
delay_ms(200);
}
printf("OV2640 OK");
//ov2640_mode=0;//RGB565????
ov2640_mode=1; //JPEG????
delay_ms(5);
if(ov2640_mode)jpeg_test();
else rgb565_test();
}
[/mw_shl_code]
|