OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14587|回复: 13

OV7725摄像头的问题,320*240显示正常,改成640*480以后就显示错位了,求大神解答

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-7
在线时间
1 小时
发表于 2015-1-8 17:44:51 | 显示全部楼层 |阅读模式
5金钱



图像分成了三块,改了好久也没改成功,求解啊~
下面是截图程序:
[mw_shl_code=c,true]int Camera_shot(unsigned short int Width,\ unsigned short int Height,\ unsigned char *filename) { bmp 文件头 54个字节 * unsigned char header[54] = { 0x42, 0x4d, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int i; int j; long file_size; long width; long height; float Y; unsigned char gray; unsigned char r,g,b; unsigned char tmp_name[30]; unsigned int mybw; unsigned int read_data; char kk[4]={0,0,0,0}; /* 宽*高 +补充的字节 + 头部信息 */ file_size = (long)Width * (long)Height + Height*(Width%4) + 54; /* 文件大小 4个字节 */ header[2] = (unsigned char)(file_size &0x000000ff); header[3] = (file_size >> 8) & 0x000000ff; header[4] = (file_size >> 16) & 0x000000ff; header[5] = (file_size >> 24) & 0x000000ff; /* 位图宽 4个字节 */ width=Width; header[18] = width & 0x000000ff; header[19] = (width >> 8) &0x000000ff; header[20] = (width >> 16) &0x000000ff; header[21] = (width >> 24) &0x000000ff; /* 位图高 4个字节 */ height = Height; header[22] = height &0x000000ff; header[23] = (height >> 8) &0x000000ff; header[24] = (height >> 16) &0x000000ff; header[25] = (height >> 24) &0x000000ff; /* 将filename 按照一定的格式拷贝到 tmp_name */ sprintf((char*)tmp_name,"0:%s.bmp",filename); /* 注册一个工作区,逻辑号为0 */ f_mount(0, &bmpfs[0]); #if 0 /* 新建一个文件 */ bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_CREATE_NEW | FA_WRITE ); /* 新建文件之后要先关闭再打开才能写入 */ f_close(&bmpfsrc); bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_OPEN_EXISTING | FA_WRITE); #else bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_OPEN_ALWAYS | FA_WRITE); #endif if ( bmpres == FR_OK ) { /* 将预先定义好的bmp头部信息写进文件里面 */ bmpres = f_write(&bmpfsrc, header,sizeof(unsigned char)*54, &mybw); //FIFO_PREPARE; /* 下面是将指定窗口的数据读出来写到文件里面去 */ for(i=0; i<Height; i++) { if( !(Width%4) ) /* 刚好是4字节对齐 */ { for(j=0; j<Width; j++) { READ_FIFO_PIXEL(read_data); //read_data = pixel_data(); /*直接从FIFO中读取像素数据*/ r = GETR_FROM_RGB16(read_data); g = GETG_FROM_RGB16(read_data); b = GETB_FROM_RGB16(read_data); Y=((float)(r*299 + g*587 + b*140)+500)/1000; gray=(unsigned char)Y; bmpres = f_write(&bmpfsrc, &gray,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw); } } else { for(j=0;j<Width;j++) { read_data = pixel_data(); r = GETR_FROM_RGB16(read_data); g = GETG_FROM_RGB16(read_data); b = GETB_FROM_RGB16(read_data); Y=((float)(r*299 + g*587 + b*140)+500)/1000; gray=(unsigned char)Y; bmpres = f_write(&bmpfsrc, &gray,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw); //bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw); } /* 不是4字节对齐则需要补齐 */ bmpres = f_write(&bmpfsrc, kk,sizeof(unsigned char)*(Width%4), &mybw); } }/* 截屏完毕 */ f_close(&bmpfsrc); return 0; } else if ( bmpres == FR_EXIST ) //如果文件已经存在 { return FR_EXIST; //8 } else/* 截图失败 */ { return -1; } } [/mw_shl_code]
下面是ov7725场中断服务程序:
[mw_shl_code=c,true]/* ov7725 场中断 服务程序 */ void EXTI0_IRQHandler(void) { if ( EXTI_GetITStatus(EXTI_Line0) != RESET ) //检查EXTI_Line0线路上的中断请求是否发送到了NVIC { if( Ov7725_vsync == 0 ) { FIFO_WRST_L(); //拉低使FIFO写(数据from摄像头)指针复位 FIFO_WE_H(); //拉高使FIFO写允许 Ov7725_vsync = 1; FIFO_WE_H(); //使FIFO写允许 FIFO_WRST_H(); //允许使FIFO写(数据from摄像头)指针运动 } else if( Ov7725_vsync == 1 ) { FIFO_WE_L(); //拉低使FIFO写暂停 Ov7725_vsync = 2; } EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI_Line0线路挂起标志位 } }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-9 00:33:55 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-7
在线时间
1 小时
 楼主| 发表于 2015-1-9 00:48:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥给看看啥情况啊
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-7
在线时间
1 小时
 楼主| 发表于 2015-1-9 13:37:00 | 显示全部楼层
求大神解答啊,怎么没人啊。。。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-7
在线时间
1 小时
 楼主| 发表于 2015-1-9 13:53:02 | 显示全部楼层
还是没人么。。。
回复

使用道具 举报

27

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-8-14
在线时间
8 小时
发表于 2015-2-2 15:51:33 | 显示全部楼层
回复【5楼】blooddream2048:
---------------------------------
能看看你的OV7725寄存器配置么?
最近没吃药,感觉自己萌萌哒!
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-5-22
在线时间
23 小时
发表于 2018-8-9 10:51:56 | 显示全部楼层
我也是这样
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2019-6-28
在线时间
26 小时
发表于 2019-7-19 15:55:59 | 显示全部楼层
你好,请问图片错位的问题解决了么?
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2019-6-28
在线时间
26 小时
发表于 2019-7-19 16:35:55 | 显示全部楼层
你好,错位的原因是不是由于一帧640*480图像是614400bytes,而FIFO容量只有300Kbytes, 只能存一半的图像,去读FIFO时,读完前480*320个像素点,后面继续读的话,读的是重复的
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-10
在线时间
9 小时
发表于 2019-12-13 20:27:59 | 显示全部楼层
求答案,我也一样
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-6-8
在线时间
2 小时
发表于 2021-2-8 15:51:07 | 显示全部楼层
我的也是,问题定位也是FIFO容量不足,资料里给的解决方案是FIFO未写完一帧就开始从FIFO读取数据,求代码例子!
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-4-22
在线时间
2 小时
发表于 2021-5-19 18:59:44 | 显示全部楼层
帮顶,求问
回复

使用道具 举报

0

主题

39

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-6-13
在线时间
5 小时
发表于 2021-6-13 16:27:26 | 显示全部楼层
求解,同问.....
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-4-11
在线时间
2 小时
发表于 2021-7-20 17:08:37 | 显示全部楼层
还是没人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 06:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表