OpenEdv-开源电子网

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

F103驱动OV2640采集图像的问题

[复制链接]

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
发表于 2015-11-12 12:01:08 | 显示全部楼层 |阅读模式
5金钱
我在用F103驱动OV2640采集图像后利用LCD进行显示,现在的问题是LCD显示的图像是花的,我用示波器测试OV2640的VSYNC信号,HREF信号和PCLK信号,如下图所示。OV2640的时钟由12MHz的有源晶振提供,最后,贴出部分代码,请问造成以上现象的原因是什么?
[mw_shl_code=c,true]#include "stm32f10x.h" #include <stdio.h> #include "SysTick.h" #include "platform_config.h" #include "lcd.h" #include "ov2640.h" #include "led.h" #include "malloc.h" #include "dma.h" #include "string.h" #define ov2640_JPEG_WITH 1024 // JPEG拍照的宽度 #define ov2640_JPEG_HEIGHT 768 // JPEG拍照的高度 u8 *ov2640_framebuf; // ov2640的帧缓存 u8 ov_framebuf = 0; // 拍照的帧数 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* ov2640的速度控制 */ // 根据LCD尺寸的不同,设置不同的参数 void ov2640_Speed_Ctrl(void) { u8 clkdiv; // 时钟分频系数 u8 pclkdiv; // PCLK分频系数 if(lcddev.width==240) // 2.8寸LCD { clkdiv = 1; pclkdiv = 28; } else if(lcddev.width==320) // 3.5寸LCD { clkdiv = 3; pclkdiv = 30; } else // 4.3寸和7寸LCD { clkdiv = 15; pclkdiv = 4; } ov2640_WriteReg(0xff, 0x00); ov2640_WriteReg(0xd3, pclkdiv); // 设置PCLK分频 ov2640_WriteReg(0xff, 0x01); ov2640_WriteReg(0x11, clkdiv); // 设置XCLK分频 } int main(void) { #ifdef DEBUG debug(); #endif u16 linecnt; // 行数统计 u16 pixcnt; // 像素统计 RCC_Configuration(); NVIC_Config(NVIC_PriorityGroup_2); LED_Init(); SysTick_Init(); LCD_Init(); Delay_ms(100); my_mem_init(SRAMIN); ov2640_framebuf = mymalloc(SRAMIN, 40*1024); // 为ov2640申请帧缓存 while(!ov2640_framebuf) { LCD_ShowString(20,150,300,16,16,"Memory distributed error."); } while(ov2640_Init()!=0) { LCD_ShowString(20,100,300,16,16,"Camera initalize error."); Delay_ms(1000); LCD_Fill(0,0,239,319,WHITE); Delay_ms(1000); LCD_Fill(0,0,239,319,BLACK); Delay_ms(1000); LEDs_Blink(500); } LCD_ShowString(10,100,300,16,16,"Camera initalize successfully."); ov2640_RGB565Config(); ov2640_Outsize_Set(lcddev.width, lcddev.height); ov2640_Speed_Ctrl(); DMA_SRAMLCD_Init((u32)ov2640_framebuf); while (1) { // LEDs_Run(200); while(ov2640_VSYNC); while(!ov2640_VSYNC) { LCD_SetCursor(0,0); // LCD设置坐标 LCD_WriteGRAM_Prepare(); // 开始写GRAM linecnt = 0; pixcnt = 0; while(linecnt<lcddev.height) { while(ov2640_HREF) { while(ov2640_PCLK==0); ov2640_framebuf[pixcnt++] = ov2640_DATA; while(ov2640_PCLK==1); while(ov2640_PCLK==0); ov2640_framebuf[pixcnt++] = ov2640_DATA; while(ov2640_PCLK==1); } if(pixcnt) { DMA_SRAMLCD_Enable(); // 启动DMA数据传输 pixcnt = 0; linecnt++; } } } }//end while(1) }//end main() #ifdef DEBUG[/mw_shl_code]


PCLK波形图:


HREF波形图3:


HREF波形图2:


HREF波形图1:


VSYNC波形图:


LCD显示效果图:

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

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-12 15:38:59 | 显示全部楼层
@正点原子,我今天用V3试了一下您的ATK-OV2640的参考例程,发现LCD显示的图像也是花的,而且可能是LCD配置的原因,图像还没有充满屏幕,请问大家之前遇到过这种情况吗?
回复

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2015-11-12 19:28:48 | 显示全部楼层
确定摄像头是能够正常工作的?
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-12 22:03:24 | 显示全部楼层
回复【3楼】hpeng1874:
---------------------------------
嗯,摄像头硬件应该是能正常工作的,因为摄像头的ID号,初始化都没问题,而且D7~D0也有数据,通过串口能够读到。但是不知道是寄存器配置的问题,还是时序或者逻辑的问题,总之LCD显示却有很大的问题。
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-12 22:04:33 | 显示全部楼层
回复【3楼】hpeng1874:
---------------------------------
还有可能是因为PCB的问题,但是我不确定,所以请教论坛里有经验的朋友,我这个问题到底出在哪里。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-13 20:53:03 | 显示全部楼层
很想是你mcu速度跟不上导致的。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-14 11:05:06 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我用的是STM32F103VCT6,采用外部8MHz的晶振,内部倍频到72MHz,以现在的情况有办法解决吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-15 23:50:02 | 显示全部楼层
回复【7楼】wangyueming:
---------------------------------
降低2640速度试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-16 09:48:00 | 显示全部楼层
回复【8楼】正点原子:
------------------------------
我把clkdiv和pclkdiv都调整了,pclkdiv = 47;clkdiv = 10,效果还是不行啊,我在想会不会是我的硬件出现了问题,比如布线问题和串扰的问题?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-17 23:14:19 | 显示全部楼层
回复【9楼】wangyueming:
---------------------------------
只能慢慢查了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
 楼主| 发表于 2015-11-18 11:04:10 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
好的,那我再找找原因吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 07:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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