首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32直接驱动OV7660摄像头成功(2)

STM32直接驱动OV7660摄像头成功(2)

数据口:PD0~PD15------------------------------------
调试SCCB有几个是我认为比较重要的,
一是一定要给摄像头系统时钟,你可以用stm32输出一个8M的时钟接到XCK1,太快了不行,我觉得SCCB工作的时候也是需要系统时钟提供的。
二是SCCB的data脚要上拉,在STM32io口设置的时候,要设置成上拉。设置成输入的时候上拉,我测试过,不上拉就不成功。
三是有个延时函数,时间不能够太短,还要小心你的延时代码不要被编译器优化掉了。

SCCB的代码我没有仔细看,是直接拿  wangguanfu  的AVR的代码来改的,只改了io口操作的部分,直接就成功了。
请直接看代码。

要有数据输出的话,首先要提供时钟,一定要提供时钟。我觉得不用配置也能有数据输出,没有实测,你就先把SCCB调好了再进行下一步吧。
----------------------------------------------

直接写BSRR会比GPIO_SetBits()快很多倍,在要求速度的情况下,我喜欢直接写BSRR
----------------------------------------------
我把它再初始化成了普通IO口了,然后由自己控制时钟。
它已经没有时钟输出了,除非你自己去控制io口输出时钟。
我就是想自己输出时钟,所以在sccb配置好了以后,把它改成了普通io

-----------------------------------------------
我专门把stm32f103的时钟频率从72M调到了16M,再自拍,除了图像反应变慢,其他没有区别
-----------------------------------------------
我已经把stm32f103的时钟频率从72M调到了16M了,图像还是可以采集正常,效果没法比较,因为我也还没有调节好

C8051f020的22M的晶振会比16M的stm32f103差很远么,这个我也不知道,

我的感觉是,频率慢一点也能够采集,当然是cpu越快越好了

stm32f103在16M的时候,我的程序已经差不多是10us采集一个点了,100k的频率这样子。

-------------------------------------------------
对啊,就是一个PCLK读一次数据,所以速度就是局限于stm32的中断响应速度,我现在是没有缓冲,读一个点数据,写一个点到屏
-------------------------------------------------
首先是是给摄像头提供时钟,然后通过SCCB初始化摄像头,然后依据时序每次pclk读一次数据,然后把数据组合成你想要的rgb数据。
同时必须处理的是行同步信号和帧同步信号,这直接关系到你所采的数据的x,y坐标,还有每个点的rgb数据的前后组合顺序。

具体看数据手册的时序图。最好你能够有逻辑分析仪,分析摄像头的数据输出,知道到底有没有数据。逻辑分析仪armok也有卖了,几百块。
用示波器也可以看一下信号。
先把SCCB调试好先吧,读取ov7660的id数据,能够读取和写入SCCB的话,基本上就完全成功了,剩下的都是些小事情。

---------------------------------------------------
ov7660是8位的 可以用16位的tft LCD(不支持8位)显示吗??

答:我用也是用的tft的16位模式。ili9320

回:【40楼】 money32

楼主你好,请问一下提供给系统的时钟一定要8M吗?低一点可以吗?

答:可以,但是对摄像头效果的影响未知……
我的程序里面是先用PA8输出8M的时钟,好初始化SCCB;初始化完成后,我把PA8改成了普通GPIO口模式,自己翻转来产生时钟。

----------------------------------------------
再请问一下,OV7600本身一般工作在什么频率范围内?

答:
典型值:24M
最小值:10M
最大值:48M

数据上面有

------------------------------------
下载:
http://download.ourdev.cn/bbs_upload245682/files_16/ourdev_453650.rar

相关帖子地址1:
18元摄像头(OV7660)+27元TFT液晶+M16显示成功!! 全套资料
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3401782&bbs_page_no=1&search_mode=1&search_text=ov7660&bbs_id=9999

地址二:
ATmega32L接ILI9325 320*240 TFT 驱动 OV7660摄像头,放图放资料
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3433467&bbs_page_no=1&search_mode=1&search_text=ov7660&bbs_id=9999
---------------------------------------

http://www.baidu.com/s?wd=SCCB++0x42

ov7660  数据手册里面搜索  42,有这么一句
The device slave addresses are 42 for write and 43 for read
---------------------------------------------
我也是飞线的,可是图像不怎么好,RGB高低BIT也颠倒试过,可是颜色总是不行,LZ可否指点一下

---------------------------------------------
这么夸张的图像应该是RGB 字节的对应问题。

两个方面:
1.ov7660 读回来是两个字节的,这两个字节的顺序你换下看看

2. r g b  565的位数还有顺序再核对一下

还有可能,你接摄像头的数据线有误?
-----------------------------------------------
我无聊在刷屏看阿莫发的模特照片,所以回复快

76  01110110
ec   11101100

60 01100000
c0  11000000
所以你的sccb 错位了 一位
---------------------------------
阿客,为什么7660要用模拟时钟呢,用系统时钟不行吗?  

可以啊,我用模拟时钟是为了在cpu处理中断的时候停掉时钟信号,以免丢失数据,也可以说是为了同步。

wangguanfu 有个帖子 直接用模拟时钟做到了20帧每秒  320*240.
继承事业,薪火相传
返回列表