[mw_shl_code=c,true]
[/mw_shl_code]
参照原子哥的照相机实验修改了一下,JPEG图片数据(1600*1200)通过串口3发送到电脑,但是发现图片显示总是不正常。求大神和原子哥意见~~~
[mw_shl_code=c,true]
#define jpeg_dma_bufsize 10*1024 //定义JPEG DMA接收时数据缓存jpeg_buf0/1的大小(*4字节)
u32 *jpeg_buf0; //JPEG数据缓存buf,通过malloc申请内存
u32 *jpeg_buf1; //JPEG数据缓存buf,通过malloc申请内存
u32 *jpeg_data_buf; //JPEG数据缓存buf,通过malloc申请内存
/*
.......
*/
u8 jpeg_photo(u8 size)
{
u32 i;
u16 j;
u8 *p;
u8 key;
// u8 effect=0,saturation=2,contrast=2;
u8 msgbuf[15]; //消息缓存区
POINT_COLOR=BLUE;
//延时三秒防抖动
LCD_ShowString(30,50,200,16,16," 3");
delay_ms(1000);
LCD_ShowString(30,50,200,16,16," 2");
delay_ms(1000);
LCD_ShowString(30,50,200,16,16," 1");
delay_ms(1000);
LCD_Clear(WHITE);
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"ALIENTEK STM32F4");
LCD_ShowString(30,70,200,16,16,"OV2640 JPEG Mode");
sprintf((char*)msgbuf,"JPEG Size:%s",JPEG_SIZE_TBL[size]);
LCD_ShowString(30,180,200,16,16,msgbuf); //显示当前JPEG分辨率
ov2640_mode=1;
OV2640_JPEG_Mode(); //JPEG模式
dcmi_rx_callback=jpeg_dcmi_rx_callback;//回调函数
//My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)jpeg_buf0,(u32)jpeg_buf1,jpeg_dma_bufsize,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA配置(双缓冲模式)
OV2640_ImageWin_Set(0,0,1600,1200); //OV2640设置最大窗体
OV2640_OutSize_Set(1600,1200);//设置输出尺寸(默认为1600*1200) DCMI_Start(); //启动传输
while(jpeg_data_ok!=1); //等待第一帧图片采集完
jpeg_data_ok=2; //忽略本帧图片,启动下一帧采集。
while(jpeg_data_ok!=1); //等待第二帧图片采集完,前一帧数据可能不完整,第二帧才是我们需要的。
DCMI_Stop(); //停止DMA传输
LCD_ShowString(30,200,200,16,16,"Here");
if(jpeg_data_ok==1) //已经采集完一帧图像了
{
p=(u8*)jpeg_data_buf;
for(j=0;j<jpeg_data_len*4;j++) //查找JPEG头:0Xffd8
if((p[j]==0XFF)&&(p[j+1]==0XD8))break;
if(j==jpeg_data_len*4)
{
LCD_ShowString(30,200,200,16,16,"Can not find 0xffd8");//没找到0XFF,0XD8
return 0;
}
else//找到0xffd8位置
{
p+=j;//偏移到0XFFD8处
LCD_ShowString(30,240,210,16,16,"Sending JPEG data..."); //提示正在传输数据
for(i=0;i<jpeg_data_len*4-j;i++) //dma传输1次等于4字节,所以乘以4.
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
USART_SendData(USART3,p
);
//timex=100;
key=KEY_Scan(0);
if(key)break;
}
}
LCD_ShowString(30,210,210,16,16,"Send data complete!!");//提示传输结束设置
jpeg_data_len=0;
return 1;
}
return 0;
}
[/mw_shl_code]
---------------------------------
谢谢原子哥,1024*768图片能够正常显示了。
但为什么会这样呢,原子哥的示例代码在1600*1200像素下仅仅申请了两个5KB的内存,而我申请了两个10KB的内存啊?
一周热门 更多>