基于STM32的OV7670摄像头总结
一、OV7670模块:
介绍一下OV7670传感器:CMOS器件;标准的SCCB接口,兼容IIC接口;内置感光阵列,时序发生器,AD转换器,模拟信号处理,数字信号处理器.....
大致工作过程:光照射到感光阵列产生相应电荷,传输到相应的模拟信号处理单元,再由AD转换为数字信号,在经由数字信号处理器插值到RGB信号,最后传输到屏幕上......
先了解一下基础知识:现在市面上的OV7670模块分两种:1、带FIFO芯片;2、不带FIFO芯片。当然带FIFO的要贵一点~下面介绍带FIFO和不带FIFO的工作原理:
图1:不带FIFO
图2:带FIFO
下面就讲解这两种方式的适用范围:
- 不带FIFO:这种方法最简单,最直接,但是最不好实现的方法,原因是多数的CMOS芯片(如OV7670)的时钟速度可以高达24M,一般单片机的IO口速度根本达不到(stm32的IO速度,寄存器比库函数快,博主之前测,用库函数IO口速度好像是2.5Mhz,而用寄存器IO口速度是8M吧,速度相差较大~)。当然,高级的MCU,如ARM9以上或者DSP图像处理芯片等,本身处理速度快,内存大而且有的还带camera接口,可以不用带FIFO。主要是人家价格也高啊~
- 但也不是不是完全没有办法在低速上实现采集,方法也很简单,那么就是降低CMOS 的输出速度,不过这需要靠外部的晶振和内部的PLL 电路以及像素时钟速度,帧速等多个寄存器共同设置,并且要和MCU 的IO 速度匹配才可实现。但不建议这么做,原因是:这种寄存器设置将带来更多的学习困难和理解困难,并导致硬件图像的采集速度可能下降到0.5 帧以下,同时带来图像失真的可能。
- 还有一种方法就是DMA方式采集,代码复杂,速度在5-10帧左右。(博主本来想用该方法的,可是基础差,调试困难。会接着调试~)
- 注:部分CMOS 时钟速度不快,可以单片机直接采集,如OV7660,但该芯片已经停产。
- 带FIFO:由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。
注意:FIFO不具备地址功能,因此他也就不具备数据的定位(选址)读取功能,所以不可能有真正的数据处理能力!
总的来说:带FIFO比不带FIFO操作起来更简单,8位MCU也能胜任。下面我们参考战舰摄像头实验(带FIFO的OV7670模块)
二、OV7670的图像数据输出格式:(参考战舰开发指南)
先简单了解几个定义:
- VGA:分辨率为640*480的输出模式
- QVGA:分辨率为320*240的输出格式
- QQVGA:分辨率为160*120的输出格式
- PCLK:像素时钟,一个PCLK时钟,输出1个像素或半个像素
- VSYNC:帧同步信号
- HREF/HSYNC:行同步信号
先看行输出时序:
![](/assets/blank.gif)
图3:OV7670行输出时序
在来看 帧时序:
![](/assets/blank.gif)
图4:OV7670帧时序
三、战舰OV7670模块原理图讲解:
![](/assets/blank.gif)
![](/assets/blank.gif)
图5:战舰OP7670模块原理图
四、存储和读取图像数据的过程及程序讲解(参考原子哥的开发指南和代码)
对于该模块,我们只关心两点:1、如何存储图像数据;2、如何读取图像数据
1、存储(OV7670往FIFO中写数据)
战舰OV7670模块存储图像数据的过程为:等待OV767同步信号->FIFO写指针复位->FIFO写使能->等待第二个同步信号->FIFO写禁止,通过以上5个步骤就可以完成一帧图像的存储
2、读取(MCU从FIFO中读取数据)
读取过程:FIFO读指针复位->给FIFO读时钟(FIFO RCLK)->读取第一个像素高字节->给FIFO读时钟(FIFO RCLK)->读取第一个像素低字节->给FIFO读时钟(FIFO RCLK)->读取第二个像素高字节->循环读取剩余像素->结束
比如QVGA模式,RGB565格式,我们总共循环读取320*240*2次,就可以读取一帧数据,把这些数据写入LCD模块,就可以看到摄像头的画面了。
程序讲解:(主要是OV7670对FIFO的写控制和MCU从FIFO中读取数据)
1、利用外部中断来对OV7670进行写操作控制
![](/assets/blank.gif)
图6:外部中断对OV7670进行写控制
2、MCU从FIFO中读取数据(更新LCD显示)
![](/assets/blank.gif)
图7:更新LCD显示函数(MCU读取FIFO数据)
对了,战舰例程中还有个字节对齐的问题,详情请浏览我转载的博客:http://blog.csdn.net/houqi02/article/details/51707456
本篇博客到此结束,多谢看官!博主不才,难免有不足之处,恳请看官提出交流,共同进步!
基于STM32的OV7670摄像头总结相关推荐
- 【OV7670】基于FPGA的OV7670摄像头介绍和使用
1.软件版本 quartusii12.1 2.本算法理论知识 OV7670摄像头模块 带384Kb FIFO 数字摄像头 手动变焦 OV7670总共有656*488个像素,其中640*480个有效 ...
- 总:基于FPGA的OV7670摄像头显示
目录 前言: 一.整体系统设计 二.各部分模块设计 1.时钟模块 2.OV7670初始化模块 3.DVP协议数据流模块 4.写FIFO模块 5.读FIFO模块 6.写FIFO控制模块 7.读FIFO控 ...
- 基于FPGA的OV7670摄像头实时检测
目录 前言:整体系统框图 一.OV7670摄像头简介 二.OV7670 SCCB协议简介 三.OV7670初始化寄存器配置 四.OV7670初始化代码编写 五.什么是DVP? 六.摄像头写数据请求 七 ...
- 基于STM32的OV7725摄像头拍照实验
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+鹰眼OV7725摄像头(注意,为了减少摄像头连线的麻烦,建议初学者选取单片机时选用带有摄像头接口的板子) 工程介绍:需要 ...
- stm32驱动ov7670摄像头识别颜色并追踪
最近在搞摄像头识别颜色并追踪,有了那么一点点成过,记录一下防止以后忘了! 先上两张成果图:有点模糊,凑合看. 大神地址:https://www.amobbs.com/thread-5499408-1- ...
- STM32F407获取OV7670摄像头图像及上位机解码(一维码二维码)
STM32F407获取OV7670摄像头图像及上位机解码(一维码&二维码) 1. 目的 针对静止拍摄图像场景,实现STM32F407对30万像素OV7670摄像头进行图像捕获,并通过串口将数据 ...
- STM32H750获取OV7670摄像头图像及上位机解码(一维码二维码)
STM32H750获取OV7670摄像头图像及上位机解码(一维码&二维码) 1. 目的 针对静止拍摄图像场景,实现STM32H750对30万像素OV7670摄像头进行图像捕获,并通过串口将数据 ...
- ”WinForm上位机+OV7670摄像头+STM32+蓝牙“图像采集系统(二)PC-MCU蓝牙通信及WinForm上位机开发
上篇Blog谈了一下stm32驱动ov7670进行图像采集,这一篇谈一下后续的几个步骤: 1.图像处理 因为对图像质量要求不高,而且串口蓝牙通信速度局限于波特率.所以决定只传输灰度图像,简单地用了RG ...
- 基于FPGA OV7670摄像头初始化配置
目录 一.OV7670摄像头简介 二.ov7670 SCCB协议简介 三.OV7670初始化寄存器配置 四.OV7670初始化代码编写 1.初始化过程 2.RTL设计 五.仿真测试 一.OV7670摄 ...
最新文章
- linux 失败模式,在Linux中在AP模式下扫描失败(wpa_supplicant)
- 认识网页:html + css + JavaScript
- html5up ui开源框架,ZUI-HTML5前端 UI 框架
- 图论--一般图带花树匹配--模板
- (32)SystemVerilog语言编写打两拍
- android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法
- android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...
- MongoDB插入文档
- 原生js滚动到底部加载数据和下拉刷新 Scrollload
- 利用Pelican搭建个人博客
- ora-01033 解决方法
- Zabbix监控网站
- 安规电容知识详解,X电容和Y电容
- 我乐网关停1月套牢2亿风投
- RISC-V MCU应用教程之PWR睡眠模式
- figma的一些用法(一)
- address localhost:8080 is already in use(端口被占用)Windows系统问题解决
- java存档_存档 Java 代码 - Java 入门教程
- 安卓中QQ登陆源代码
- Gogole C++ 编程风格(二)