STM32F4驱动OV2640摄像头
⼀、概念
1.OV2640 摄像头
OV2640 是 OV(OmniVision)公司⽣产的⼀颗 1/4 ⼨的 CMOS UXGA(1632*1232)图像传感器。该传感器体积⼩、⼯作电压低,提供单⽚ UXGA 摄像头和影像处理器的所有功能。通过 SCCB 总线控制(IIC总线),可以输出整帧、⼦采样、缩放和取窗⼝等⽅式的各种分辨率 8/10位影像数据。该产品 UXGA 图像最⾼达到 15 帧/秒(SVGA 可达 30 帧,CIF 可达 60 帧)。⽤户可以完全控制图像质量、数据格式和传输⽅式。所有图像处理功能过程包括伽玛曲线、⽩平衡、对⽐度、⾊度等都可以通过 SCCB 接⼝编程。OmmiVision 图像传感器应⽤独有的传感器技术,通过减少或消除光学或电⼦缺陷如固定图案噪声、拖尾、浮散等,提⾼图像质量,得到清晰的稳定的彩⾊图像。
1.1OV2640 的特点:
⾼灵敏度、低电压适合嵌⼊式应⽤
标准的 SCCB 接⼝,兼容 IIC 接⼝
⽀持 RawRGB、RGB(RGB565/RGB555)、GRB422、YUV(422/420)和 YCbCr(422)输出格式
watch的过去式
⽀持 UXGA、SXGA、SVGA 以及按⽐例缩⼩到从 SXGA 到 40*30 的任何尺⼨
⽀持⾃动曝光控制、⾃动增益控制、⾃动⽩平衡、⾃动消除灯光条纹、⾃动⿊电平校准等⾃动控制功能。同时⽀持⾊饱和度、⾊相、伽马、锐度等设置
⽀持闪光灯
⽀持图像缩放、平移和窗⼝设置
⽀持图像压缩,即可输出 JPEG 图像数据
⾃带嵌⼊式微处理器
房贷提前还款违约金1.2 OV2640窗⼝
ov2640在使⽤时,涉及到⼏个窗⼝,分别是传感器窗⼝、图像尺⼨窗⼝、图像窗⼝和图像输出⼤⼩。这⼏个窗⼝与我们正常使⽤
ov2640密切相关。
1. 传感器窗⼝:该功能允许⽤户设置整个传感器区域(1632*1220)的感兴趣部分,也就是在传感器
⾥⾯开窗,开窗范围从
2*2~1632*1220 都可以设置,不过要求这个窗⼝必须⼤于等于随后设置的图像尺⼨
2. 图像尺⼨:图像尺⼨也就是DSP输出图像的最⼤尺⼨,该尺⼨要⼩于等于前⾯我们传感器窗⼝设置所设定的窗⼝尺⼨
3. 图像窗⼝:图像窗⼝类似于传感器窗⼝,只是这个窗⼝是在我们前⾯设置的图像尺⼨⾥⾯,再⼀次设置窗⼝⼤⼩,该窗⼝必须⼩于等
于前⾯设置的图像尺⼨
4. 图像输出⼤⼩:最终输出到外部的图像尺⼨。该设置将图像窗⼝设置所决定的窗⼝⼤⼩,通过内部 DSP 处理,缩放成我们输出到外部
的图像⼤⼩
马可花千骨
1.3 时序
OV2640 的图像数据输出(通过 Y[9:0])就是在 PCLK,VSYNC 和 HREF/ HSYNC 的控制下进⾏的。
PCLK,即像素时钟,⼀个 PCLK 时钟,输出⼀个像素(或半个像素)。
VSYNC,即帧同步信号。
HREF /HSYNC,即⾏同步信号。
⾏时序图
长安汽车所有车型图片从以上时序图可以看出,图像数据在 HREF 为⾼的时候输出,当 HREF 变⾼后,每⼀个 PCLK 时钟,输出⼀个8 位/10 位数据。我们采⽤8 位接⼝,所以每个PCLK 输出1 个字节,且在RGB/YUV输出格式下,每个 tp=2 个Tpclk,如果是 Raw 格式,则⼀个 tp=1 个Tpclk。⽐如我们采⽤ UXGA时序,RGB565 格式输出,每 2 个字节组成⼀个像素的颜⾊(⾼低字节顺序可通过 0XDA 寄存器设
置),这样每⾏输出总共有 1600*2 个 PCLK 周期,输出 1600*2 个字节。
帧时序图
上图清楚的表⽰了OV2640 在UXGA 模式下的数据输出。我们按照这个时序去读取OV2640
的数据,就可以得到图像数据。
1.4 图像数据格式
使⽤OV2640时,我们⼀般⽤两种输出⽅式:RGB565 和 JPEG。当输出 RGB565 格式数据的时候,时序完全就是上⾯两幅图介绍的关系。⽽当输出数据是 JPEG 数据的时候,同样也是这种⽅式输出(所以数据读取⽅法⼀模⼀样),不过 PCLK数⽬⼤⼤减少了,且不连续,输出的数据是压缩后的 JPEG 数据,输出的 JPEG 数据以:0XFF,0XD8 开头,以 0XFF,0XD9 结尾,且在 0XFF,0XD8 之前,或者 0XFF,0XD9 之后,会有不定数量的其他数据存在(⼀般是 0 ),这些数据我们直接忽略即可,将得到的0XFF,0XD8~0XFF,0XD9 之间的数据,保存为.jpg/.jpeg ⽂件,就可以直接在电脑上打开看到图像了。
2.DCMI接⼝
STM32F4 ⾃带了⼀个数字摄像头(DCMI)接⼝,该接⼝是⼀个同步并⾏接⼝,能够接收外部 8 位、10 位、12 位或 14 位CMOS 摄像头模块发出的⾼速数据流。可⽀持不同的数据格式:YCbCr4:2:2/RGB565 逐⾏视频和压缩数据 (JPEG)
2.1 DCMI接⼝特点
8 位、10 位、12 位或 14 位并⾏接⼝
内嵌码/外部⾏同步和帧同步
连续模式或快照模式
裁剪功能
⽀持以下数据格式:
1,8/10/12/14 位逐⾏视频:单⾊或原始拜尔(Bayer)格式
2,YCbCr 4:2:2 逐⾏视频
3,RGB 565 逐⾏视频
4,压缩数据:JPEG
2.2 DCMI接⼝信号
DCMI 接⼝包括如下⼀些信号:
1. 数据输⼊(D[0:13]),⽤于接收摄像头的数据输出,接收OV2640我们只⽤了8位数据。
2. ⾏同步输⼊信号(HSYNC),⽤于接收摄像头的HSYNC/HREF信号
3. 垂直同步(场同步)输⼊(VSYNC),⽤于接摄像头的 VSYNC 信号。
4. 像素时钟输⼊(PIXCLK),⽤于接摄像头的 PCLK 信号。
DCMI 接⼝是⼀个同步并⾏接⼝,可接收⾼速(可达 54 MB/s)数据流。该接⼝包含多达14 条数据线(D13-D0)和⼀条像素时钟线(PIXCLK)。像素时钟的极性可以编程,因此可以在像素时钟的上升沿或下降沿捕获数据
DCMI 接收到的摄像头数据被放到⼀个 32 位数据寄存器(DCMI_DR)中,然后通过通⽤DMA 进⾏传输。图像缓冲区由 DMA 管理,⽽不是由摄像头接⼝管理。
从摄像头接收的数据可以按⾏/帧来组织(原始 YUV/RGB/拜尔模式),也可以是⼀系列
JPEG 图像。要使能 JPEG 图像接收,必须将 JPEG 位(DCMI_CR 寄存器的位 3)置 1。
数据流可由可选的 HSYNC(⽔平同步)信号和 VSYNC(垂直同步)信号硬件同步,或
者通 过数据流中嵌⼊的同步码同步。
DCMI 接⼝的框图
DCMI 接⼝的数据与 PIXCLK(即 PCLK)保持同步,并根据像素时钟的极性在像素时钟上升沿/下降沿发⽣变化。
HSYNC(HREF)信号指⽰⾏的开始/结束,VSYNC 信号指⽰帧的开始/结束。DCMI 信号波形如图 40.1.2.2 所⽰
lbp2900打印机驱动
上图中,对应设置为:DCMI_PIXCLK 的捕获沿为下降沿,DCMI_HSYNC 和 DCMI_VSYNC的有效状态为 1,注意,这⾥的有效状态实际上对应的是指⽰数据在并⾏接⼝上⽆效时,HSYNC/VSYNC 引脚上⾯的引脚电平
2.3 DCMI配置
在OV2640实验中,我们⽤到的DCMI数据宽度位8位,通过设置DCMI_CR 中的EDM[1:0]=00 设置。此时DCMI_D0~D7 有
效,DCMI_D8~D13 上的数据则忽略,这个时候,每次需要 4 个像素时钟来捕获⼀个 32 位数据。捕获的第⼀个数据存放在 32 位字的LSB 位置,第四个数据存放在 32 位字的 MSB 位置 ,捕获数据字节在 32 位字中的排布如表 40.1.2.1 所⽰:
DCMI 接⼝⽀持 DMA 传输,当 DCMI_CR 寄存器中的 CAPTURE 位置 1 时,激活 DMA接⼝。摄像头接⼝每次在其寄存器中收到⼀个完整的32 位数据块时,都将触发⼀个DMA 请求。
DCMI_CR 寄存器各位描述
ENABLE,该位⽤于设置是否使能 DCMI,不过,在使能之前,必须将其他配置设置好。
FCRC[1:0],这两个位⽤于帧率控制,我们捕获所有帧,所以设置为 00 即可。
VSPOL,该位⽤于设置垂直同步极性,也就是 VSYNC 引脚上⾯,数据⽆效时的电平状态。
HSPOL,该位⽤于设置⽔平同步极性,也就是 HSYNC 引脚上⾯,数据⽆效时的电平状态。
PCKPOL,该位⽤于设置像素时钟极性,我们⽤上升沿捕获,所以设置为 1。
CM,该位⽤于设置捕获模式,我们⽤连续采集模式,所以设置为 0 即可。
CAPTURE,该位⽤于使能捕获,我们设置为 1。该位使能后,将激活 DMA,DCMI 等待第⼀帧开始,然后⽣成 DMA 请求将收到的数据传输到⽬标存储器中。注意:该位必须在 DCMI
的其他配置(包括 DMA)都设置好了之后,才设置!!
2.4 硬件同步
硬件同步模式下将使⽤两个同步信号 (HSYNC/VSYNC)。根据摄像头模块/模式的不同,可能在⽔平/垂直同步期间内发送数据。由于系统会忽略 HSYNC/VSYNC 信号有效电平期间内接收的所有数据,HSYNC/VSYNC 信号相当于消隐信号。
为了正确地将图像传输到 DMA/RAM 缓冲区,数据传输将与 VSYNC 信号同步。选择硬件同步模式并启⽤捕获(DCMI_CR 中的CAPTURE 位置 1)时,数据传输将与 VSYNC 信号的 ⽆效电平同步(开始下⼀帧时)。之后传输便可以连续执⾏,由 DMA 将连续帧传输到多个连续的缓冲区或⼀个具有循环特性的缓冲区。为了允许 DMA 管理连续帧,每⼀帧结束时都将激活VSIF(垂直同步中断标志,即帧中断),我们可以利⽤这个帧中断来判断是否有⼀帧数据采集完成,⽅便处理数据
DCMI 接⼝的捕获模式⽀持:快照模式和连续采集模式。⼀般我们使⽤连续采集模式,通过 DCMI_CR 中的 CM 位设置。另
外,DCMI 接⼝还⽀持实现了 4 个字深度的 FIFO,配有⼀个简单的 FIFO 控制器,每次摄像头接⼝从 AHB 读取数据时读指针递增,每次摄像头接⼝向FIFO 写⼊数据时写指针递增。因为没有溢出保护,如果数据传输率超过 AHB 接⼝能够承受的速率,FIFO 中的数据就会被覆盖。如果同步信号出错,或者 FIFO 发⽣溢出,FIFO 将复位,DCMI 接⼝将等待新的数据帧开始。
⼆、程序编写:
何韵诗 邓九云以下程序对初始化函数进⾏展⽰: