中级会员
 
- 积分
- 432
- 金钱
- 432
- 注册时间
- 2016-4-7
- 在线时间
- 87 小时
|
20金钱
本帖最后由 zway 于 2016-12-3 15:54 编辑
STM32F103RCT6控制OV2640摄像头,通过串口输出JPEG数据到电脑,由串口助手查看数据确实是一幅由FF D8~FF D9的JPEG数据,但是在电脑上无法看图片,如下图,有人知道这是什么原因吗
程序是这样的:
void ov2640_jpg_photo()
{
u8 res=0;
u32 i=0;
u32 jpeglen=0;
u8* pbuf;
OV2640_JPEG_Mode(); //切换为JPEG模式
OV2640_OutSize_Set(OV2640_JPEG_WIDTH,OV2640_JPEG_HEIGHT);
SCCB_WR_Reg(0XFF,0X00);
SCCB_WR_Reg(0XD3,30);
SCCB_WR_Reg(0XFF,0X01);
SCCB_WR_Reg(0X11,0X1);
for(i=0;i<10;i++) //丢弃10帧,等待OV2640自动调节好(曝光白平衡之类的)
{
while(OV2640_VSYNC==1);
while(OV2640_VSYNC==0);
}
while(OV2640_VSYNC==1) //开始采集jpeg数据
{
while(OV2640_HREF)
{
while(OV2640_PCLK==0);
ov2640_framebuf[jpeglen]=OV2640_DATA;
while(OV2640_PCLK==1);
jpeglen++;
}
}
pbuf=(u8*)ov2640_framebuf;
for(i=0;i<jpeglen;i++)//查找0XFF,0XD8
{
if((pbuf==0XFF)&&(pbuf[i+1]==0XD8))break;
}
if(i==jpeglen)res=0XFD;//没找到0XFF,0XD8
else //找到了
{
pbuf+=i;//偏移到0XFF,0XD8处
usart_send(pbuf, jpeglen); //串口输出
}
}
int main(void)
{
delay_init(); //延时函数初始化
LED_Init();
SPI1_Init();
uart_init(115200);
while(OV2640_Init()); //初始化OV2640
delay_ms(1500);
ov2640_speed_ctrl();
while(1)
{
while(OV2640_VSYNC) //等待帧信号
{
ov2640_jpg_photo();
ov2640_speed_ctrl();
// delay_ms(1000);
}
}
}
|
-
最佳答案
查看完整内容[请看2#楼]
确实是数据有丢失,把OV2640的寄存器 (0XD3 和 0X11 )两个时钟分频设置高一点就看到图像了
|