STM32F4 驱动OV2640摄像头
因为最近需要做与摄像头有关的项目,所以先学习一下最基本的摄像头驱动,本次测试使用了野火家的32F407开发板(霸天虎V1),和OV2640摄像头模块。(注意啊,这里不是做广告,只是有什么用什么而已~~)
因为手头也没别的硬件了,买开发板的时候也忘了买屏幕。。。 想要测试摄像头只能把图像数据传到电脑上再做解析了。所以这次实验的方案如下:
- 使用ov2640摄像头连接开发板
- 使用usart1 向电脑端发送JPEG图像数据
- 电脑端使用上位机进行图像数据解码并显示
下面对需要用到的知识点分别介绍~~
OV2640摄像头
OV2640摄像头是一款有200W像素的摄像头,它可以以原始数据或者JPEG格式输出图像数据,它的硬件架构如下:
其中SCCB接口在协议上是IIC协议的简化版。所以把它连接到单片机的IIC接口就可以,单片机通过SCCB接口配置摄像头的寄存器来控制摄像头的行为。
右侧的Y信号是输出图像数据的引脚,为10位,它可以配置成10bit输出或者8bit输出。
图中左下角部分的引脚有必要说明一下:
引脚名 | 功能 |
---|---|
XVCLK | 摄像头时钟源 |
PCLK | 像素时钟输出,Y每输出一个8位数据,PCLK跳变一次 |
VSYNC | 垂直同步信号,摄像头发完一帧数据,VSYNC跳变一次 |
HSYNC | 水平同步信号,摄像头每发完一行数据,HSYNC跳变一次 |
在传输原始图像时VSYNC和HSYNC时都要连接到单片机的, 如果传输JPEG数据就只需要VSYNC就可以了,因为传输JEPG数据流时,JPEG数据大小是不定的,所以传输jpeg数据时,HSYNC信号是不用的,传输完一帧JPEG数据时HSYNC会跳变一次,表明一帧图像信息已传输完成。
关于寄存器配置
摄像头的寄存器配置较为复杂,而且官方给出的数据手册描述也较为模糊,所以自己手写配置信息有一定的困难。不过官方给出了配置寄存器的示例(名字如图),直接拿来改改就可以用了